현재 "Tug of War"게임을 만들기 위해 Verilog 코드를 작성 중입니다. 아래 모듈은 경기장을 나타내는 15 개의 LED의 중앙 LED를 나타냅니다. 중앙 조명은 게임이 시작될 때까지 켜져 있어야합니다 (예 : 그것은 일종의 입력을받을 때 (입력은 L과 R에 의해 주어지며, 여기서 L은 왼쪽으로 한 운동이고 R은 오른쪽으로 한 운동이다).Verilog 항상 시간 = 0에 블록
그러나 이상한 버그가 있습니다. 비록 내가 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에는 두 개의 키가 반전 된 입력이 할당되어 있습니다. – cjspook
회로 자체를 보지 않고는 말하기가 불가능합니다. 명확하지 않다 ** 시뮬레이션 **에서 이런 일이 일어나는가? 아니면 물리적으로 파워 업 할 때 일어나는가? 첫 번째 경우에는 파형을 덤프 할 수 있거나 후자의 경우 L 및 R을 할당하는 래퍼 모듈을 표시 할 수 있습니다. – Tim