資源描述:
《賽靈思Verilog(FPGA-CPLD)設(shè)計(jì)技巧.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、賽靈思Verilog(FPGA/CPLD)設(shè)計(jì)技巧 以下是一個在設(shè)計(jì)中常犯的錯誤列表這些錯誤常使得你的設(shè)計(jì)不可靠或速度較慢為了提高你的設(shè)計(jì)性能和提高速度的可靠性你必須確定你的設(shè)計(jì)通過所有的這些檢查。 可靠性為時鐘信號選用全局時鐘緩沖器BUFG不選用全局時鐘緩沖器的時鐘將會引入偏差?! ≈挥靡粋€時鐘沿來寄存數(shù)據(jù)使用時鐘的兩個沿是不可靠的因?yàn)闀r鐘的某沿或者兩個沿會漂移;如果時鐘有漂移而且你只使用了時鐘的一個沿你就降低了時鐘邊沿漂移的風(fēng)險。這個問題可以這樣來解決就是允許CLKDLL自動糾正時鐘的占空比以達(dá)百分之五十的占空比否則強(qiáng)烈建議你只使用一個時鐘沿
2、除了用CLKDLL或DCM產(chǎn)生的時鐘外不要在內(nèi)部產(chǎn)生時鐘.這包括產(chǎn)生門控時鐘和分頻時鐘作為替代可以建立時鐘使能或使用CLKDLL或DCM來產(chǎn)生不同的時鐘信號。對于一個純同步設(shè)計(jì)建議你在任何可能的情況下只使用一個時鐘 可靠性為時鐘信號選用全局時鐘緩沖器BUFG不選用全局時鐘緩沖器的時鐘將會引入偏差。 只用一個時鐘沿來寄存數(shù)據(jù)使用時鐘的兩個沿是不可靠的因?yàn)闀r鐘的某沿或者兩個沿會漂移;如果時鐘有漂移而且你只使用了時鐘的一個沿你就降低了時鐘邊沿漂移的風(fēng)險。這個問題可以這樣來解決就是允許CLKDLL自動糾正時鐘的占空比以達(dá)百分之五十的占空比否則強(qiáng)烈建議你只使用
3、一個時鐘沿 除了用CLKDLL或DCM產(chǎn)生的時鐘外不要在內(nèi)部產(chǎn)生時鐘.這包括產(chǎn)生門控時鐘和分頻時鐘作為替代可以建立時鐘使能或使用CLKDLL或DCM來產(chǎn)生不同的時鐘信號。對于一個純同步設(shè)計(jì)建議你在任何可能的情況下只使用一個時鐘不要在內(nèi)部產(chǎn)生異步的控制信號例如復(fù)位信號或者置位信號內(nèi)部產(chǎn)生的異步控制信號會產(chǎn)生毛刺作為替代可以產(chǎn)生一個同步的復(fù)位/置位信號這個信號的譯碼要比需要作用的時刻提前一個時鐘周期 不要使用沒有相位關(guān)系的多個時鐘你也許并不總能避免這個條件在這些情況下確定你已使用了適當(dāng)?shù)耐诫娐穪砜缭綍r鐘域 不要使用沒有相位關(guān)系的多個時鐘再次你也許并不
4、總能避免這個條件相反許多設(shè)計(jì)都需要這樣在這些情況下確定你已適當(dāng)?shù)丶s束了跨越時鐘域的路徑 不要使用內(nèi)部鎖存器內(nèi)部鎖存器會混淆時序而且常常會引入另外的時鐘信號內(nèi)部鎖存器在透明門打開時可以被看成是組合邏輯但在門被鎖存時可以被看成是同步元件這將會混淆時序分析內(nèi)部鎖存器常常會引入門控時鐘門控時鐘會產(chǎn)生毛刺使得設(shè)計(jì)變得不可靠性能 邏輯級的時延不要超過時序預(yù)算的百分之五十每個路徑邏輯級時延可以在邏輯級時序報告或布局后時序報告中找到詳細(xì)分析了每個路徑之后時序分析器將生成每個路徑時延的統(tǒng)計(jì)量檢查一下總共的邏輯級時延超過了你的時序預(yù)算的百分之五十嗎? IOB寄存器IO
5、B寄存器提供了最快的時鐘到輸出和輸入到時鐘的時延首先有一些限制對于輸入寄存器在從管腳到寄存器間不能有組合邏輯存在對于輸出寄存器在寄存器和管腳之間也不能有組合邏輯存在對于三態(tài)輸出在IOB中的所有的寄存器必須使用同一個時鐘信號和復(fù)位信號而且IOB三態(tài)寄存器必須低電平有效才能放到IOB中三態(tài)緩沖器低電平有效所以在寄存器和三態(tài)緩沖器之間不需要一個反相器你必須使軟件能夠選用IOB寄存器你可以設(shè)置全局實(shí)現(xiàn)選項(xiàng)為輸入輸出或輸入輸出選擇IOB寄存器缺省值為關(guān)(off)。你也可在綜合工具或在用戶約束文件UCF中設(shè)定使得能夠使用IOB寄存器句法為:INSTIOB=TRUE;
6、 對于關(guān)鍵的輸出選擇快速轉(zhuǎn)換速率可以為LVCMOS和LVTTL電平選擇轉(zhuǎn)換速率快速的轉(zhuǎn)換速率會降低輸出時延但會增加地彈所以你必須在仔細(xì)考慮的基礎(chǔ)之上選擇快速轉(zhuǎn)換速率 流水邏輯如果你的設(shè)計(jì)允許增加延遲對組合邏輯采用流水操作可以提高性能在Xilinx的FPGA中有大量的寄存器對每一個四輸入函數(shù)發(fā)生器有一個對應(yīng)的寄存器在犧牲延遲的情況下利用這些寄存器來增加數(shù)據(jù)吞吐量 為四輸入的查找表結(jié)構(gòu)進(jìn)行代碼優(yōu)化記住每一個查找表可以建立一個四輸入的組合邏輯函數(shù)如果你需要更大的功能記住實(shí)現(xiàn)該功能所需的查找表的數(shù)目 使用Case語句而不是if-then-else語句復(fù)雜
7、的if-then-else語句通常會生成優(yōu)先級譯碼邏輯這將會增加這些路徑上的組合時延用來產(chǎn)生復(fù)雜邏輯的Case語句通常會生成不會有太多時延的并行邏輯對于Verilog用戶可以使用編譯向?qū)ynopsysparallel_case