IOB暫存器的使用 IOB TRUE 屬性

2021-06-29 00:46:18 字數 2110 閱讀 5129

iob暫存器跟通訊有關的設計中多會用到,今天查了相關資料,總結如下:

首先了解一下fpga的晶元內部結構:

乙個fpga主要是由可程式設計輸入輸出單元(圖中的iob模組),可程式設計邏輯單元(clb模組),塊ram(圖中的bram,也屬於內嵌硬體),數字時鐘管理(dcm,也屬於內嵌硬體),還有一些內嵌的專用的硬體模組(dsp),iob暫存器就在圖中的iob模組中。

iob 的內部結構如下:

iob單元簡稱io單元,是晶元與外部器件的介面部分,用於完成不同電氣特性下對輸入輸出訊號的的驅動和匹配要求。目io口的頻率越來越高,一些高階的fpga通過ddr技術可使資料率達到gb/s.

在這裡多提一點: iob多用在高速資料取樣的時候,對一些很難採的訊號要通過連線iob暫存器(在ucf檔案中約束)。在賽靈思系列fpga 的iob 中分別有輸入和輸出暫存器。如果將設計中的第一級暫存器或最後一級暫存器用iob 內部暫存器實現,那麼就可以縮短io 引腳到暫存器之間的路徑(理解這句話是關鍵,我的理解是:若輸入輸出不連iob暫存器,則**修改後(但邏輯功能相同)每次的布局佈線後,輸入輸出訊號會被連在不同的內部暫存器上,這樣輸入訊號進入第一級暫存器的佈線延遲就會每次都不同,這樣有可能在高速訊號採集的時候不能正確取樣,因為佈線延遲會導致建立或保持時間不滿足;如果在ucf檔案中使用iob暫存器,則不管**如何修改,輸入訊號進入fpga內部都是被第一級的iob暫存器取樣,更能滿足取樣條件),這通常可以縮短大約1~2ns 的傳輸時延。

但是在使用ucf檔案約束iob暫存器時,首先,有一些限制。對於輸入暫存器在從管腳到暫存器間不能有組合邏輯存在。對於輸出暫存器,在暫存器和管腳之間也不能有組合邏輯存在(也就是訊號在輸入輸出之前在**設計中都要乾乾淨淨打一拍)。對於三態輸出,在iob中的所有的暫存器必須使用同乙個時鐘訊號和復位訊號,而且iob三態暫存器必須低電平有效才能放到iob中(三態緩衝器低電平有效,所以在暫存器和三態緩衝器之間不需要乙個反相器)。必須使軟體能夠選用iob暫存器,可以設定全域性實現選項:為輸入、輸出或輸入輸出選擇iob暫存器。預設值為關 off。

你也可在綜合工具或在使用者約束檔案ucf中設定,使得能夠使用iob暫存器。句法為: inst iob = true;

下邊是一網友的的例子:我想大家都應該知道iobpacking的概念吧,就是把暫存器放置到iob內,這樣暫存器資料可以直接從pad輸出,和fpga內部slice實現相比,減少了佈線延遲,提高了效能。

設定iob的方法太多了,我列舉幾個:

1. 在ucf上為相應的管腳制定 iob= true 屬性。

2. 在synplify 中指定 define_global_attribute 屬性,你可以通過scope介面操作,類似。

3. 在xst中開啟屬性,設定xilinxspecific options 的 -iob (pack i/o registers into iob) 屬性為yes

4. 在ise的implementation的map屬性中設定 -pr(pack i/o registers into iob) 屬性為「for inputs and outputs」

大概就是這些,歡迎補充。

今天我做的實驗,非常簡單。就是要親眼目睹一下採用iob packing後有什麼區別。

**(主要部分)

always @(posedge i_clk or negedge i_rst_n)begin

if (!i_rst_n) o1 <= 1'b0;

else o1 <= i1;

end非常簡單的**,就是乙個暫存器而已。

然後再ise11.1中建立工程,預設方式跑一遍,然後再設定iob packing跑一遍。每次跑完後都在p&r的下拉列表裡找到 view/edit routed design (fpga editor),開啟,**最終的實現結果。發現了重大的差別。

- 預設方案

最終實現中用到乙個slice,點進去看到了暫存器的使用

- iob packing方案

最終實現中沒有slice,但是用到了乙個ilogic,他是input pad中的一部分,在這個ilogic中點進去,就看到了我們的暫存器。

所以和我們預想的一樣,一般方案中,暫存器是實現在fpga內部,因此到pad的延時相對比較長,尤其是設計較大較複雜的時候。使用iob packing則將暫存器實現在fpga邊緣的iob中,大大縮短延遲時間,提高了時序效能。

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

crh暫存器 實驗 使用暫存器點亮LED

埠配置高暫存器後面的英文就是暫存器名稱可參考參考手冊,然後x可以為a e也就是適用gpuoa gpioe埠這樣的乙個暫存器。位址偏移,就是本暫存器相對這個外設基位址的偏移 暫存器位表 表示0 31位名稱及許可權,表上方的數字位編號,中間位位名稱,下方位讀寫許可權,w表示寫,r表示讀 位功能,如表所描...