在学习过程中写了一个简单83编码器,代码如下
module code8_3(i,y);
input[7:0] i;
output[2:0] y;
always@(i)
begin
case(i[7:0])
8'b00000001:y[2:0]=3'b000;
8'b00000010:y[2:0]=3'b001;
8'b00000100:y[2:0]=3'b010;
8'b00001000:y[2:0]=3'b100;
8'b00010000:y[2:0]=3'b011;
8'b00100000:y[2:0]=3'b101;
8'b01000000:y[2:0]=3'b110;
8'b10000000:y[2:0]=3'b111;
default: y[2:0]=3'b000;
endcase
end
endmodule
报了九个错:Error (10137): Verilog HDL Procedural Assignment error at code8_3.v(8): object "y" on left-hand side of assignment must have a variable data type
可见这里y的格式可能有问题
经debug,发现always语句中的被赋值变量必须为reg型,所以在声明中声明为reg型即可 ,相对的用 assign 连续赋值的对象 必须定义成 wire(线型)