對於脈衝,我們使用脈衝同步器和電平信號,我們使用雙觸發器同步器,但是如果信號可能是脈衝或電平行爲,該怎麼辦?有什麼辦法可以同步嗎?脈衝和電平信號的時鐘域交叉
1
A
回答
0
是的,你可以但解決方案需要基於輸入脈衝相對於輸出時鐘的寬度。
當輸出時鐘非常慢,並且您有脈衝時,您需要添加一個在輸入時鐘域中運行的內聯脈衝展寬器。拉伸由下面的stretch_out的位寬定義,並且「必須」大於輸出clk域上的一個時鐘。
reg [3:0] stretch_out;
always @ (posedge inclk)
begin
stretch_out <= in_signal ? 4'b1111 : {stretch_out[2:0],1'b0};
end
現在,您可以使用雙觸發器同步器。
reg [1:0] out_sync;
always @ (posedge outclk)
begin
out_sync <= {out_sync[0],stretch_out[3]};
end
這應該將電平和脈衝從快速域同步到慢速域。
唯一的問題是,你將增加的不僅僅是你通常的兩個觸發延遲。
0
您可以使用目標域中的信號進行異步設置,使用雙觸發器進行同步,然後檢測上升沿。應該適用於短脈衝和長時間的水平。
// Prevent DRC violations if using scan
wire in_signal_n = scan_mode ? 1'b1 : !signal_in;
// Following code creates a flop with both async setb and resetb
reg sig_n_async;
always @ (posedge outclk or negedge reset_n or negedge in_signal_n)
if (!reset_n)
sig_n_async <= 0;
else if (!in_signal_n)
sig_n_async <= 1;
else
sig_n_async <= 0;
// Synchronizer
reg [1:0] out_sync;
always @ (posedge outclk or negedge reset_n)
if (!reset_n)
out_sync <= 0;
else
out_sync <= {out_sync[0],sig_n_async};
// Rising edge
reg out_sync_del;
always @ (posedge outclk or negedge reset_n)
if (!reset_n)
out_sync_del <= 0;
else
out_sync_del <= out_sync[1];
wire signal_out = out_sync[1] & !out_sync_del;
相關問題
- 1. 基於觸發信號的一個時鐘週期脈衝
- 2. 什麼是時鐘脈衝測量?
- 3. 脈衝編碼調製時信號頻率如何存儲?
- 4. 如何在連續時間內保持脈衝信號? (Simulink)
- 5. Matlab:比較具有不同時間值和脈衝的兩個信號
- 6. 平交叉域的網址與JavaScript?
- 7. 掃描/線性調頻脈衝信號不正確的頻率
- 8. 找到相同信號的兩個脈衝之間的持續時間
- 9. Maximo交叉域
- 10. 錯誤在Fedora Linux系統 - 時鐘脈衝相位差檢測
- 11. Active-HDL仿真時鐘交叉
- 12. C#等待和脈衝
- 13. c#:脈衝和等待
- 14. ReaderWriterLockSlim和脈衝/等待
- 15. 叉中的信號
- 16. 脈衝動畫
- 17. QNX MsgReceive脈衝
- 18. 錯誤交叉域
- 19. 交叉原點域
- 20. MFCC中的時域信號
- 21. 爲交叉平臺編碼和解碼錶情符號
- 22. 根據信號強度查找位置(圓圈之間的交叉區域)
- 23. 時鐘兩邊的觸發信號
- 24. 信號+叉在linux
- 25. 如何在Matlab中改變矩形脈衝的脈衝振幅
- 26. arduino上的脈衝生成和讀出
- 27. C - 多信號叉與信號量
- 28. GroupPrincipal.GetMembers和交叉域成員錯誤
- 29. 與jQuery和jQuery Cookie交叉域Cookie Cookie
- 30. Wireless.h如何打印出信號電平?