Q51、編譯ModelSim需要的Xilinx庫的操作
首先要將安裝的ModelSim目錄下的ModelSim.ini屬性設置為存檔類型(去掉只讀)
然后從DOS界面到ISE安裝目錄bin\nt(如果在Windows的環境變量中已經設置過Xilinx路徑,就不必了),
運行命令:(for ISE 6)
compxlib -s mti_se -f all -l all -p e:\modeltech_6.0\win32 -o e:\modeltech_6.0\xilinx_libs (for ISE 6)
-p 指定modelsim安裝目錄
-o 指定編譯庫輸出目錄
(for ISE 7)
compxlib -s mti_se -arch all -lib all -l all -p e:\modeltech_6.0\win32 -dir e:\modeltech_6.0\xilinx_libs (for ISE 7)
-arch : device architecture:spartan2, virtex, etc.
-lib : library: unisim, smartmodel, etc.
新的版本把原來的-f拆開成了-arch和-lib,而-f則指讀取文件,不過也還可以兼容原來的寫法的
編譯之后,compxlib會自動修改modelsim.ini,重新打開ModelSim,就能看到新的庫了
Q52 SE中一些常用的實用功能
鏡像:Project --> Take Snapshot,用這個很容易做版本控制;
打包:Project --> Archive,將工程文件夾打包,方便轉移與交流
Q53、門控時鐘整理與總結
當綜合器出現這樣的Warning時,即提示發現了門控時鐘
WARNING DesignRules:372 - Netcheck: Gated clock. Clock net _n0019 is sourced by
a combinatorial pin. This is not good design practice. Use the CE pin to
control the loading of data into the flip-flop.
Q54:如果一個時鐘節點由組合邏輯驅動,那么它就形成了門控時鐘了。綜合器建議用組合邏輯驅動CE引腳。
為什么綜合器會出現這樣的警告呢?
原來門控時鐘容易產生毛刺、增加延時、引起時鐘漂移(Clock Skew),并且還會降低可測性。
Q55:門控時鐘引起的這些問題怎么解決呢?
用組合邏輯來驅動CE端口,而不要驅動Clock端口,這樣能更好地保持同步。
Q56:說了那么多壞處,有沒有好處呢?
門控時鐘的好處常用在ASIC而不是FPGA中。在ASIC中可以通過門控時鐘降低功耗。不過即使是在ASIC中,上述的缺點還是存在的,所以必須要小心地設計。
Q58:JTAG連接不上如何處理?
有時候碰到這樣的問題:在iMPACT中執行Initialize命令后出現一連串的Error,無論如何找不到FPGA了。
如果你遇到的問題跟我描述的一樣,那么下面的方法可能可以為你解決:
1、首先確認并口是否打開:
在BIOS設置中找到Parallel Port的選項,一般情況下將它設置到EPP+ECP(增強型并口)模式。
2、重新安裝ISE附帶的并口驅動程序:
通常情況下產生這種問題的最主要的原因是Xilinx ISE的并口驅動被覆蓋,或者你安裝ISE的時候就沒有安裝并口驅動程序。因此,解決方法就是重新安裝并口驅動程序。提醒:你只需要安裝并口驅動程序,而不需要安裝整個ISE,整個過程只需要不到1分鐘就可以解決的。
Q59:、ISE中添加屬性,使ModelSim能顯示仿真代碼覆蓋率
在ISE中的操作
1) 點中modelsim圖標,右鍵屬性
2) VLOG命令行加入-cover bcest
3) VSIM命令行加入-coverage
(此條來自EDACN)
Q60、Xilinx軟件安裝事項
Xilinx全部軟件都不能安裝在帶空格帶中文字符的目錄中,也就是說不能裝在Program Files這個目錄下。建議所有軟件都裝在某個盤的根目錄下。
需要注意的是,SysGen因為需要安裝在Matlab的toolbox目錄下,因此Matlab也不可以安裝在帶空格帶中文的目錄中!
Q61:為什么Xilinx器件中BRAM大小是18K?
18K是為了存放校驗位的考慮。通常需要校驗時,每8bit需一位校驗位,因此長度是16+2=18。
但是,BRAM并沒有產生校驗位的功能,他內部所有的位功能都是一致的,都可以用作存儲。
在使用BRAM時,存儲深度以2k為分界點,如果存儲深度<=2k,即存儲形式為9bit x 2k,那么此時可以用滿18K的BRAM;而如果存儲深度>2k,即4bit x 4K或2 bit x 8k這種形式,則最多只能用到16K的BRAM。
Q62:Toggle Path是什么意思?
ISE中有個命令叫做Toggle Path,它的作用就是改變Project中文件的相對路徑/絕對路徑存儲方式。這里所說的文件,是指非工程目錄下的文件。
具體解釋參見Xilinx Answer Record 23415
Q63:iMPACT可不可以單獨裝?
iMPACT可以單獨安裝。
ISE8.2安裝時可以選Standalone Programming Tool,這樣就會只裝impact。不過還要記得還要選你使用的Cable Driver。
但是8.2有個問題:裝好的impact會因為缺少MSVCR7.dll而不能啟動
...
所以,要么你還隨手帶一個MSVCR7.dll,要么用別的版本:)
1. waveform compare
比較兩個wlf文件。
Tools -> Waveform Compare -> Comparision Wizard
2. dataflow hierarchy
在dataflow窗口顯示出某個信號所在的hierarchy。
Dataflow窗口 -> Tools -> Options -> Show Hierarchy
3. udo file
將某個添加了除頂層端口信號的wave的do文件保存下來,以便下一次開啟時不用重新添加信號和restart。此方法是我覺得最簡單的調試方法。
Wave窗口 -> File -> Save -> Format -> x.do
打開do文件并將有用的內容復制到ISE工程目錄下的.udo文件中,以后每次做仿真都可以不用再添加信號了。
如果更改了源代碼需要重新compile,也不需要將ModelSim關掉,只需要按向上鍵,執行一次xx.fdo或者xx.tdo文件即可,因為fdo和tdo文件都會自動調用udo。
4. Verilog FSM state name
Verilog寫的狀態機在仿真時狀態名是數字。如果能使用狀態名來調試就會方便許多。
使用virtual function。太長,方法請參考這里
5. ModelSim的系統設置
ModelSim的設置信息一個是modelsim.ini,另一個在注冊表[HKEY_CURRENT_USER\Software\Model Technology Incorporated\ModelSim]路徑下
6. 如果要使用兩個自己編譯的庫
眾所周知,ModelSim PE/SE是要編譯Xilinx庫的。如果既想要ISE8.1的庫,又想要ISE8.2的庫,直接編譯兩次會使ModelSim的lib極其混亂。
解決方案就是,保留三個modelsim.ini文件,一個8.1的,一個8.2的,一個原始的。8.1的和8.2的很好理解,什么時候要用就復制到Modelsim安裝目錄下去;原始的為了以后還要編譯別的版本而保留。
Q64: 如何提高FPGA的運行速度?)
1. 修改你的系統結構設計,或者VERILOG代碼: 這個是最好的方法,另外一個是加TIMING CONSTRAINTS,這個我呆會兒說。具體的方法很多,比如切割大的邏輯,用一個大CLK(比如10NS)完成的大邏輯切割成兩個小CLK(6NS)完成的小邏輯,這樣雖然延時增加了,但是系統的頻率上去了,你的設計就可以突破這個BOTTLE NECK.那什么是大的邏輯什么是小的邏輯,你可以看靜態時序報告,這玩藝你一定要懂,不然你做FPGA就是在玩,即使你的設計能跑起來,那你也是玩起來的,而不是做起來的。
靜態時序報告會提示你那個PATH是延遲最大的,這個延遲就是你設計中制約你頻率的PATH,這個延時有兩個東西帶來,邏輯延遲和布線延遲,邏輯延遲大的話,就切割邏輯為小的邏輯,現在FPGA基本上是一個4輸入SRAM,你的邏輯輸入就被當作地址,而邏輯結果早就在FPGA配置后放在SRAM里面,這樣FPGA運行的時候,根據不同的邏輯輸入,從SRAM中取得邏輯結果輸出,比如你的邏輯是Fout = f(x,y,z,t),那么x,y,z,t就是當作了一個sram的地址,各種結果就放在sram的16個內存中,根據不同的x,y,z,t來取出結果放在Fout上輸出,如果你的邏輯比較復雜,比如要5個輸入信號(超過了4個)要在一個clk中完成,那你的邏輯一個sram一定完成不了,需要兩個sram,好,這就是一個大邏輯,你要切割它,所謂切割就是搞一個臨時中間變量,比如F= X + Y + Z,你可以分為兩步走:第一個CLK: TEMP = X + Y;第二個CLK: F = TEMP + Z。
簡單的判斷你可以通過綜合結果也可以看到,比如在SYNPLIFYPRO里的TECKNOLOGUY OR RTL VIEWER看你的邏輯是不是在一個SRAM里,如果不在就是大邏輯了。另外一個就是布線延遲帶來的頻率BOTTLE NECK。這就需要用布局布線的TIME CONSTRAINTS來輔助你了。
2 TIME CONSTRAINTS:作IC的和作FPGA的什么區別:?CONSTRAINTS! 做IC你不但要寫RTL CODE,還要加面積CONSTRAINTS,時序CONSTRAINTS,功耗CONSTRAINTS。那你現在就可以明白了CONSTRAINTS有多重要,CONSTRAINTS得工具要看FPGA廠商的工具了,比如ISE QUANTUS。同時在寫RTL代碼的時候也要加CONSTRAINTS,因為它直接決定你的網表的結構,如果你的RTL的約束寫的不好,比如一個狀態機有ONEHOT 或者 GRAY CODE風格,你如果寫的是ONEHOT風格,但是在CONSTRAINTS卻讓綜合期綜合為GRAY CODE風格(現在的綜合器很智能,可以把你寫的風格代碼綜合為你設定的CONSTRAINTS其他風格),那你的網表就不一樣了,后邊的布局布線工具再努力也沒有用。
要加CONSTRAINTS,就要看FPGA廠商的CONSTRAINTS文件格式,比如UCF(ISE),QSF(ALTERA)。具體不談了,自己好好學習,這個實在太多,比如你看一個邏輯的輸入源和輸出目的地太遠,帶來了很大布線延遲,那就把加CONSTRAINTS把他們盡量拉近,但是距離近不一定他們布線就近了,FPGA可能會在兩個很近的單元之間布很長的線,你還要在CONSTRAINTS里告訴布局布線工具讓他們的的布線也很短,不推薦用手工拉線,這樣你以后的代碼就不能當作IP給被人用了,而是要用CONSTRAINTS,這樣你以后寫好RTL代碼和CONSTRAINTS文件,就能當作IP賣給客戶了,不然你就留著自己玩玩算了。CONSTRAINTS很多,不具體說了,最重要的是PERIOD或者Fmax約束,分別對應xilinx和altera,具體自己學習,不多說了,一般的應用用這兩個CONSTRAINTS就可以了
評論
查看更多