<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > FPGA/CPLD設計小技巧

FPGA/CPLD設計小技巧

作者: 時(shí)間:2017-10-13 來(lái)源:網(wǎng)絡(luò ) 收藏

這是一個(gè)在設計中常犯的錯誤列表這些錯誤常使得你的設計不可靠或速度較慢為了提高你的設計性能和提高速度的可靠性你必須確定你的設計通過(guò)所有的這些檢查 。

本文引用地址:http://dyxdggzs.com/article/201710/365644.htm

可靠性

為時(shí)鐘信號選用全局時(shí)鐘緩沖器BUFG
不選用全局時(shí)鐘緩沖器的時(shí)鐘將會(huì )引入偏差 。

只用一個(gè)時(shí)鐘沿來(lái)寄存數據

使用時(shí)鐘的兩個(gè)沿是不可靠的因為時(shí)鐘的某沿或者兩個(gè)沿會(huì )漂移; 如果時(shí)鐘有漂移而且你只使用了時(shí)鐘的一個(gè)沿你就降低了時(shí)鐘邊沿漂移的風(fēng)險。
這個(gè)問(wèn)題可以這樣來(lái)解決就是允許CLKDLL自動(dòng)糾正時(shí)鐘的占空比以達百分之五十的占空比否則強烈建議你只使用一個(gè)時(shí)鐘沿

除了用CLKDLL或DCM產(chǎn)生的時(shí)鐘外不要在內部產(chǎn)生時(shí)鐘.
這包括產(chǎn)生門(mén)控時(shí)鐘和分頻時(shí)鐘
作為替代可以建立時(shí)鐘使能或使用CLKDLL或DCM來(lái)產(chǎn)生不同的時(shí)鐘信號。
對于一個(gè)純同步設計建議你在任何可能的情況下只使用一個(gè)時(shí)鐘

可靠性

為時(shí)鐘信號選用全局時(shí)鐘緩沖器BUFG
不選用全局時(shí)鐘緩沖器的時(shí)鐘將會(huì )引入偏差 。

只用一個(gè)時(shí)鐘沿來(lái)寄存數據

使用時(shí)鐘的兩個(gè)沿是不可靠的因為時(shí)鐘的某沿或者兩個(gè)沿會(huì )漂移; 如果時(shí)鐘有漂移而且你只使用了時(shí)鐘的一個(gè)沿你就降低了時(shí)鐘邊沿漂移的風(fēng)險。
這個(gè)問(wèn)題可以這樣來(lái)解決就是允許CLKDLL自動(dòng)糾正時(shí)鐘的占空比以達百分之五十的占空比否則強烈建議你只使用一個(gè)時(shí)鐘沿

除了用CLKDLL或DCM產(chǎn)生的時(shí)鐘外不要在內部產(chǎn)生時(shí)鐘.
這包括產(chǎn)生門(mén)控時(shí)鐘和分頻時(shí)鐘
作為替代可以建立時(shí)鐘使能或使用CLKDLL或DCM來(lái)產(chǎn)生不同的時(shí)鐘信號。
對于一個(gè)純同步設計建議你在任何可能的情況下只使用一個(gè)時(shí)鐘
不要在內部產(chǎn)生異步的控制信號 例如復位信號或者置位信號
內部產(chǎn)生的異步控制信號會(huì )產(chǎn)生毛刺
作為替代可以產(chǎn)生一個(gè)同步的復位/置位信號這個(gè)信號的譯碼要比需要作用的時(shí)刻提前一個(gè)時(shí)鐘周期

不要使用沒(méi)有相位關(guān)系的多個(gè)時(shí)鐘

你也許并不總能避免這個(gè)條件在這些情況下確定你已使用了適當的同步電路來(lái)跨越時(shí)鐘域

不要使用沒(méi)有相位關(guān)系的多個(gè)時(shí)鐘

再次你也許并不總能避免這個(gè)條件相反許多設計都需要這樣在這 些情況下確定你已適當地約束了跨越時(shí)鐘域的路徑

不要使用內部鎖存器

內部鎖存器會(huì )混淆時(shí)序而且常常會(huì )引入另外的時(shí)鐘信號
內部鎖存器在透明門(mén)打開(kāi)時(shí)可以被看成是組合邏輯但在門(mén)被鎖存時(shí) 可以被看成是同步元件這將會(huì )混淆時(shí)序分析
內部鎖存器常常會(huì )引入門(mén)控時(shí)鐘門(mén)控時(shí)鐘會(huì )產(chǎn)生毛刺使得設計變得不可靠

性能

邏輯級的時(shí)延不要超過(guò)時(shí)序預算的百分之五十
每個(gè)路徑邏輯級時(shí)延可以在邏輯級時(shí)序報告或布局后時(shí)序報告中找到詳細分析了每個(gè)路徑之后時(shí)序分析器將生成每個(gè)路徑時(shí)延的統計量檢查一下總共的邏輯級時(shí)延超過(guò)了你的時(shí)序預算的百分之五十嗎?

IOB 寄存器

IOB寄存器提供了最快的時(shí)鐘到輸出和輸入到時(shí)鐘的時(shí)延
首先有一些限制對于輸入寄存器在從管腳到寄存器間不能有組合邏 輯存在對于輸出寄存器在寄存器和管腳之間也不能有組合邏輯存在對于三態(tài)輸出在IOB中的所有的寄存器必須使用同一個(gè)時(shí)鐘信號和復位信號而且IOB三態(tài)寄存器必須低電平有效才能放到IOB中三態(tài)緩沖器低電平有效所以在寄存器和三態(tài)緩沖器之間不需要一個(gè)反相器
你必須使軟件能夠選用IOB寄存器你可以設置全局實(shí)現選項為輸入 輸出或輸入輸出選擇IOB寄存器缺省值為關(guān)(off)。
你也可在綜合工具或在用戶(hù)約束文件UCF中設定使得能夠使用IOB寄存器句法為: INST IOB = TRUE;

對于關(guān)鍵的輸出選擇快速轉換速率

可以為L(cháng)VCMOS和LVTTL電平選擇轉換速率快速的轉換速率會(huì )降低輸 出時(shí)延但會(huì )增加地彈所以你必須在仔細考慮的基礎之上選擇快速轉換速率

流水邏輯

如果你的設計允許增加延遲對組合邏輯采用流水操作可以提高性能
在Xilinx的中有大量的寄存器對每一個(gè)四輸入函數發(fā)生器有一個(gè)對應的寄存器在犧牲延遲的情況下利用這些寄存器來(lái)增加數據吞吐量

為四輸入的查找表結構進(jìn)行代碼優(yōu)化

記住每一個(gè)查找表可以建立一個(gè)四輸入的組合邏輯函數如果你需要更大的功能記住實(shí)現該功能所需的查找表的數目

使用Case語(yǔ)句而不是if-then-else語(yǔ)句

復雜的if-then-else語(yǔ)句通常會(huì )生成優(yōu)先級譯碼邏輯這將會(huì )增加這些路徑上的組合時(shí)延
用來(lái)產(chǎn)生復雜邏輯的Case語(yǔ)句通常會(huì )生成不會(huì )有太多時(shí)延的并行邏輯 對于Verilog用戶(hù)可以使用編譯向導synopsys parallel_case

使用一個(gè)或多個(gè)核生成器塊

核生成器塊針對 Xilinx的結構進(jìn)行了優(yōu)化許多塊都可以允許用戶(hù)配置包括大小寬度和流水延遲
查看你設計中的關(guān)鍵路徑你是否可以在核生成器中產(chǎn)生一個(gè)核來(lái)提高鍵路徑性能

使有限狀態(tài)機FSM保持在層次中的自己所在的那一級

為了允許綜合工具完全優(yōu)化你的FSM它必須在它自己的塊中優(yōu)化如果不是這樣的話(huà)這將使得綜合工具將FSM邏輯和它周?chē)倪壿嬕黄饍?yōu)化
FSM不能包括任何的算術(shù)邏輯數據通路邏輯或者其它與狀態(tài)機不相關(guān)的組合邏輯

使用兩個(gè)進(jìn)程或always塊的有限狀態(tài)機

下一個(gè)狀態(tài)和輸出譯碼邏輯必須放在獨立的進(jìn)程或always塊中這將不允許綜合工具在輸出和下一個(gè)狀態(tài)譯碼邏輯之間共享資源

使用一位有效編碼有限狀態(tài)機FSM

一位有效編碼通常會(huì )在富含寄存器的中提供最高性能的狀態(tài)機

為每一個(gè)葉級leaf-level塊提供寄存輸出

葉級塊是可以推論邏輯的塊而結構級(structural-level)的塊僅例化較 底層的塊這樣就建立了層次
如果葉級塊被鎖存輸出則可使綜合工具保留層次這可使分析這些代碼 的靜態(tài)時(shí)序變得比較容易
對邊界進(jìn)行寄存可以使得各個(gè)塊之間有確定的時(shí)序關(guān)系

利用有適當管腳定位約束的數據流

Xilinx器件中的數據流是在水平方向上的這里部分的原因是進(jìn)位鏈是在垂直方向上的另外還有其它的原因三態(tài)緩沖線(xiàn)在水平方向上排列塊之間也有水平方向上的直接連接
為了利用數據流地址和數據管腳必須放在芯片的左側或右側同時(shí)注意因為進(jìn)位鏈是自下而上的所以將最低位放在最下面控制信號放在芯片的上部和下部

不同的計數器風(fēng)格

二進(jìn)制計數器是非常慢的如果你的二進(jìn)制計數器是關(guān)鍵路徑可以考慮使用不同的風(fēng)格的計數器LFSRPre-scalar或Johnson

設計是層次化的被分成不同的功能塊和技術(shù)塊

設計必須被劃分成不同的功能塊首先是較頂層的功能塊然后是較底層的塊你也應該包括特定技術(shù)的塊
設計層次化必須使得設計更可讀更易調試更易復用

復制的高扇出網(wǎng)絡(luò )

這可以通過(guò)你的綜合工具來(lái)進(jìn)行控制然而為了更緊地控制復制你可以選擇復制寄存器

利用四種全局約束來(lái)對設計進(jìn)行全局的約束周期對每個(gè)時(shí)鐘偏置輸入偏置輸出管腳-到-管腳
你也許會(huì )有針對多周期路徑失敗路徑和關(guān)鍵路徑的其它約束但是你必須總要從指定四個(gè)全局約束開(kāi)始



關(guān)鍵詞: FPGA CPLD

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>