一、概述
? ? ? ? 在應(yīng)用了時(shí)鐘約束后,所有寄存器到寄存器的路徑都能定時(shí)。為了獲得更加精準(zhǔn)的FPGA外部時(shí)序信息,設(shè)計(jì)者需要為FPGA的I/O接口指定時(shí)序信息,一般時(shí)序工具只能獲取FPGA器件內(nèi)部的時(shí)序信息,對(duì)于FPGA器件引腳之外的時(shí)序信息,必須由設(shè)計(jì)者約束定義。如果沒有指定的輸入輸出的,時(shí)序分析工具會(huì)假設(shè)在接口上使用最優(yōu)時(shí)序要求并假設(shè)電路單元的組合邏輯本身具有整個(gè)周期,電路單元外部沒有信號(hào)。
二、輸入有效
2.0 輸入有效? ??
????????我們需要為每個(gè)輸入端口指定輸入有效時(shí)間,考慮如下的一個(gè)電路圖:
? ? ? ? 對(duì)于電路單元B1,我們需要知道信號(hào)到達(dá)I1的時(shí)間。
? ? ? ? 這個(gè)到達(dá)時(shí)間可以告訴實(shí)現(xiàn)工具在組合邏輯云C1(輸入端口和第一個(gè)寄存器元器件之間)中花費(fèi)的時(shí)間,反過來,到達(dá)時(shí)間也決定了要求優(yōu)化的等級(jí)。如果信號(hào)沒有按時(shí)達(dá)到F1(通過組合邏輯后的第一個(gè)寄存器)并被及時(shí)鎖定,那么它將允許STA工具發(fā)送報(bào)告。思考如下圖電路的情況:
? ? ? ? 對(duì)于電路單元B2,需要指定輸入I1的輸入到達(dá)時(shí)間。當(dāng)觸發(fā)器由一個(gè)時(shí)鐘觸發(fā)時(shí),信號(hào)從F1(前一個(gè)電路單元B1的F1)開始。這個(gè)時(shí)鐘觸發(fā)就充當(dāng)了參考事件,參考事件產(chǎn)生后,信號(hào)通過線路經(jīng)過觸發(fā)器(Clk_to_Q延遲)、組合邏輯C1(在前一個(gè)電路單元B1中)、組合邏輯C2(在頂層中)和互連延遲。但是,如果考慮了I1的信號(hào)到達(dá)時(shí)間,那么延遲在C1、C2、Clk_to_Q、互連線等之間如何分配就不那么重要了。我們只需要知道參考事件在發(fā)生后經(jīng)過多久到達(dá)現(xiàn)在的輸入端口。
2.1 最小和最大有效時(shí)間
? ? ? ? 這個(gè)話題在之前的文章中已經(jīng)多次提到過了,這里再簡(jiǎn)單說明一下,在輸入端口,設(shè)計(jì)者需要指定信號(hào)可以改變的最早時(shí)間、這也就是最小時(shí)間,在這個(gè)時(shí)間之前,輸入信號(hào)不能到達(dá)輸入輸入端口。由此可以確定,輸入端口的上一個(gè)值要保持到這個(gè)時(shí)間。最小時(shí)間可以保證輸入信號(hào)不違反后級(jí)電路的保持時(shí)間要求。
? ? ? ? 設(shè)計(jì)者還需要指定最大時(shí)間,在這個(gè)時(shí)間內(nèi),要確保輸入端口上的輸入信號(hào)有效。這個(gè)時(shí)間也是最遲時(shí)間,在這個(gè)時(shí)間內(nèi),輸入端口上信號(hào)的所有變化都是有效的。最大時(shí)間用于確保滿足后級(jí)電路的建立要求。
2.2 多時(shí)鐘
? ? ? ? 有的時(shí)候,一個(gè)輸入信號(hào)可能由多個(gè)時(shí)鐘觸發(fā),如下圖所示:
? ? ? ? 到達(dá)I1的信號(hào)可能從Clk1(電路單元B)處產(chǎn)生,也可能從Clk2(電路單元B2)處產(chǎn)生。兩個(gè)觸發(fā)事件可能相互獨(dú)立。在這種情況下,到達(dá)事件會(huì)根據(jù)兩個(gè)參考事件來指定。實(shí)現(xiàn)工具和STA工具會(huì)考慮每個(gè)到達(dá)時(shí)間,并同時(shí)滿足在兩個(gè)條件。
三、輸出要求
3.0 輸出要求
????????對(duì)于每個(gè)輸出端口,都需要指定信號(hào)被采樣前,在電路單元外部經(jīng)過的時(shí)間。電路如下圖所示:
????????對(duì)于電路單元B1來說,我們需要知道產(chǎn)生輸出O1后,在采樣前信號(hào)需要的傳輸時(shí)間。
? ? ? ? 實(shí)現(xiàn)工具可以通過這個(gè)時(shí)間計(jì)算出應(yīng)該在邏輯云C1(最后一個(gè)寄存器元件F1和輸出端口O1之間)放置多少邏輯。STA工具也可以通過這個(gè)時(shí)間報(bào)告在某個(gè)時(shí)間O1上信號(hào)是否有效,這樣在產(chǎn)生輸出O1后,就有足夠的時(shí)間經(jīng)過電路單元的外部,如下圖所示:
? ? ? ? 對(duì)于電路單元B1,需要為輸出O1指定輸出要求時(shí)間(output required time)。O1輸出后,信后由電路單元B2中的觸發(fā)器F2采樣。觸發(fā)器F2的時(shí)鐘起到了參考事件的作用。在參考事件到達(dá)F2之前,信號(hào)經(jīng)過組合邏輯C2(在頂層中)、組合邏輯C3(在下一個(gè)電路單元中)存在延遲和互連延遲。信號(hào)需要在參考事件之前到達(dá)F2,這樣觸發(fā)器才能滿足建立要求。但是,只要考慮了在O1處的信號(hào)輸出要求時(shí)間,那么延遲在C2、C3、F2的建立時(shí)間和互連線之間是如何分配的就不重要了。我們只需要知道參考時(shí)間之前在輸出端口處信號(hào)有效需要多長(zhǎng)時(shí)間。在O1外的時(shí)間越多意味著邏輯云C1(寄存器與輸出端口之間)的延遲越小。
? ? ? ? 輸出要求時(shí)間是根據(jù)信號(hào)采樣之前,在電路單元外需要的時(shí)間來確定的,而不是根據(jù)輸出端信號(hào)有效時(shí)間來確定的。輸出要求時(shí)間可以通過計(jì)算得出。例如,如果輸出延遲為6ns,這意味著信號(hào)輸出后需要6ns。如果一個(gè)時(shí)鐘觸發(fā)器在10ns時(shí)對(duì)信號(hào)進(jìn)行采樣,那么意味著信號(hào)需要在4ns時(shí)有效。在SDC中,用戶指定6,即輸出后需要的時(shí)間時(shí)6ns。信號(hào)應(yīng)該什么時(shí)間有效可以通過計(jì)算獲得。這就是輸入延遲和輸出延遲在概念上的不同。在輸入端,指定的輸入延遲直接給定了輸入有效時(shí)間。在輸出端,指定的輸出延遲是信號(hào)進(jìn)一步傳輸需要的時(shí)間。輸出延遲不同于輸出信號(hào)的有效時(shí)間。
3.1 最小和最大要求時(shí)間
? ? ? ? 有時(shí)候,在輸出端不太能指定信號(hào)在輸出后需要傳輸?shù)木_時(shí)間,例如,從輸出端到相同參考事件可能有多條路徑時(shí)。但是,我們還是要求設(shè)計(jì)者盡可能給出信號(hào)輸出后需要傳輸?shù)淖钚r(shí)間和輸出信號(hào)從輸出出來后需要傳輸?shù)淖畲髸r(shí)間。
3.2 多個(gè)參考事件
? ? ? ? 有時(shí)候,輸出信號(hào)可以被多個(gè)參考事件捕獲,電路圖如下所示:
? ? ? ? 從O1出來的信號(hào)可以被Clk1捕獲,也可以被Clk2捕獲。這兩個(gè)捕獲事件可以是獨(dú)立的。在這種情況下,要求時(shí)間根據(jù)兩個(gè)參考事件來指定。這是實(shí)現(xiàn)工具和STA工具的功能,它們獨(dú)立計(jì)算每個(gè)要求時(shí)間并滿足每個(gè)要求。
四、set_input_delay?
? ? ? ? 在輸入端口指定延遲的SDC命令是set_input_delay。命令的BNF如下:
set_input_dalay [-clock clock_name]
[-clock_fall]
[-level_sensitive]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
[-network_latency_included]
[-source_latency_included]
delay_value port_pin_list
?4.1 時(shí)鐘規(guī)格
? ? ? ? -clock 選項(xiàng)用于指定參考時(shí)鐘,根據(jù)參考時(shí)鐘指定延遲時(shí)間,這個(gè)選項(xiàng)通常指的是觸發(fā)器輸入端信號(hào)的時(shí)鐘名稱。
? ? ? ? 假設(shè)電路單元B1的輸入I1由觸發(fā)器F1驅(qū)動(dòng),它也可以在其他電路單元中,還可以是頂層邏輯的一部分。假設(shè)觸發(fā)F1的時(shí)鐘還可以進(jìn)入電路單元B1,B1的時(shí)鐘名稱是Clk1。在這種情況下,clock_name的規(guī)格應(yīng)該指定為Clk1。這個(gè)時(shí)鐘觸發(fā)輸入的到達(dá)時(shí)間,同時(shí)這個(gè)時(shí)鐘也是參考事件。當(dāng)驅(qū)動(dòng)F1時(shí),時(shí)鐘信號(hào)的名稱相同也沒有關(guān)系。例如,可以把包含F(xiàn)1的時(shí)鐘信號(hào)命名為CLK_1,但是,對(duì)于B1的輸入延遲,時(shí)鐘的名稱還需指定以便對(duì)B1可見。
?????????有時(shí)候,觸發(fā)F1的時(shí)鐘信號(hào)可能不會(huì)進(jìn)入電路單元B1,在這種情況下,需要為B1聲明虛擬時(shí)鐘。這種虛擬時(shí)鐘的特性必須與觸發(fā)F1的時(shí)鐘相同,這時(shí),虛擬時(shí)鐘能夠使用帶-clock選項(xiàng)的clock_name來指定。
? ? ? ? 默認(rèn)情況下,輸入延遲是基于時(shí)鐘上升沿來指定的,但是,如果觸發(fā)器F1由時(shí)鐘下降沿觸發(fā),那么需要添加選項(xiàng)-clock_fall,這個(gè)選項(xiàng)可以使得參考事件是clock_name的下降沿而不是上升沿。
? ? ? ? 如果時(shí)鐘周期是10ns,具有{0 5}波形,觸發(fā)器F1是由時(shí)鐘下降沿觸發(fā)的,那么可以指定時(shí)鐘下降沿的延遲是2,或者指定時(shí)鐘上升沿的延遲是7。關(guān)于時(shí)序分析,下面命令具有相同的作用。
set_input_delay -clock CLK1 -clock_fall 2.0 [get_ports I1]
set_input_delay -clock CLK1 7.0 [get_ports I1]
? ? ? ? 但是,如果啟動(dòng)觸發(fā)器F1是由時(shí)鐘下降沿觸發(fā)的,那么我們應(yīng)該使用第一個(gè)命令,因?yàn)樗梢院芎玫胤从畴娐返脑O(shè)計(jì)。
? ? ? ? 如果輸入引腳是組合電路唯一路徑的一部分,那么就沒有時(shí)鐘觸發(fā)到達(dá)輸入引腳上的信號(hào)。這種情況下,就不需要指定-clock。對(duì)于set_input_delay命令,參考事件是時(shí)間0。如果沒有指定-clock,那么-clock_fall也就沒有意義。因?yàn)楝F(xiàn)在許多設(shè)計(jì)都是同步的,通常會(huì)用set_input_dalay指定時(shí)鐘,組合路徑(即使存在)也可以使用其他約束方式來約束。
4.2 -level_sensitive
? ? ? ? 如果啟動(dòng)元器件不是一個(gè)觸發(fā)器而是一個(gè)鎖存器,那么就應(yīng)該指定這個(gè)開關(guān)。從概念上講,使用這個(gè)開關(guān)后啟動(dòng)鎖存器可以借用這個(gè)周期里的時(shí)間。這意味著建立裕度(setup slack)會(huì)減少——這考慮了當(dāng)鎖存器為透明信號(hào)從鎖存器開始的情況。
? ? ? ? 但是,這個(gè)選項(xiàng)應(yīng)該謹(jǐn)慎使用。不同工具對(duì)這個(gè)選項(xiàng)的處理方式不同,一些工具和轉(zhuǎn)換器會(huì)簡(jiǎn)單地忽略這個(gè)選項(xiàng)。如果設(shè)計(jì)者想使用這個(gè)選項(xiàng),那么應(yīng)該保證在整個(gè)過程中使用所有工具處理這個(gè)選項(xiàng)時(shí)都使用同一種方法。
4.3 rise/fall 限定符
? ? ? ? -rise 用于限定輸入延遲與輸入端口信號(hào)的上升沿對(duì)應(yīng)。-fall用于限定輸入延遲與輸入端口的下降沿對(duì)應(yīng)。如果在輸入端口信號(hào)上升或下降時(shí)的輸入到達(dá)時(shí)間不同,那么這個(gè)命令需要提供rise或者fall限定符。
? ? ? ? 當(dāng)不指定限定符 rise 或者 fall 時(shí),給定值適用于這兩種過渡。在CMOS電路中,上升和下降過渡時(shí)的路徑延遲非常相似,所以不會(huì)經(jīng)常使用 -rise/fall 規(guī)格。
4.4 min/max限定符
? ? ? ? -min 用于限定指定的延遲值與輸入端口信號(hào)的最早到達(dá)時(shí)間到達(dá)對(duì)應(yīng)。這個(gè)值用在當(dāng)前設(shè)計(jì)內(nèi)部以保持檢查。-max 用于限定指定的延遲值與輸入端口信號(hào)的最遲到達(dá)時(shí)間對(duì)應(yīng)。這個(gè)值用于在當(dāng)前設(shè)計(jì)內(nèi)部以實(shí)現(xiàn)建立檢查。
? ? ? ? 當(dāng)不使用-min/max限定符時(shí),兩個(gè)限定符使用相同的設(shè)定值。通常不使用-min/-max 限定符,其值與指定的最大延遲相同。
? ? ? ? 目前隨著納米技術(shù)的發(fā)展,單個(gè)觸發(fā)器的保持值大幅下降,在某種程度上可以說降低了很多。很顯然,因?yàn)樵跀?shù)據(jù)路徑上的延遲有限,所以會(huì)出現(xiàn)輸入到達(dá)時(shí)間為正,保持時(shí)間為負(fù)的情況,即使保持值不是負(fù)值,也會(huì)與“零”非常接近,因此,在大部分情況下,通過啟動(dòng)元器件的延遲(啟動(dòng)觸發(fā)器的Clk_to_q延遲)和互連延遲將比保持時(shí)間長(zhǎng),因此,大部分情況下外部到達(dá)信號(hào)都能滿足保持要求。通常,使用最大值可以可靠完成建立檢查。這個(gè)值也用于保持檢查,無論如何必須滿足保持檢查。如果信號(hào)將輸入到一個(gè)保持要求很大元器件中,那么保持檢查就很重要,如內(nèi)存。這種情況下,也應(yīng)該正確指定-min值。
4.5 -add_delay
? ? ? ? 許多時(shí)序分析工具都為用戶提供了交互shell,用戶使用這些shell可以修改上述指定值。當(dāng)指定端口的輸入延遲時(shí),在這個(gè)端口上最新的規(guī)格就會(huì)覆蓋前面的規(guī)格。如果用戶必須在同一個(gè)端口指定多個(gè)參考事件的輸入延遲,那么所有后續(xù)規(guī)格就需要指定-add_delay。
4.6 時(shí)鐘延遲
? ? ? ? 我們知道,在觸發(fā)觸發(fā)器之前,時(shí)鐘在路徑上會(huì)有延遲(時(shí)鐘源延遲和網(wǎng)絡(luò)延遲),我們可以通過開關(guān)-source_latency_included 和 -network_latency_included 來進(jìn)行約束。
4.7 完成輸入延遲約束
? ? ? ? 要完成輸入約束,現(xiàn)在就剩下唯一的工作就是需要指定輸入延遲的實(shí)際端口或引腳,并且指定延遲值,這是set_input_delay 命令必須指定的兩個(gè)選項(xiàng)。
五、set_output_delay
? ? ? ? 用于指定輸出端口延遲的SDC命令是set_output_delay。命令的BNF是如下:
set_output_dalay [-clock clock_name]
[-clock_fall]
[-level_sensitive]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
[-network_latency_included]
[-source_latency_included]
delay_value port_pin_list
? ? ? ? 從概念上講,set_output_delay和set_input_delay兩個(gè)命令非常相似,所以這里不會(huì)像之前那樣一一展開,僅對(duì)兩個(gè)命令不同的部分詳細(xì)說明。
? ? ? ? set_input_delay 和 set_output_delay 的根本區(qū)別在于:輸入延遲是指到達(dá)輸入端的時(shí)間,即在輸入端信號(hào)有效的時(shí)間。另一方面,輸出延遲是信號(hào)輸出后還要傳輸?shù)臅r(shí)間,這個(gè)時(shí)間與在輸出端信號(hào)需要有效的時(shí)間不同。但是,從語義上講,兩個(gè)命令非常相似,它們都指定了在感興趣的電路單元外的延遲要求。就像外部延遲需要滿足要求一樣,電路單元內(nèi)部也有自己的時(shí)序要求。文章來源:http://www.zghlxwxcb.cn/news/detail-751467.html
六、小結(jié)
? ? ? ? set_input_delay 和 set_output_delay 需要正確設(shè)定,這樣,電路單元的信號(hào)就可以保證時(shí)序正確了。如果設(shè)定不正確,那么單個(gè)電路單元可能就能夠滿足自己的時(shí)序,而當(dāng)集成整個(gè)設(shè)計(jì)時(shí),最終的設(shè)計(jì)可能不會(huì)滿足時(shí)序。文章來源地址http://www.zghlxwxcb.cn/news/detail-751467.html
到了這里,關(guān)于FPGA時(shí)序分析與約束(13)——I/O接口約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!