Verilog:将局部参数分配给位向量线
Verilog: Assigning a localparam to a bit vector wire
我有以下 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
我不允许更改变量的类型。我还可以使用什么其他方式将局部参数分配给位向量连线?
我发现不允许更改变量类型的约束很奇怪。使它们 'output reg[6:0] ...' 会消除你的错误,这对电路的任何其他部分都没有影响。例如调用您的模块的代码不关心它是电线还是 reg。
但是!
即使使用 'reg' 你的代码在制作闩锁时仍然是错误的。 always(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>;
我有以下 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
我不允许更改变量的类型。我还可以使用什么其他方式将局部参数分配给位向量连线?
我发现不允许更改变量类型的约束很奇怪。使它们 'output reg[6:0] ...' 会消除你的错误,这对电路的任何其他部分都没有影响。例如调用您的模块的代码不关心它是电线还是 reg。
但是!
即使使用 'reg' 你的代码在制作闩锁时仍然是错误的。 always(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>;