我目前正在編寫Verilog代碼來構建「拔河」遊戲。下面的模塊代表15個LED的中央LED,代表比賽場地。中心燈必須亮起直到比賽開始,例如當它接收到某種輸入時(輸入由L和R給出,其中L是向左移動一次,R向右移動一次)。Verilog始終在時間= 0時阻止
但是,我遇到了一個奇怪的bug。雖然我在施工時給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;
[email protected](L or R)
if (L | R) begin
gameStart = 1;
enabled = 0;
end
else if (enabled)
gameStart = 0;
wire PS;
reg NS;
[email protected](PS or L or R or NL or NR)
if((NL && R) || (NR && L)) NS = ~PS;
else NS = PS;
[email protected](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;
[email protected](posedge clk or posedge reset)
if (reset)
q = 0;
else
q = d;
endmodule
你決定通過模擬器啓用的狀態?它應該能夠告訴你爲什麼它的狀態可能L或R有問題或有斷言 – Tim
是的,它確實看起來像L和R正在做其中的一個(我不知道如何區分差異;對不起,這是新的!)。我是否阻止Verilog執行此操作?如果有幫助的話,我在FPGA板上運行它,其中L和R被分配兩個Keys的反向輸入。 – cjspook
不可能說沒有看到電路本身。我不清楚,這是發生在**模擬**中,還是在您爲fpga啓動時發生這種情況?如果是第一種情況,您應該可以轉儲波形,或者如果是後者,請顯示分配L和R的包裝模塊。 – Tim