그것이 있어야 귀하의 질문의 예에서 약간의 실수가 : 신호가 낮은 것입니다 때 negedge reset
가 트리거
always @ (posedge clk or negedge reset) begin
if (~reset) begin //<-- Reset when rest low
//Initialize the signals
end
else begin
//do something
end
end
은, 그러므로 당신은 리셋 조건이 일치합니다. 이것은 Active Low 리셋입니다.
always @ (posedge clk or posedge reset) begin //<--Posedge trigger reset
if (reset) begin //<-- Reset when rest high
//Initialize the signals
end
else begin
//do something
end
end
리셋 조건이 아무것도 할 수 있습니다 0 일 필요는 없습니다하지만 알려진 정적 값이어야합니다 : 활성이 높은 리셋을 위해 당신이 원하는 (시 reset == 1
재설정). 즉 next_state
또는 a+b
등이 아닙니다. 이것은 플립 플롭의 리셋 핀에 연결되어 있기 때문에 이름을 재설정 한 이유가 여기에 있습니다.
리셋하는 전원이없는 경우 ASIC에서 활성 로우 리셋을 사용하는 것이 좋습니다. 칩이 시작될 때 시계의 위치에 따라 동기식으로 리셋을 해제하는 경우가 있습니다. 종종 최소 2 개의 포즈 죠. 이렇게하면 약간의 시간 동안 리셋 글리치가 발생하지 않습니다.
전원을 켤 때 칩이 전원을 공급할 때 액티브 로우 리셋을 적용하기 때문에 모든 것이 알려진 상태입니다. 비동기 리셋을 사용합니다. 동기 재설정을 사용하면 첫 번째 상태가 무엇인지 알 수 없습니다. 동기 재설정은 데이터를 지울 필요가있는 상태 시스템 및 필터에서 자주 사용됩니다. 비동기식 재설정은 알려진 값을 설정하기 위해 POR (power on reset)에 사용됩니다.
if (reset) else
구조가 사용되어 합성 도구가 비동기 재설정이있는 플립 플롭으로이를 재구성 할 수 있으므로 다른 구조를 시도해도 좋지만 시뮬레이션을 잘못 수행 할 수도 있지만 하드웨어 버그로 쉽게 끝날 수 있습니다. 시뮬레이션에 표시되지 않아 디버깅이 매우 어렵습니다.
set-reset flip-flops (SR Flip-Flop)을 읽어 보시기 바랍니다. 토글 (Toggle) 기능이있는 JK 만 있습니다.
그것은 다음과 같은 사용하여 암시 될 수있다
always @ (posedge clk or negedge reset or posedge set) begin
if (~reset) begin
//reset the signals
end
else if (set) begin
//set the signals
end
else begin
//do something
end
end