在verilog中,我有一个错误,我无法通过.这是代码的第一位,然后是最后一位
Run Code Online (Sandbox Code Playgroud)module Decoder(op,funct,aluop,mwr,mreg,mrd,alusrc,regdst,regwr,btype); input[5:0] op,funct; output[2:0] aluop; output[1:0] btype; output mwr,mreg,mrd,alusrc,regdst,regwr; wire aluop,mwr,mreg,mrd,alusrc,regdst,regwr,btype; case(op) 6'b000000: begin case(funct) 6'b001010: assign aluop = 3'b010; 6'b001100: assign aluop = 3'b111; 6'b010001: assign aluop = 3'b011; default: assign aluop = 3'b000; endcase assign btype = 2'b00; assign mwr = 1'b0; assign mreg = 1'b0; assign mrd = 1'b0; assign alusrc = 1'b0; assign regdst = 1'b1; assign regwr = 1'b1; end
...
Run Code Online (Sandbox Code Playgroud)default: begin assign aluop = 3'b000; assign mwr = 0; assign mreg = 0; assign mrd = 0; assign alusrc = 0; assign btype = 2'b00; assign regdst = 0; assign regwr = 0; end endcaseendmodule
它一直给我以下错误
错误(10170):Decoder.v(7)附近文本"case"的Verilog HDL语法错误; 期待"endmodule"错误(10170):Decoder.v(14)附近文本"6"的Verilog HDL语法错误; 期待"endmodule"
它还在每个结束语句以及默认和结束时执行此操作
我不知道它为什么这样做,我对verilog相当新.
提前致谢
我相信你只能使用一个case声明或if/else一个always块内.我不确定为什么你的错误信息没有说一些更有帮助的东西,但这可能是问题所在.
尝试重写您的代码,如下所示:
//change wire types to reg type
always @*
begin
case (op)
6'b000000: begin
aluop = 3'b000
end
...
endcase
end
Run Code Online (Sandbox Code Playgroud)