我有这段代码:
module(
// Set inputs and outputs
output [7:0]ledg
);
reg state;
assign ledg[0] = state;
always @ (posedge clock)
begin
// Increment a counter and set state <= to the counter
end
always @ (posedge clock)
if (sw[9:5] == 5'b00010)
begin
hex3 <= 7'b1000000;
hex2 <= 7'b1000000;
hex1 <= 7'b1000000;
hex0 <= 7'b1000000;
end
endmodule
我让LED闪烁,但我想要的是当其中一个sw [9:5]打开时LED会闪烁。但是,无论开关是打开还是关闭,LED的编码方式都会闪烁。
但是我遇到了代码行的问题:
assign ledg[0] = state;
我认为问题是你不能在always块中使用assign关键字。它必须在一个总是块之外分配。
这就是我的问题所在。如何指定闪烁LED的状态,使其在进入IF条件块时“开始”闪烁,但在开关关闭时停止闪烁?
由于
答案 0 :(得分:0)
您可以设置一个标志来创建条件语句:
assign ledg[0] = (flag == 1'b1) ? state : '0;
您需要将总是阻止更改为:
always @ (posedge clock)
if (sw[9:5] == 5'b00010)
begin
flag <= 1'b1;
hex3 <= 7'b1000000;
hex2 <= 7'b1000000;
hex1 <= 7'b1000000;
hex0 <= 7'b1000000;
end
else begin
flag <= 1'b0;
end
仅供参考,您可以使用hex0到hex3的值,但是当开关未打开时,您不能为它们分配任何值。结果他们将合成到锁存器。
或者,您可以将ledg [0]定义为reg,只需在always块中为其分配,而不使用assign关键字:
module(
// Set inputs and outputs
output reg [7:0]ledg // <----- 'output' to 'output reg'
);
reg state;
//assign ledg[0] = state; <-------Remove this line
always @ (posedge clock)
begin
// Increment a counter and set state <= to the counter
end
always @ (posedge clock)
if (sw[9:5] == 5'b00010)
begin
hex3 <= 7'b1000000;
hex2 <= 7'b1000000;
hex1 <= 7'b1000000;
hex0 <= 7'b1000000;
ledg[0] <= state;
end
else
ledg[0] <= '0;
endmodule