2014-11-08 6 views
0

hi Я получаю a Не могу определить язык C: /Modeltech_pe_edu_10.3c/examples error, когда я пытаюсь скомпилировать этот код verilog. Для меня это выглядит довольно упрощенным. Делаю что-то не так? Любые предложения будут полезны. Мне не нравится Modelsim, но они были вынуждены использовать его. Мне любопытно, есть ли проблема с настройками или чем-то еще.Ошибка Verilog (modelsim) при компиляции

Это реализует базовую конструкцию ALU с использованием оператора case. Пожалуйста помоги. Я попробую Xilinx немного позже, чтобы увидеть, могу ли я запустить его. Спасибо!

`timescale 1ns/1ps 

module alu(result,operand0,operand1,control) 
    (
     input [31:0] operand0, 
     input [31:0] operand1, 
     input [3:0] control, 

     output [31:0] result, 
     reg  [31:0] result; 

    always @(control, operand0, operand1) 
    begin 
     case(control) 
     4'b0000: result = operand0 && operand1; 
     4'b0001: result = operand0 || operand1; 
     4'b0010: result = operand0^operand1; 
     4'b0011: result = operand0 ~| operand1; 
     4'b0100: result = operand0 + operand1; 
     4'b0110: result = operand0 - operand1; 
     4'b1000: result = operand0 < operand1; 
     4'b1001: result = operand0 << operand1; 
     4'b1010: result = operand0 >> operand1; 
     4'b1011: result = operand0 >>> operand1; 
     endcase 
    end 

endmodule 
+0

Вы должны добавить команду, которую вы выполняете, и точное сообщение об ошибке от modelsim к вашему вопросу, чтобы люди могли дать вам хороший ответ. – sebs

ответ

0

Похоже, вы смешали стили ANSI и ANSI. Это позволило бы все имитаторы

не-ANSI (IEEE Std 1364-1995 и выше):

module alu(result,operand0,operand1,control) 
// (<-- you have an open parenthesizes that should be here 
    input [31:0] operand0; 
    input [31:0] operand1; 
    input [3:0] control; 

    output [31:0] result; 
    reg  [31:0] result; 

или ANSI (IEEE Std 1364-2001 и выше):

module alu(
    output reg [31:0] result, 
    input  [31:0] operand0, operand1, 
    input  [3:0] control 
); 

Другие рекомендации: Используйте always @* для списка автоматического сенситирования вместо always @(control, operand0, operand1). Если вам нужно следовать IEEE Std 1364-1995, используйте always @(control or operand0 or operand1), так как функция , для чувствительного списка (а также @*) была добавлена ​​в IEEE Std 1364-2001.

Смежные вопросы