各位好,有個問題像大家請教一下,檢測上升沿和下降沿的 ,當檢測到上升沿時
out 輸出1,檢測到下降沿時out 輸出0,用的以下的代碼,
但是用邏輯分析儀查看波形如下,out 輸出1延遲了兩個時鍾周期20ns,請問下有
沒有好的代碼方法讓這個延遲時間短一點,測量了別人的延遲只有5ns
- reg sig_in0;
- reg sig_in1;
- wire rising_edge;
- wire falling_edge;
- assign rising_edge = ~sig_in0 & sig_in1;
- assign falling_edge = sig_in0 & ~sig_in1;
- always@(posedge clk) begin
- sig_in0 <= sig_in1;
- sig_in1 <= mcu_sig_3 ;
- end
- always @(posedge clk) begin
- if( falling_edge_3)
- out <= 0;
- else if(rising_edge_3)
- out <= 1;
- end
復制代碼
你的比較方法不對,這種邊沿檢測法,用的是時序電路,最小時間當然是1個時鍾周期,你說的5ns,估計是組合邏輯的延時吧,這是不能比較的。
比如
always @(posedge mcu_sig_3 or negedge rst_n)
begin
if(!rst_n)
out <= 0;
else
out <= 1;
end
這個從判斷mcu_sig_3上升沿,到out輸出,就快, 幾ns而已,就是一個選擇器的輸出延時而已。但這種方法沒有意思,FPGA設計的邊沿判斷,都是采用2級寄存器打拍的方法,只要系統設計合理,不在乎那兩個時鍾周期。
如果想使用邊沿檢測法做你如上所述的輸出,並且想減小輸出延時,只能提高檢測時鍾頻率!
你的延時肯定是兩個時鍾周期啊,產生rising_edge或者falling_edge需要一個時鍾周期,檢測它們然后產生輸出由需要一個周期。
posedge 和 negedge 本身就是類似邊沿檢測的功能
規范設計時,還得用時鍾采樣打拍
學習學習
受教育了。
常用的方法,哈哈