fanout,即扇出,指模組直接呼叫的下級模組的個數,如果這個數值過大的話,在fpga直接表現為net delay較大,不利於時序收斂。因此,在寫**時應盡量避免高扇出的情況。但是,在某些特殊情況下,受到整體結構設計的需要或者無法修改**的限制,則需要通過其它優化手段解決高扇出帶來的問題。以下就介紹三個這樣的方法:
首先來看下面這個例項,如圖1所示為轉置型fir濾波器中的關鍵路徑時序報告,在dsp in fpga的fir專題中有介紹轉置型結構fir濾波器輸入資料的扇出較大,在圖
在沒有優化情況下,該設計的fmax:206.016mhz
1. 暫存器複製
暫存器複製是解決高扇出問題最常用的方法之一,通過複製幾個相同的暫存器來分擔由原先乙個暫存器驅動所有模組的任務,繼而達到減小扇出的目的。通過簡單修改**,如圖3所示,複製了4個暫存器:din_d0、din_d1、din_d2、din_d3,din_d、din_d0、din_d1、din_d2分別驅動2個dsp48e1,din_d3驅動3個dsp48e1。其中在**中為防止綜合器優化相同暫存器,在對應訊號上加入了(* equivalent_register_removal="no" *)屬性避免被優化。
綜合實現後得到時序報告如圖4所示,該資料路徑上輸入資料fanout減為2,對應net delay也減小到了0.57ns。得到設計如圖5所示,與期望的相同,複製了4個暫存器來分擔fanout。經過暫存器優化後得到fmax:252.143mhz
2. max_fanout屬性
在**中可以設定訊號屬性,將對應訊號的max_fanout屬性設定成乙個合理的值,當實際的設計中該訊號的fanout超過了這個值,綜合器就會自動對該訊號採用優化手段,常用的手段其實就是暫存器複製。屬性設定如下**所示:
(* max_fanout = "3" *)reg signed [15:0] din_d;
將din_d訊號的max_fanout屬性設定成3,經過綜合實現後,得到時序報告如圖6所示,其中fanout只有2,相應的net delay也只有0.61ns,自動優化效果還不錯。結構如圖7所示,其中din_d_12_1、din_d_12_2、din_d_12_3是綜合器優化後自動新增,即實現了暫存器複製功能。經過設定max_fanout屬性優化後得到fmax:257.135mhz
3. bufg
通常bufg是用於全域性時鐘的資源,可以解決訊號因為高扇出產生的問題。但是其一般用於時鐘或者復位之類扇出超級大的訊號,此類訊號涉及的邏輯遍布整個晶元,而bufg可以從全域性的角度優化佈線。而且一塊fpga晶元中bufg資源也有限,在7k325tffg900上也僅有32個,如果用於普通訊號的高扇出優化也不大現實。因此,在時鐘上使用bufg是必須的,但是如果設計中遇到某些復位訊號因高扇出產生的時序問題時,可以在此訊號上使用bufg來優化。
delete刪除屬性問題
當使用var建立乙個變數時,建立的這個屬性是不可配置的,也就是說這個變數無法通過delete運算子刪除 var demo1 1 通過var建立乙個不可刪除的全域性變數 demo2 2 建立乙個可刪除的全域性變數 demo2 this.demo3 3 同上 delete demo1 delete.de...
Vue屬性繫結class屬性問題
今天在菜鳥教程上學習 vue.js,學到 vue.js樣式繫結這一章,在物件中傳入更多屬性來動態切換class,它的原 意思是乙個100 100畫素的塊元素中原來的顏色是綠色,後被紅色覆蓋,最初本以為在 v bind class 那兒交換一下位置就好了,結果不是,而是要交換style中對應的位置 菜...
裡的幾個屬性問題
s iterator 標籤有3個屬性 value 被迭代的集合 id 指定集合裡面的元素的id status 迭代元素的索引 例如 a 列印結果為 1a2a3a4a5a 你的裡的value才是在後台取到的值 option裡面的第乙個property value是提交給後台的你所選擇的下拉列表的val...