當前位置:首頁 » 編程軟體 » FPGA編譯中約束的作用

FPGA編譯中約束的作用

發布時間: 2023-04-26 02:14:38

① 高雲fpga中需要約束鎖相環輸出時鍾嗎

需要。在使用高雲FPGA設計時,螞帶拍如果需要約束鎖相環輸出時鍾(PLL輸出時鍾),建議進行時鍾約束。因為時鍾約悶羨束可以幫助FPGA實現正確的時序分析和布局布線,從而提高電路的性能行瞎和穩定性。

② fpga管腳約束是怎麼一回事

管腳約束通常在設計早期就要瞎巧確定下來,以保證電路板的設計同步進行磨脊鍵
n對高速設計、復雜設計和具有大量I/野衫O管腳的設
計,Xilinx推薦手工進行管腳約束
p實現工具可以自動布局邏輯和管腳,但是一般來說
不會是最優的
p管腳約束可以指導內部數據流向,不合理的管腳布
局很容易降低系統性能
p合理的管腳布局需要對所設計系統和Xilinx器件結構的詳細
了解,如要考慮I/O bank、I/O電氣標准等
p時鍾(單端或差分)必須約束在專用時鍾管腳
注意:時鍾資源數量的限制
p最後使用al-purpose管腳(如配置和DCI管腳)

③ FPGA時序約束

https://my.oschina.net/u/4583591/blog/4455472

時序分析本質上就是一種時序檢查,目的是檢查設計中所有的D觸發器是否能夠正常工作,也就是檢查D觸發器的同步埠(數據輸入埠)的變化是否滿足建立時間要求(Setup)和保持時間要求(Hold);檢查D觸發器的非同步埠(非同步復位埠)的變化是否滿足恢復時間要求(Recovery)和移除時間要求(Removal)。

時序分析包括靜態時序分析(STA)和動態時序分析。

靜態時序分析使用的工具:

動態時序分析使用的工具:

撰寫基本的時序約束文件,告知時序引擎一些必要的信息(比如時鍾,輸入輸出延時等)。若沒有正確的時序約束,那麼時序分析的結果是沒有意義的。

第一種,從FPGA的輸入埠到目的寄存器的數據輸入埠 。

第二種,從源寄存器的時鍾埠到目的寄存器的數據輸入埠。

第三種,從源寄存器的時鍾埠到FPGA的輸出埠。

第四種,從FPGA的輸入埠到FPGA的輸出埠。

Data Arrival time = lauch_edge + Tclka + Tco + Tdata(Tlogic+Tnet)

Data Require Time = capture edge + Tclkb - Tsu

Setup Slack= Data Require Time - Data Arrival Time

Setup Slack = (Capture edge – Launch edge)+ (destination clk delay – source clk delay)- Setup time - clk uncertainty – datapath delay

Setup Slack = Setup Requirement(一定大於0) + clk skew – Tsu – Tclk uncertainty – Tlogic – Tnet - Tco

① Setup Requirement 與實際情況不符

建立時間需求過小,這種情況通常會在同步跨時鍾域路徑中出現,在同步跨時鍾域路徑中的源時鍾頻率與目的時鍾頻率的相位關系雖然是已知的,但是時序引擎默認選擇的捕獲沿通常都是錯誤的,需要用戶通過多周期路徑約束的方式手動修正建立時間需求。比如下圖中,兩個同頻不同相的同步時鍾,時序引擎默認選擇的捕獲沿是目的時鍾第二個上升沿,導致建立時間需求非常小,最終肯定會導致時序違例。

② clk skew為負值,且很大

通常情況下,同一個時鍾下的時鍾歪斜不應該超過300ps,同步跨時鍾域路徑的時鍾歪斜不應該超過500ps,非同步跨時鍾域路徑的時鍾歪斜一般比較大,因為它們的時鍾源不同。當出現時鍾歪斜大的情況時:

③Tsu/Tco大

當設計中使用Block(DSP/Block RAM等)時,應該要注意以下問題。對於以這些Block為時序路徑的起點或終點的時序路徑,這些Block的Tsu/Th/Tco都比普通的寄存器大,而且這些Block的布線延時和時鍾歪斜比較大。所以當使用這些Block作為時序路徑的終點時,它的起點一定要是觸發器,比如說一個Block RAM的寫數據信號,輸入進Block前最好打一拍。當使用這些Block作為時序路徑的起點時,應該使用Block 內部的輸出寄存器,比如使用由Block RAM組成的FIFO時,盡量不要使用首字置出的,而使用打一拍後輸出的,使用後者可以顯著降低Tco。當時序路徑為從一個Block到另一個Block時,中間需要進行打拍操作。當使用這些Block的控制埠時,應該保證這些控制信號的低扇出,如使用由Block RAM組成的FIFO時,應該盡量降低讀/寫能信/地址信號的扇出。

④Tlogic大

一般情況下,邏輯延時與時序路徑的邏輯層級數息息相關,邏輯層級是指時序路徑的起點和終點之間組合邏輯單元(LUT)的個數,而邏輯層級多一級意味著多1個LUT的延時加1條連接LUT的網線延時。通常一級邏輯層級的延時標準是1個LUT加1根網線的總延遲為0.5ns,如果某條路徑的邏輯級數大於時鍾周期/0.5ns,那麼這條路徑就被稱為長路徑。

常用的處理長路徑的方案有兩種:

⑤Tnet大

一般情況下,布線延遲與設計整體或局部模塊的資源利用率以及擁塞程度息息相關。在正常情況下,一條網線的延時小於1ns,在發生擁塞的區域,網線的延時可能達到若干ns,導致布線延時顯著增加。為了解決布線延遲大,需要從降低資源利用率和降低擁塞程度下手,比如某個模塊使用了大量的寄存器堆,佔用了大量的資源,此時應該考慮使用Block RAM代替這些寄存器堆;某個模塊使用了大量的數據選擇器,此時應該考慮如何優化這些數據選擇器;某個模塊的控制信號扇出比較大,與其他模塊的互聯很重,此時應該考慮如何降低這些信號的扇出;某條時序路徑的起點或終點是Block,由於Block的位置比較固定,所以Block的布線延遲會大一些。最後需要強調的是,一定要額外關注高扇出的網線也會對布線延時產生影響。🔺TimeQuest時序分析(Setup)[圖片上傳失敗...(image-23b6a0-1596829289696)]

①確定保持時間要求(確定發起時鍾沿和捕獲時鍾沿)

保持時間要求是以建立時間要求為基礎的,保持時間要求有兩種:

根據所有的建立時間需求找到所有的保持時間需求,並從保持時間需求(可正可負)中找到最大的保持時間需求。

②計算數據的需求時間

③計算數據的到達時間

④計算Hold up的裕量(slack)

Data Arrival time(new data) = lauch edge + Tclka + Tco + Tdata(Tlogic+Tnet)

Data Require time = capture edge + Tclkb + Th

Hold up slack = Data Arrival time - Data Require time

Holp Slack = (lauch edge - capture edge) + (Tclka – Tclkb) + Tco + Tdata(Tlogic+Tnet) -Th

Holp Slack = Tco + Tdata(Tlogic+Tnet) -Th - Holp Requirement - clk skew

Hold up Slack為負的情況比較少見,當Setup Slack有較大裕量時,通常工具會自動插入延時來增加Hold up Slack。

①保持時間需求大於0(通常由時序引擎選擇錯誤的捕獲沿導致)

②時鍾歪斜大於300ps(通常由時鍾路徑上的組合邏輯導致)

③Th過大(通常由時序路徑終點為Block導致)

時序引擎能夠正確分析4種時序路徑的前提是,用戶已經進行了正確的時序約束。時序約束本質上就是告知時序引擎一些進行時序分析所必要的信息,這些信息只能由用戶主動告知,時序引擎對有些信息可以自動推斷,但是推斷得到的信息不一定正確。

首先用戶必須要正確的約束時鍾,時序引擎才能根據時鍾信息進行各種時序檢查。

用戶約束時鍾時,一般有兩種類型的時鍾需要約束。

①主時鍾(Primary Clock)約束

使用Create_clock進行時序約束

全局時鍾輸入引腳是ClkIn,時鍾周期10ns,占空比25%,相移90度。

②生成時鍾(Generated Clock)約束

用Create_generated_clock進行時序約束 每個生成時鍾都會對應一個時鍾源(Master_clk),這個時鍾源可以是Primary Clock或者另一個Generated Clock。在約束生成時鍾時,用戶不需要描述生成時鍾的周期和波形,只需要描述由Master_clk經過了怎樣的變化而產生的生成時鍾即可。比如經過分頻(-devide_by),倍頻(-multiply_by),反相(-invert),相移(-edge_shift)等等操作。

當生成時鍾需要進行相移時,使用-edge_shift選項。-edge_shift不能與-divide_by/-multipl_by/-invert同時使用 。

時序引擎默認情況下會分析所有時鍾之間的時序路徑,用戶可以通過時鍾分組( set_clock_group)命令或偽路徑(set_false_path)命來關閉一部分路徑的時序分析。

①同步時鍾(synchronous clock)

兩個時鍾之間的相對相位關系是固定的(兩個時鍾來源於同一個Primary clock),並且這兩個時鍾的頻率的最小公共周期是個整數。比如一個生成時鍾(200M)和該生成時鍾的Master_clk(100M)之間就屬於同步時鍾關系,因為這兩個時鍾的相位關系肯定是確定的,並且可以找到兩個時鍾的最小公共周期。通常情況下,一個Primary Clock和它產生的生成時鍾之間都屬於同步時鍾關系,除非找不到最小公共周期。 **屬於同步時鍾關系的兩個時鍾之間的路徑是可以進行時序分析的。

②非同步時鍾( asynchronous clock )

兩個時鍾之間的相對相位關系不確定。比如FPGA上兩個晶振分別產生兩個Primary clock(相對相位關系不固定),這兩個Primary clock分別從FPGA的兩個全局時鍾引腳輸入給兩個MMCM,由兩個MMCM分別產生的生成時鍾之間屬於非同步時鍾。一般情況下,不同的Primary clock之間都屬於非同步時鍾,這些Primary clock分別產生的生成時鍾之間也屬於非同步時鍾關系。 **屬於非同步時鍾關系的兩個時鍾之間的路徑無法進行正確的時序分析。

一般情況下,如果用戶不通過時鍾分組對時鍾之間的關系進行約束,時序引擎會默認所有的時鍾之間都屬於同步時鍾關系。

③不可擴寬的時鍾(unexpandable clock)

對於這類時鍾,時序引擎無法在1000個時鍾周期內找到兩個時鍾的公共周期,時序引擎就會從這1000個時鍾周期中找到建立時間需求最差的情況,並進行時序分析,然而它不一定FPGA實際允許過程中建立時間需求最差的情況,因為在1000個時鍾周期外可能還會有建立時間需求更差的情況,這樣一來,時序引擎的分析結果就無法保證該路徑一定不會出現問題,所以時序引擎的分析結果也就變的無意義。比如說由同一個Primary Clock驅動的兩個MMCM的生成時鍾分別是clk0(5.125ns)和clk1(6.666ns),雖然它們的相對相位關系是固定的,但是時序引擎無法保證對兩個時鍾之間路徑的分析屬於最差情況,這種情況和非同步時鍾之間的時序分析類似,時序分析的結果都看起來正常,但是這個結果確是不可信的。所以對這種時鍾的處理方式與處理非同步時鍾是相同的,用戶都需要進行跨時鍾域的操作。

總結:非同步時鍾和不可擴展的時鍾之間的路徑都無法進行正確的時序分析,所以在時序分析之前,需要使用set_clock_group對時鍾進行分組,從而將這些無法進行正確時序分析的路徑忽略掉。

Input delay概念

Input delay計算

Max Input Delay = Tco(Max) + Tpcb(Max) - Clk skew(Min)

Min Input Delay = Tco(Min) + Tpcb(Min) - Clk skew(Max)

Input delay約束

Output delay概念

Output delay計算

Max Output Delay = Tpcb(Max) + Tsu - Clk skew(Min)

Min Output Delay = Tpcb(Min) - Th - Clk skew(Max)

Output delay約束

時序引擎默認情況下會在建立時間需求/保持時間需求最差的情況下進行時序分析,而時序引擎選擇的這種需求不一定是用戶真正希望的,而且時序引擎默認選擇的這種需求是非常嚴苛的,甚至是根本無法滿足的。此時就需要用戶進行Multicycle約束,手動修改建立時間需求/保持時間需求。用戶希望放鬆某些路徑的約束力度,就可以通過Multicycle約束調整建立時間需求/保持時間需求。

使用set_multicycle_path命令進行約束

註:使用set_multicycle_path命令

①在源時鍾和目的時鍾相同的情況下進行Multicycle約束

②在源時鍾和目的時鍾頻率相同且有正向偏移的情況下(正向偏移0.3ns)

④ FPGA設計中布局布線是怎麼完成時序約束的要求的根據時序約束的要求進行合理布局和選路布線太玄了吧

字面意衫禪思理解,所謂約束,就是加上一些條,說白了就是通過時序約束對邏輯綜合器提出你的要求,然後綜合器根據要求進行布局布行談線。FPGA中的延時主要有門延時和走線延時(傳輸延時),布局布線時FPGA中的邏輯資源和布線資源分布是隨機的,從一個寄存器到另一個寄存器可以選擇的路徑有很多條,延時有長有短,因此需要告訴邏輯綜合器你設計中某條路徑允許多大的時延,從而讓綜合器選擇合適的布線來保證這或帶塵個時延。綜合器會根據約束對一些時序要求比較高的路徑進行優化,要求低的布線時可以繞一下遠路。
合理時序約束可以提高FPGA的最大工作頻率,另外,根據靜態時序分析可以看設計是否達到要求。

⑤ 對哪些信號需要進行約束 FPGA

最常用的約束有IO管腳位置約束和電平幅度約束,這個很好理解,不多解釋了。另外,就是對時鍾網路約束。這個是很重要的。比如你的系統中,驅動的電路毀坦的時鍾是27M的,那麼你需要在約束文件中增加類似如下的約束語句
NET REF_CLK27M TNM_NET = REF_CLK27M_grp;
TIMESPEC TS_REF_CLK27M = PERIOD REF_CLK27M_grp : 37ns HIGH 50 %;
這樣的話,工具在布線的時候,就會知道這個時鍾所驅動的所有網路必須滿足至少27M速度的要求,占空比為50%。纖首桐它會任意布線,就有可能出現信號翻轉的很慢,或者延時很長,建立時間保持時間不足,在實際中造成timing錯誤。一般來說,十幾芹差兆以上的時鍾網路最好都加類似的約束,在時鍾上就可以了,工具會幫你把它所驅動的所有網路都加上約束的。
另外,常用的約束還有delay,skew等,具體的你可以到Xilinx網站上下載專門有關Constains的文檔學習一下。

⑥ fpga時序約束輸入和輸出兩個約束就夠用了嗎

從系統上來看,同步時序約束可以分為系統同步與源同步兩大類。簡單點棗陪來說,系統同步是指FPGA與外部器件共用外部時鍾:源同步(SDR, DDR) 即時鍾與數據一起從上游器件發送過來的情況。在設計當中,我們遇到的絕大部分都是針對源同步的時序約束問題。所以下文講述的主要是針對源同步的時序約束。

根據網路上收集的資料以及結合自己的使用習慣,我比較趨向於下面的約束流程方式:時序約束一戚態共高岩源包含以下幾個步驟:

1.首先約束時鍾。輸入時鍾,輸出時鍾。從種類來看不外乎以下幾種:單端輸入時鍾、差分輸入時鍾、GT或恢復時鍾(例如LVDS信號恢復出來的時鍾)、PLL產生的時鍾以及自己產生的門控時鍾。

2. I0約束。只有等待內部時鍾完全通過後,再配置input delay和output delays, 告知FPGA外部埠的數據時序關系。

3.時序例外。在約束完時鍾以及I0後,還是有時序違例的時候,注意檢查一下是否有 時序例外的情況。

⑦ fpga怎麼增強時序約束

FPGA 可以增強時序約束通過實現時序建模、設置時鍾頻旦飢余率和實施時間互斥,即在設計肢灶代碼中加入時間限制,使得同一條線上的信號不能同時出現在多個時鍾周期內。另外,還可以使用資源鎖定,以一種技術手段來約束時序,即在FPGA中通過一個可編程加鎖器(PLL),根據硬體的指令,將某些資源和模滾某個時鍾信號綁定,因此將資源鎖定,並利用綁定的時鍾信號,對埠或寄存器進行賦值或控制操作。

⑧ FPGA設計中 為什麼要加時序約束

通俗簡單地說,就是因為代碼寫出來的時候,在fpga裡面是隨機資源利用的,換而言之,功能塊資源、寄存器資源、布線資源等資源是隨機分布的,而布線不同路徑導致延時時間不同,這樣的話就會導致競爭冒險的出現,因此,為了避免這種情況,必須對fpga資源布局布線進行時序約束以滿足設計要求。

熱點內容
java遞歸排列 發布:2025-07-13 18:02:43 瀏覽:473
輕量雲伺服器如何換成d盤 發布:2025-07-13 17:58:45 瀏覽:931
重置騰訊雲伺服器時間 發布:2025-07-13 17:54:55 瀏覽:325
aes256java加密 發布:2025-07-13 17:54:46 瀏覽:709
mc開伺服器的電腦 發布:2025-07-13 17:46:47 瀏覽:194
事件linux 發布:2025-07-13 17:45:51 瀏覽:142
mssqlpython 發布:2025-07-13 17:24:34 瀏覽:469
oraclesqloracle資料庫 發布:2025-07-13 17:19:04 瀏覽:219
磊科如何修改密碼 發布:2025-07-13 17:03:06 瀏覽:864
oracle資料庫類型 發布:2025-07-13 17:01:39 瀏覽:200