2013-04-14 4 views
1

1) 리셋은 ASIC에서 알려진 상태에서 시작하는 데 사용된다는 것을 알고 있습니다.플립 플롭에서 세트 사용

always @ (posedge clk or negedge reset) 
begin 
if (reset) 
//Initialize the signals 
else 
//do something 
end 

좋아하지만 이것은 우리가 set 신호를 사용하고 다른 상태에서 시작하고 회로를 할 생각되어 결국 무엇 결국? 그것은 바보 같다하지만 난 호기심이하지 않는 이유 케이스 인 경우 그것. 나는 이런 식의 코드를 본 적이 없다.

always @ (posedge clk or negedge set) 
    begin 
    if (set) 
    //Initialize the signals 
    else 
    //do something 
    end 

2) 또한, I는 리셋 신호 if 상태 리셋 if/else 문을 사용하여 모델링 될 것이 필요하다고 읽었다. 아무도 나에게 그렇지 않으면 그것을 어떻게하는 모범을 줄 수 있습니까?

답변

1

그것이 있어야 귀하의 질문의 예에서 약간의 실수가 : 신호가 낮은 것입니다 때 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