我目前正在编写 Verilog 代码来构建“拔河”游戏。下面的模块代表代表比赛场地的 15 个 LED 的中央 LED。中央灯必须一直亮着,直到游戏开始,例如当它接收到某种输入时(输入由 L 和 R 给出,其中 L 是向左移动,而 R 是向右移动)。
但是,我遇到了一个奇怪的错误。虽然我enabled
在构造时给出了 1 的值,并且 L 和 R 在构造时为 0(或应该是),但当我运行代码时enabled
立即变为 0。
我的问题是,为什么会发生这种情况?在看到输入之前,我将如何使变量保持值 1?
module centerLight(Clock, reset, L, R, NL, NR, lightOn);
input Clock, reset, L, R, NL, NR;
output reg lightOn;
reg gameStart = 0;
reg enabled = 1;
always@(L or R)
if (L | R) begin
gameStart = 1;
enabled = 0;
end
else if (enabled)
gameStart = 0;
wire PS;
reg NS;
always@(PS or L or R or NL or NR)
if((NL && R) || (NR && L)) NS = ~PS;
else NS = PS;
always@(PS or gameStart)
case(PS || !gameStart)
0: lightOn = 0;
1: lightOn = 1;
endcase
D_FF cl (PS, NS, reset, Clock);
endmodule
module D_FF (q, d, reset, clk);
input d, reset, clk;
output reg q;
always@(posedge clk or posedge reset)
if (reset)
q = 0;
else
q = d;
endmodule