? ? ? ?在對(duì)Verilog代碼進(jìn)行靜態(tài)時(shí)序分析的時(shí)候,建立時(shí)間和保持時(shí)間是需要我們重點(diǎn)關(guān)注的指標(biāo)。
1.建立時(shí)間和保持時(shí)間的是什么?
建立時(shí)間(Setup Time):指采樣時(shí)鐘邊沿到來之前,數(shù)據(jù)需要保持穩(wěn)定的時(shí)間。如果數(shù)據(jù)在采樣時(shí)鐘的邊沿到來之前的建立時(shí)間內(nèi)這段時(shí)間變化,可能會(huì)造成時(shí)鐘采樣的數(shù)據(jù)在0和1之間跳變,使得寄存器進(jìn)入亞穩(wěn)態(tài)(亞穩(wěn)態(tài):可以理解為不穩(wěn)定的狀態(tài))。
保持時(shí)間(Hold Time):指采樣時(shí)鐘邊沿到來之后,數(shù)據(jù)需要保持穩(wěn)定的時(shí)間。如果數(shù)據(jù)在采樣時(shí)鐘的邊沿到來之后的建立時(shí)間內(nèi)這段時(shí)間變化,可能會(huì)造成寄存器進(jìn)入亞穩(wěn)態(tài),寄存器內(nèi)的數(shù)據(jù)采樣數(shù)據(jù)可能無法正確存儲(chǔ)。
? ? ? ? 建立時(shí)間和保持時(shí)間,總的來說就是,采樣時(shí)鐘跳變沿到來的前一段時(shí)間和后一段時(shí)間,被采樣數(shù)據(jù)都不能變化,要保持穩(wěn)定,如果在采樣時(shí)鐘跳變沿來之前的一小段時(shí)間內(nèi)變化,則可能無法正確對(duì)數(shù)據(jù)進(jìn)行采樣,如果在采樣時(shí)鐘跳變沿來之后的一小段時(shí)間內(nèi)變化,則可能出現(xiàn)采樣了之后但數(shù)據(jù)沒有正確地保存在寄存器里面。
? ? ? ?下面,舉一個(gè)例子來說明時(shí)鐘和建立時(shí)間以及保持時(shí)間的關(guān)系。想象一下你(數(shù)據(jù))坐公交(時(shí)鐘)從你家到學(xué)校,公交車每隔10分鐘來一趟(相當(dāng)于某一時(shí)鐘頻率)。假設(shè)公交車每天的8:00am會(huì)到你家附近的公交站(時(shí)鐘的采樣沿),如果你8點(diǎn)踩點(diǎn)去公交站,那你有可能會(huì)錯(cuò)過那一趟公交車(數(shù)據(jù)在時(shí)鐘跳變沿來之前還沒穩(wěn)定),因?yàn)楣卉嚳赡軙?huì)來早點(diǎn)或者來晚一點(diǎn)。那么,怎么能確保你一定坐上8:00am那一趟公交車呢?答案很明顯,就是提前幾分鐘過去公交站等(這個(gè)等待的時(shí)間就是建立時(shí)間)。而你上車之后,可能要坐10分鐘的車,3個(gè)站,但是時(shí)間還沒到,你就提前一個(gè)站下車,那你就無法準(zhǔn)時(shí)到達(dá)學(xué)校(不考慮你下車后叫司機(jī)來接你的情況)。也就是說,你必須要在車上待足夠長(zhǎng)的時(shí)間(這個(gè)等待的時(shí)間就是保持時(shí)間),否則,公交車無法將你送到學(xué)校(寄存器數(shù)據(jù)可能無法正確保存)。
2.建立時(shí)間和保持時(shí)間的作用是什么?
? ? ? ?在對(duì)Verilog代碼進(jìn)行靜態(tài)時(shí)序分析的時(shí)候,建立時(shí)間和保持時(shí)間是需要我們重點(diǎn)關(guān)注的指標(biāo)。它們關(guān)系到代碼能否正常地在FPGA中的運(yùn)行。Verilog代碼使用Vivado,Quartus等開發(fā)套件編譯完成后,都可以看到靜態(tài)時(shí)序分析報(bào)告。在時(shí)序分析報(bào)告中,通常出現(xiàn)的是setup time slack(建立時(shí)間裕量)和hold time slack(保持時(shí)間裕量),即建立時(shí)間和保持時(shí)間還有多少余量,如果setup time slack為正值,則表示建立時(shí)間裕量還有空余,意味著該路徑可以運(yùn)行在更高的時(shí)鐘頻率下;而setup time slack為負(fù)值時(shí),則表示建立時(shí)間不滿足要求,意味著該路徑無法在該時(shí)鐘頻率下穩(wěn)定運(yùn)行,需要做時(shí)序優(yōu)化。至于hold time slack,一般都不用管,幾乎遇不到會(huì)出現(xiàn)保持時(shí)間違例的情況。(本人對(duì)保持時(shí)間違例的情況了解甚少,需要學(xué)習(xí))
? ? ? ?上圖是一個(gè) 經(jīng)典的時(shí)序分析圖,展示的是一個(gè)寄存器到寄存器的路徑。一般來說,絕大部分的靜態(tài)時(shí)序分析都是在分析寄存器到寄存器之間的路徑。接下來用一段簡(jiǎn)短的代碼來輔助說明一下。
//========= code 1 ========
reg in ;
reg out;
always@(posedge clk or negedge rst_n)
if(!rst_n)
out <= 1'd0;
else
out <= ~in;
//========= code 2 ========
reg [ 7: 0] in ;
reg [17: 0] out;
always@(posedge clk or negedge rst_n)
if(!rst_n)
out <= 1'd0;
else
out <= (~in + 1'b1) * (~in + 1'b1);
以上兩段代碼,都是從寄存器到寄存器的路徑,唯一的區(qū)別就是,從in到out的計(jì)算不一樣,第一段只是將in取反就送給out了,而第二段既做了取反,還做了加法和乘法,計(jì)算相對(duì)第一段明顯復(fù)雜了。這個(gè)時(shí)候,我們思考這樣一個(gè)問題:上面這兩段代碼中的時(shí)鐘clk到底支持多高的頻率?100MHz,200MHz還是300MHz?
計(jì)算最大工作頻率的公式如上,其中,Tco為發(fā)端寄存器從時(shí)鐘到達(dá)直至數(shù)據(jù)到達(dá)Q端的時(shí)間,Tlogic為組合邏輯延遲,Tnet為兩級(jí)寄存器之間的布線延遲,Tsetup為收端寄存器建立時(shí)間,Tskew兩級(jí)寄存器的時(shí)間skew,其值等于時(shí)鐘同一邊沿到達(dá)兩個(gè)寄存器時(shí)鐘端口的時(shí)間差。在FPGA中,對(duì)于同步設(shè)計(jì),Tskew可以忽略,Tco和Tsetup取決于芯片工藝,通常越先進(jìn)的工藝,Tco和Tsetup越小。因此,一旦芯片型號(hào)選定只能通過Tlogic和Tnet來改善最大頻率。對(duì)于FPGA來說,由于布局布線的過程一般都是自動(dòng)完成的(除非你加了額外的約束),Tnet也不是我們能決定的因素。
? ? ? ?因此,上面的代碼支持的最大頻率主要由Tlogic決定,亦即如果想代碼運(yùn)行得快一點(diǎn),那就得縮短Tlogic,這個(gè)關(guān)系到時(shí)序優(yōu)化的方法,內(nèi)容很多,以后我有時(shí)間會(huì)再寫一篇關(guān)于時(shí)序優(yōu)化的文章,和大家一起學(xué)習(xí)一下。文章來源:http://www.zghlxwxcb.cn/news/detail-794642.html
? ? ? ?總結(jié)一下,建立時(shí)間和保持時(shí)間,是靜態(tài)時(shí)序分析中的重要一環(huán),通常以建立時(shí)間裕量和保持時(shí)間裕量的形式出現(xiàn),來評(píng)價(jià)Verilog設(shè)計(jì)的電路是否符合要求。而靜態(tài)時(shí)序分析,又是評(píng)價(jià)Verilog代碼能否在硬件載體中穩(wěn)定運(yùn)行得一個(gè)重要手段,是上板調(diào)試前的必要步驟,因此初學(xué)者應(yīng)該充分理解其含義,為后續(xù)的深入學(xué)習(xí)打下基礎(chǔ)。以上內(nèi)容僅為個(gè)人的學(xué)習(xí)分享,如果錯(cuò)誤,還望指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-794642.html
到了這里,關(guān)于一文弄懂Verilog靜態(tài)時(shí)序分析中的建立時(shí)間和保持時(shí)間的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!