歡迎您光臨本站 登入註冊首頁

FPGA實現信號延時的方法

admin @ 2014-03-26 , reply:0

概述

FPGA實現信號延時的方法匯總:1、門延時數量級的延時(幾個ns),可用邏輯門來完成,但告訴綜合器不要將其優化掉(不精確,誤差大,常常不被推薦)。比如用兩個非門(用constraint來告訴synth……

FPGA實現信號延時的方法匯總:
1、門延時數量級的延時(幾個ns),可用邏輯門來完成,但告訴綜合器不要將其優化掉(不精確,誤差大,常常不被推薦)。比如用兩個非門(用constraint 來告訴synthesizer 不要綜合掉這些邏輯)。
2、使用delay cell,lcell。
3、採用更快的時鐘,通過計數器來實現,對於比較小的延時,用兩個DFF 級聯就可以。
4、用fifo 或ram 實現。
5、通過移位寄存器實現,延遲的時間和移位寄存器的位數有關。
6、使用負時鐘驅動DFF來獲得半個時鐘周期的延時。
7、使用合適的buffer甚至用幾個buffer的串聯。
8、VHDL Component Declaration:
COMPONENT LCELL
PORT (a_in : IN STD_LOGIC;
a_out: OUT STD_LOGIC);
END COMPONENT;
9、在寄存器賦值時加一點延時對模擬有好處,可以完全消除競爭現象。
比如這樣的邏輯:
always @(posedge clk)
abc_r <= #`HOLD_DELAY abc_nxt;
是有利於模擬的。
編輯註:對這點持保留態度。
10、在綜合時將忽略所有的延時語句。

Westor:
    非同步電路產生延時的一般方法是插入一個Buffer、兩級非門等,這種延時調整手段是不適用於同步時序設計思想的。首先要明確一點HDL語言中的延時控制語法,例如: #5 a<=4'b0101;其中的延時5個時間單位,是行為級代碼描述,常用於模擬測試激勵,但是在電路綜合是會被忽略,並不能啟動延時作用。同步時序電路的延時一般是通過時序控制完成的。換句話說,同步時序電路的延時被當作一個電路邏輯來設計。對於比較大的和特殊定時要求的延時,一般用高速時鐘產生一個計數器,根據計數器的計數,控制延時;對於比較小的延時,可以用D觸發器打一下,這種做法不僅僅使信號延時了一個時鐘周期,而且完成了信號與時鐘的初次同步,在輸入信號採樣和增加時序約束余量中使用。

Cherrydu:
    如果要實現一個“可綜合”的信號延時(若干個時鐘周期),比如給信號reset 讓其下降沿延時若干周期,以用什麼方法實現呢?我是用Verilog 來編這個程序的,我曾經試過在reset 上升沿到來時,用數時鐘數目的方法實現延時,可是在Verilog 下,非同步方法無法實現這個功能,同步的方法,if 語句不能嵌套兩個沿的情況.

Rush:
    不用嵌套兩個沿,觸發條件只有CLK 即可,然後在下面檢測RESET 信號,等他下降沿也就是由1 變為0 時(IF RESET=0)開始轉入另外一個狀態,然後在新狀態中計數。

Darkage:
    altera 的一個lcell 的延時並不是固定的,而是要看你將lcell 的位置放在那裡,兩個lcell 的距離越遠,延時就越大,不同的類型晶元,不同的級別,不同的溫度都是不一樣的,這些是要考慮到的。兩個lcell 的延時可以從1 個多的ns 都10 多個ns 都可以做到的,要是對於環境條件要求不是很嚴格的時候,可以考慮這種方法,否則就要考慮其他的方案,或者做一些折中了。

丁丁:
    用Xilinx 器件中的LUT 實現SRL16 的功能,也就是1 個查找表實現16 級時延,替代16 個寄存器,可以大大節省資源。


[admin via 研發互助社區 ] FPGA實現信號延時的方法已經有6827次圍觀

http://cocdig.com/docs/show-post-43037.html