编译时Verilog(modelsim)语言错误

时间:2014-11-08 00:07:46

标签: compiler-errors verilog modelsim

您好我正在尝试编译此verilog代码时无法确定C语言:/Modeltech_pe_edu_10.3c/examples错误。这对我来说似乎很简单。我做错了什么?任何的意见都将会有帮助。我不喜欢Modelsim但被迫使用它。如果设置存在问题,我很好奇。

这使用case语句实现了基本的ALU设计。请帮忙。稍后我会尝试使用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

1 个答案:

答案 0 :(得分:0)

看起来你混合了ANSI和非ANSI样式。这将是所有模拟器

非ANSI(IEEE标准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标准1364-2001中添加敏感列表(以及@*)。