私は現在、「綱引き」のゲームを構築するために Verilog コードを書いています。以下のモジュールは、競技場を表す 15 個の LED の中央の LED を表しています。中央のライトは、ゲームが始まるまで点灯している必要があります。たとえば、何らかの入力を受け取ったときです (入力は L と R で与えられます。L は左への 1 つの動き、R は右への 1 つの動きです)。
しかし、私は奇妙なバグに遭遇しました。構築時に値 1をenabled
指定し、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