1. 程式人生 > >從多級延遲觸發器到邊沿檢測

從多級延遲觸發器到邊沿檢測

pos 有時 color out sig ont 原始的 時鐘 應該

  本文記錄一下關於延遲觸發器鏈與它的常用用法(即邊沿檢測。多級延遲的觸發器應該是比較常用的,當我們需要對信號信號進行延時,這個時候我們就用到了延遲觸發器鏈。下面就來記錄一下吧。

  

一、多級延遲觸發器(或延遲觸發器鏈)

  (1)多級延遲觸發器電路

  多級延遲觸發器,顧明思議就是多個觸發器串在一起,對信號進行打拍,一個觸發器就延時了一拍,也就是延遲了一個時鐘周期。

多級觸發器的代碼如下所示:

 1 module DFF_N #(parameter N=3)(
 2   input clk,
 3   input reset,
 4   input [N-1:0] D,
 5   output reg [N-1:0] Q
 6 );
 7 reg [N-1:0]d0;
 8 reg [N-1:0]d1;
 9 always@(posedge clk or negedge reset)
10   if(!reset)begin
11     d0 <= 0; //同步清 0,低電平有效
12     d1 <= 0; //同步清 0,低電平有效
13     Q  <= 0; //同步清 0,低電平有效
14   end
15   else begin
16     d0 <= D;
17     d1 <= d0;
18     Q  <= d1;
19   end
20 
21 endmodule

d0 是 D 的延遲一級采樣或者稱為 D 的延遲一拍信號,同樣 d1 是 D 的延遲兩拍信號,而 Q 則是 延遲三拍信號。一方面可以通過修改N來改變對多少位的信號的進行延時;另一方面,可以用通過修改部分代碼,添加或者減少延遲計數。

代碼綜合得到的電路(綜合之後)如下所示:

技術分享

電路中顯示出三級延時,可以延時三個時鐘節拍(也就是三個時鐘周期),需要說明的是,上述每一級觸發器都包含了3個觸發器(對三位數據總線進行延時)。

  (2)多級延遲觸發器的主要用法

①簡單的延時

  多級延遲觸發器最原始的作用單純的對 D 信號做延遲操作,這裏就不進行詳述。

②降低亞穩態往後級傳輸的概率

  如果 D 信號相對 clk 屬於不穩定信號,則 Q 和 d1 輸出相對 clk 屬 於穩定信號,這樣就有效地降低了亞穩態往後級傳輸的概率,多級延時觸發器鏈有時也稱為同步器。有關多級觸發器在降級亞穩態傳輸概率的內容,請查看我的另一篇博文:http://www.cnblogs.com/IClearner/p/6485389.html 。

③用來邊沿檢測

  可以通過 d1 和 Q 信號獲取 D 信號的上升沿或者下降沿,具體介紹如下第二大點所示。

二、邊沿檢測電路

  邊沿檢測,顧名思義,就是檢查信號的邊沿,當信號的上升沿或者下降沿到來時,獲取一個脈沖信號,時序圖如下所示:

技術分享

上圖的檢測信號同時輸出上升沿檢測和下降沿檢測。那麽這個波形怎麽來的呢,我們來看看下面幾組波形:

技術分享

可以發現:

  始信號與延遲一拍的信號 d0 的反向信,就是上升沿脈沖

  而始信號取反,然後與延遲一拍信號d0就是下降沿脈沖

如果擔心采樣不穩定,可以利用延遲兩拍的 d1 信號進行相 與。如果擔心不定態,還可以將脈沖信號進行鎖存。

代碼如下所示:

 1 module  DFF_N #(parameter  N=1)(
 2     input clk,
 3     input reset,
 4     input  [N-1:0]  D,
 5     output [N-1:0] D_rising_edge, //上升沿檢測
 6     output [N-1:0] D_falling_edge //下降沿檢測
 7 );
 8 reg [N-1:0]d0;
 9 reg [N-1:0]d1;
10 reg [N-1:0]Q;
11 always@(posedge clk or negedge reset)
12 if(!reset)begin
13     d0 <= 0;
14     d1 <= 0;
15     Q  <= 0;
16 end    else begin 
17     d0 <= D;
18     d1 <= d0;
19     Q  <= d1;
20 end
21 
22 assign D_rising_edge = ~d0 & D; //關鍵
23 assign D_falling_edge= d0 & ~D; //關鍵
24 endmodule

綜合得到的電路如下所示:

技術分享

這個電路把代碼中的Q觸發器優化掉了。兩個輸出信號D_rising_edge 、D_falling_edge分別輸出上升沿檢測信號脈沖和下降沿檢測信號脈沖。

從多級延遲觸發器到邊沿檢測