由慢時鐘域到快時鐘域的脈沖同步電路結構相對簡單。慢時鐘域的脈沖信號在快時鐘域來看就是電平信號。注意跨時鐘域同步的時候輸出的脈沖必須是寄存器信號,如果需要被同步的脈沖是通過組合邏輯產生的,那么在同步之前一定要在本時鐘域下用寄存器抓一拍。比如,clka下通過計數器產生了脈沖信號pls\_a = (cnt==4’d5),如果要將pls\_a同步到另外一個時鐘域,首先在clka下將pls\_a打一拍,避免組合邏輯產生的毛刺,這一點是異步信號處理的基本原則。

圖 慢時鐘到快時鐘轉換電路
如圖3所示,pls\_slow是來自慢時鐘域的脈沖信號被同步到快時鐘域clk\_fast,在pls\_slow經過2級DFF處理后的信號認為是穩定的,將該信號取反并和下一拍的信號作與邏輯,即可在clk\_fast時鐘域產生脈沖信號neg\_b(下降沿脈沖檢測),同理將該信號與下一拍的取反信號作與邏輯可產生pos\_b(上升沿脈沖檢測)。
rtl代碼如下所示:
```
verilog
module pls_sync_s2f(
rst_n ,
clka ,
clkb , //fast clk
pls_a , //pluse in clka
neg_b ,
pos_b
);
//parametr
parameter DLY = 1 ;
//input output
input rst_n ;
input clka ;//slow clk
input clkb ;//fast clk
input pls_a ;//pluse in clka
output pos_b ;//posedge pluse in clkb
output neg_b ;//negedge pluse in clkb
//-----------------------------
//--signal
//-----------------------------
reg dff1 ;
reg dff2 ;
reg dff3 ;
//-----------------------------
//--main circuit
//-----------------------------
always@(posedge clkb or negedge rst_n)
begin
if(!rst_n) begin
dff1 <= 1'b0 ;
dff2 <= 1'b0 ;
dff3 <= 1'b0 ;
end
else begin
dff1 <= #DLY pls_a ;
dff2 <= #DLY dff1 ;
dff3 <= #DLY dff2 ;
end
end
assign pos_b = dff2 & (~dff3) ;
assign neg_b = (~dff2) & dff3 ;
endmodule
~~~
```
仿真波形如圖
