Verilog开发报错:Cannot assign to array,ALU寄存器赋值问题求助
解决Verilog中ALU_result赋值报错问题
错误原因
你定义的reg ALU_result[N-1:0]是深度为N、每个元素仅1位的寄存器数组,而inA、inB是N位的向量。直接把向量赋值给数组整体是不允许的——数组必须通过索引(比如ALU_result[0])操作单个元素,但这显然不符合你用ALU输出完整N位运算结果的需求。
修正方案
把寄存器的定义改成N位的向量格式,这样就能直接接收运算后的N位结果:
parameter N = 8; input [N-1:0] inA, inB; input [3:0] op; // 修正为N位寄存器向量,而非数组 reg [N-1:0] ALU_result ; always @(*) case(op) 4'b0000: begin ALU_result = inA & inB ; end 4'b0001: begin ALU_result = inA | inB ; end 4'b0010: begin ALU_result = inA + inB ; end endcase
说明
修正后,ALU_result是一个N位的寄存器变量,和输入信号inA、inB的位宽完全匹配,可以直接接收位运算或加法运算的结果,用Icarus Verilog编译时就不会再出现赋值报错。
内容的提问来源于stack exchange,提问作者Dimitris Papadimitriou
相关产品推荐
相关产品推荐

