我有以下Verilog代码段:
module (...)
input wire [7:0] sw;
output wire [6:0] LED4;
output wire [6:0] LED3;
output wire [6:0] LED2;
output wire [6:0] LED1;
localparam charA = 7'b1110111;
localparam charB = 7'b0011111;
localparam charC = 7'b1001110;
localparam charD = 7'b0111101;
always @ (sw)
begin
if (sw[7] == 1'b1)
begin
LED4 = charA;
LED3 = charB;
LED2 = charC;
LED1 = charD;
end
end
endmodule
使用ISPLever进行编译时,会抛出错误:
Assignment target LED4 must be of type reg or genvar
Assignment target LED3 must be of type reg or genvar
Assignment target LED2 must be of type reg or genvar
Assignment target LED1 must be of type reg or genvar
我不允许更改变量的类型。我可以用什么方法将局部参数分配给位向量线?
答案 0 :(得分:1)
我发现你不允许更改变量类型的约束非常奇怪。使它们输出reg [6:0] ......'将摆脱你的错误,这将不会影响电路的任何其他部分。例如调用模块的代码并不关心它是否为电线或注册表。
但是!
即使使用' reg'你正在制作门锁,你的代码仍然是错误的。总是(sw)是组合的,你应该放一个' else'在那里。
要使用电线,您可以使用:
assign LED4 = sw[7] ? charA : <your else code>;
assign LED3 = sw[7] ? charB : <your else code>;
assign LED2 = sw[7] ? charC : <your else code>;
assign LED1 = sw[7] ? charD : <your else code>;