FPGA知識點 跨時鐘域處理

2021-10-24 04:45:36 字數 2177 閱讀 3572

單bit訊號

慢時鐘到快時鐘,兩級觸發器同步。

快時鐘到慢時鐘,如果是下面第乙個圖,clkb可以取樣到signal_a_in,但是如果只有單脈衝,如第二個圖所示,怎不能確保取樣到signal_a_in。

這個時候可以展寬signal_a_in,至少為clkb的乙個時鐘週期寬度。通常處理方法是使用反饋機制將輸入訊號展寬。

//在clka下,生成展寬訊號signal_a

always @(posedge clka oe negedge rst_n) begin

if(rst_n ==

1'b0)

signal_a <=

1'b0;

else

if(pulse_ina ==

1'b1)

signal_a <=

1'b1;

else

if(signal_a_r[1]

==1'b1)

signal_a <=

1'b0;

else

signal_a <= signal_a;

end//在clka下採集signal_b[1],生成signal_a_r[1]用於反饋拉低signal_a

always @(posedge clka or negedge rst_n) begin

if(rst_n ==

1'b0)

signal_a_r <=

2'b00;

else

signal_a_r <=

[signal_a_r[0]

,signal_b_r[1]

];end

多bit訊號採用非同步fifo,非同步fifo的設計見非同步fifo的設計

握手協議

握手協議非同步訊號處理行為波形圖大致如下所示

訊號d_in所處時鐘域是clk_in,且d_in只有1t的寬度,想要傳送到clk_out時鐘域(clk_out和clk_in不相關)

因為clk_out和clk_in相位關係不確定,時鐘週期大小關係不確定,它無法保證一定能取樣到d_in;

因此需要把d_in展寬,產生d_req訊號;

d_req訊號一直拉高,經過clk_out時鐘域兩級dff同步器後,得到d_req_sync;

取d_req_sync上公升沿1t,即可得到傳送到clk_out時鐘域的d_out。

此時,d_in從clk_in傳送到ckk_out的任務就算是結束了。

但對於handshake電路來說,任務還沒有結束,因為d_req一直是高電平。

因此,需要把d_req_sync訊號再用兩級dff同步器,傳回clk_in時鐘域,得到d_ack訊號;

當clk_in看到d_ack拉高後,就可以把d_req訊號拉低,到這裡乙個handshake電路行為才算是結束了。

always @(posedge clk_in or negedge rst_n) begin

if(rst_n ==

1'b0)

d_req <=

1'b0;

else

if(d_in ==

1'b1)

d_req <=

1'b1;

else

if(d_ack ==

1'b1)

d_req <=

1'b0;

end

此種方法要保證時鐘週期要保證clka時鐘域連續兩個單週期脈衝訊號的間隔要大於握手協議所需的延遲。

握手協議速度慢,相對於兩級dff占用更多的暫存器。

dmux電路

將sel訊號做非同步處理,然後輸出多位元資料。

FPGA基礎知識14 跨時鐘域處理 非同步時鐘

需求說明 ic設計基礎 內容 第一部分 fpga跨時鐘域的處理方法 第二部分 基於fpga的跨時鐘域訊號處理 專用握手訊號 來自 時間的詩 原文 在乙個 fpga 系統設計中,經常需要處理多個時鐘 比如fpga作為乙個 橋連線幾個不同的ic。不同的時鐘域有不同的時鐘頻率和時鐘相位。如何處理好多個時鐘...

FPGA跨時鐘域處理方法FIFO

1 本節目錄 2 本節引言 3 fpga簡介 4 fpga跨時鐘域處理方法fifo 5 結束語。不積跬步,無以至千里 不積小流,無以成江海。就是說 不積累一步半步的行程,就沒有辦法達到千里之遠 不積累細小的流水,就沒有辦法匯成江河大海。fpga field programmable gate arr...

FPGA單位元訊號跨時鐘域處理

詳細的原理解釋 單位元訊號跨時鐘域問題詳解 輸入 singal in,來自10mhz慢速時鐘域的單位元訊號 輸出 singal out,輸出100mhz快速時鐘域的單位元訊號 10mhz 100ns 100mhz 10ns 因為慢速時鐘域的最簡訊號長度為1個時鐘時鐘週期即 100ns,大於快速時鐘域...