未知verilog错误';期待;endmodule"';

未知verilog错误';期待;endmodule"';,verilog,Verilog,在verilog中,我有一个无法通过的错误。这是代码的第一位,然后是最后一位 端模 它不断给我以下错误 错误(10170):解码器处的Verilog HDL语法错误。v(7)靠近文本“case”;应为“endmodule” 错误(10170):在文本“6”附近的解码器.v(14)处出现Verilog HDL语法错误;应为“endmodule” 它也会在每个end语句、default和endcase中执行此操作 我不知道它为什么要这样做,我对verilog还相当陌生 提前感谢我相信您只能在始终块

在verilog中,我有一个无法通过的错误。这是代码的第一位,然后是最后一位

端模

它不断给我以下错误

错误(10170):解码器处的Verilog HDL语法错误。v(7)靠近文本“case”;应为“endmodule” 错误(10170):在文本“6”附近的解码器.v(14)处出现Verilog HDL语法错误;应为“endmodule”

它也会在每个end语句、default和endcase中执行此操作

我不知道它为什么要这样做,我对verilog还相当陌生


提前感谢

我相信您只能在
始终
块中使用
案例
语句或
如果/否则
。我不确定为什么您的错误消息没有说一些更有用的东西,但这可能就是问题所在

尝试按照以下方式重写代码:

//change wire types to reg type

always @*
begin
  case (op)
    6'b000000: begin
      aluop = 3'b000
    end
    ...
  endcase
end

这是一个猜测,但编译器正在抱怨,因为它可能期望IEEE 1364-2001 verilog,而您的代码对该语言版本无效。在任何情况下,Tim的代码都可能是您正在寻找的功能

至于为什么它无效,Verilog在每个模块声明中基本上包含两个“上下文”。直接出现在模块中的任何内容都是模块项。这些包括reg/wire声明、assign语句、always语句、生成构造和模块实例

module mod;

reg reg1;           //Module item
wire wire1;         //Module item
assign wire1 = 0;   //Module item
always reg1 = 0;    //Module item
parameter con1 = 0; //Module item
 //Instances a different module based on con1
case(con1)          //Module item
  0:mod2 inst1(reg1);
  1:mod3 inst1(reg1);
  2:mod4 inst1(reg1);
endcase

endmodule
第二,存在程序性环境,其中可能存在程序性陈述。这是任务声明、函数声明、始终块、初始块和其他一些区域中的任何代码

module mod2;
reg a;

always
  begin
  a = 0; //Procedural statement
  end

initial
   a = 0; //Procedural statement 

function func1(input arg1);
case (arg1) //Procedural statement 
  0:func1 = 0; 
  default:func1 = 9;
endcase
endfunction

endmodule
自2001年以来,Verilog包含两种类型的案例陈述,即过程案例陈述和生成案例陈述。程序性案例语句的工作方式与程序性语言中的工作方式相同,但必须出现在程序性上下文中。Generate case语句在模拟开始之前进行静态计算,并且只能作为模块项出现在模块声明上下文中。注意,第二个上下文要求case表达式为常量


在最新版本的verilog 1364-2005中,生成案例可能直接出现在模块范围中,但是在2001年版本的语言中,任何生成项目都必须用
generate..endgenerate
关键字包围。如果您的编译器预期的是IEEE 1364-2001,那么您看到的错误消息是有意义的。

不过理论上解码器不应该使用寄存器。如果它们是寄存器,这真的很重要吗?@AlexMousavi仅仅因为你使用了“reg”数据类型并不一定意味着它被合成为寄存器。只要解码器中没有“保留状态”,合成将创建适当的组合逻辑。你可以阅读这篇文章以了解更多信息
module mod;

reg reg1;           //Module item
wire wire1;         //Module item
assign wire1 = 0;   //Module item
always reg1 = 0;    //Module item
parameter con1 = 0; //Module item
 //Instances a different module based on con1
case(con1)          //Module item
  0:mod2 inst1(reg1);
  1:mod3 inst1(reg1);
  2:mod4 inst1(reg1);
endcase

endmodule
module mod2;
reg a;

always
  begin
  a = 0; //Procedural statement
  end

initial
   a = 0; //Procedural statement 

function func1(input arg1);
case (arg1) //Procedural statement 
  0:func1 = 0; 
  default:func1 = 9;
endcase
endfunction

endmodule