2014-02-14 2 views
2
module syncrisedgedetect(input logic sig_a, rst,clk,output logic sig_a_risedge); 

    logic sig_a_d1; 

    always @(posedge clk or negedge rst) 
    begin 
    if(!rst) 
     sig_a_d1<=1'b0; 
    else 
     sig_a_d1<=sig_a; 
    end 

    assign sig_a_risedge=sig_a & !sig_a_d1; 

endmodule 

안녕하세요,이 코드는 sig_a에 대한 상승 에지 감지에 관한 책에서 발견되었습니다. 아무도 나에게 그 일을 설명 할 수 있습니까?상승 에지 감지 sysverilog

감사합니다.

답변

5

이것은 기본적인 동기 에지 검출 회로입니다.

입력의 sig_a은 시계의 각 상승 에지에서 샘플링됩니다 (clk). 샘플링 된 값이 등록됩니다. 즉, sig_a_d1sig_a의 값이 1 클록 사이클만큼 지연됩니다.

입력에 상승 에지가 있으면 출력은 1으로 이동합니다. sig_a_risedge에 대한 할당은 이에 대한 책임이 있습니다. "현재 값이 1이고 이전 클럭 사이클의 값이 0"인 경우 "sig_a에 상승 에지가 있습니다."

입력 신호의 주파수가 클럭의 주파수보다 낮은 경우에만 올바르게 작동합니다. 샘플링 클록의 단일 클럭주기 내에 입력이 모두 0 -> 1 -> 0이되면 에지가 누락 될 수 있습니다.