新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FPGA開(kāi)發(fā)基礎(chǔ)知識(shí)問(wèn)答

FPGA開(kāi)發(fā)基礎(chǔ)知識(shí)問(wèn)答

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

Q51、編譯ModelSim需要的Xilinx庫(kù)的操作

首先要將安裝的ModelSim目錄下的ModelSim.ini屬性設(shè)置為存檔類型(去掉只讀)
然后從DOS界面到ISE安裝目錄binnt(如果在Windows的環(huán)境變量中已經(jīng)設(shè)置過(guò)Xilinx路徑,就不必了),
運(yùn)行命令:(for ISE 6)
compxlib -s mTI_se -f all -l all -p e:modeltech_6.0win32 -o e:modeltech_6.0xilinx_libs (for ISE 6)
-p 指定modelsim安裝目錄
-o 指定編譯庫(kù)輸出目錄
(for ISE 7)
compxlib -s mTI_se -arch all -lib all -l all -p e:modeltech_6.0win32 -dir e:modeltech_6.0xilinx_libs (for ISE 7)

本文引用地址:http://m.butianyuan.cn/article/201710/365652.htm

-arch : device architecture:spartan2, virtex, etc.
-lib : library: unisim, smartmodel, etc.
新的版本把原來(lái)的-f拆開(kāi)成了-arch和-lib,而-f則指讀取文件,不過(guò)也還可以兼容原來(lái)的寫法的

編譯之后,compxlib會(huì)自動(dòng)修改modelsim.ini,重新打開(kāi)ModelSim,就能看到新的庫(kù)了

Q52 SE中一些常用的實(shí)用功能

鏡像:Project --> Take Snapshot,用這個(gè)很容易做版本控制;
打包:Project --> Archive,將工程文件夾打包,方便轉(zhuǎn)移與交流

Q53、門控時(shí)鐘整理與總結(jié)

當(dāng)綜合器出現(xiàn)這樣的Warning時(shí),即提示發(fā)現(xiàn)了門控時(shí)鐘
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:如果一個(gè)時(shí)鐘節(jié)點(diǎn)由組合邏輯驅(qū)動(dòng),那么它就形成了門控時(shí)鐘了。綜合器建議用組合邏輯驅(qū)動(dòng)CE引腳。
為什么綜合器會(huì)出現(xiàn)這樣的警告呢?

原來(lái)門控時(shí)鐘容易產(chǎn)生毛刺、增加延時(shí)、引起時(shí)鐘漂移(Clock Skew),并且還會(huì)降低可測(cè)性。

Q55:門控時(shí)鐘引起的這些問(wèn)題怎么解決呢?

用組合邏輯來(lái)驅(qū)動(dòng)CE端口,而不要驅(qū)動(dòng)Clock端口,這樣能更好地保持同步。

Q56:說(shuō)了那么多壞處,有沒(méi)有好處呢?

門控時(shí)鐘的好處常用在ASIC而不是中。在ASIC中可以通過(guò)門控時(shí)鐘降低功耗。不過(guò)即使是在ASIC中,上述的缺點(diǎn)還是存在的,所以必須要小心地設(shè)計(jì)。

Q58:JTAG連接不上如何處理?

有時(shí)候碰到這樣的問(wèn)題:在iMPACT中執(zhí)行IniTIalize命令后出現(xiàn)一連串的Error,無(wú)論如何找不到了。
如果你遇到的問(wèn)題跟我描述的一樣,那么下面的方法可能可以為你解決:
1、首先確認(rèn)并口是否打開(kāi):
在BIOS設(shè)置中找到Parallel Port的選項(xiàng),一般情況下將它設(shè)置到EPP+ECP(增強(qiáng)型并口)模式。
2、重新安裝ISE附帶的并口驅(qū)動(dòng)程序:
通常情況下產(chǎn)生這種問(wèn)題的最主要的原因是Xilinx ISE的并口驅(qū)動(dòng)被覆蓋,或者你安裝ISE的時(shí)候就沒(méi)有安裝并口驅(qū)動(dòng)程序。因此,解決方法就是重新安裝并口驅(qū)動(dòng)程序。提醒:你只需要安裝并口驅(qū)動(dòng)程序,而不需要安裝整個(gè)ISE,整個(gè)過(guò)程只需要不到1分鐘就可以解決的。

Q59:、ISE中添加屬性,使ModelSim能顯示仿真代碼覆蓋率

在ISE中的操作
1) 點(diǎn)中modelsim圖標(biāo),右鍵屬性
2) VLOG命令行加入-cover bcest
3) VSIM命令行加入-coverage
(此條來(lái)自EDACN)

Q60、Xilinx軟件安裝事項(xiàng)

Xilinx全部軟件都不能安裝在帶空格帶中文字符的目錄中,也就是說(shuō)不能裝在Program Files這個(gè)目錄下。建議所有軟件都裝在某個(gè)盤的根目錄下。
需要注意的是,SysGen因?yàn)樾枰惭b在Matlab的toolbox目錄下,因此Matlab也不可以安裝在帶空格帶中文的目錄中!

Q61:為什么Xilinx器件中BRAM大小是18K?

18K是為了存放校驗(yàn)位的考慮。通常需要校驗(yàn)時(shí),每8bit需一位校驗(yàn)位,因此長(zhǎng)度是16+2=18。
但是,BRAM并沒(méi)有產(chǎn)生校驗(yàn)位的功能,他內(nèi)部所有的位功能都是一致的,都可以用作存儲(chǔ)。
在使用BRAM時(shí),存儲(chǔ)深度以2k為分界點(diǎn),如果存儲(chǔ)深度=2k,即存儲(chǔ)形式為9bit x 2k,那么此時(shí)可以用滿18K的BRAM;而如果存儲(chǔ)深度>2k,即4bit x 4K或2 bit x 8k這種形式,則最多只能用到16K的BRAM。

Q62:Toggle Path是什么意思?

ISE中有個(gè)命令叫做Toggle Path,它的作用就是改變Project中文件的相對(duì)路徑/絕對(duì)路徑存儲(chǔ)方式。這里所說(shuō)的文件,是指非工程目錄下的文件。
具體解釋參見(jiàn)Xilinx Answer Record 23415

Q63:iMPACT可不可以單獨(dú)裝?

iMPACT可以單獨(dú)安裝。
ISE8.2安裝時(shí)可以選Standalone Programming Tool,這樣就會(huì)只裝impact。不過(guò)還要記得還要選你使用的Cable Driver。
但是8.2有個(gè)問(wèn)題:裝好的impact會(huì)因?yàn)槿鄙費(fèi)SVCR7.dll而不能啟動(dòng)
...

所以,要么你還隨手帶一個(gè)MSVCR7.dll,要么用別的版本:)

1. waveform compare
比較兩個(gè)wlf文件。
Tools -> Waveform Compare -> Comparision Wizard

2. dataflow hierarchy
在dataflow窗口顯示出某個(gè)信號(hào)所在的hierarchy。
Dataflow窗口 -> Tools -> Options -> Show Hierarchy

3. udo file
將某個(gè)添加了除頂層端口信號(hào)的wave的do文件保存下來(lái),以便下一次開(kāi)啟時(shí)不用重新添加信號(hào)和restart。此方法是我覺(jué)得最簡(jiǎn)單的調(diào)試方法。
Wave窗口 -> File -> Save -> Format -> x.do
打開(kāi)do文件并將有用的內(nèi)容復(fù)制到ISE工程目錄下的.udo文件中,以后每次做仿真都可以不用再添加信號(hào)了。
如果更改了源代碼需要重新compile,也不需要將ModelSim關(guān)掉,只需要按向上鍵,執(zhí)行一次xx.fdo或者xx.tdo文件即可,因?yàn)閒do和tdo文件都會(huì)自動(dòng)調(diào)用udo。

4. Verilog FSM state name
Verilog寫的狀態(tài)機(jī)在仿真時(shí)狀態(tài)名是數(shù)字。如果能使用狀態(tài)名來(lái)調(diào)試就會(huì)方便許多。
使用virtual function。太長(zhǎng),方法請(qǐng)參考這里

5. ModelSim的系統(tǒng)設(shè)置
ModelSim的設(shè)置信息一個(gè)是modelsim.ini,另一個(gè)在注冊(cè)表[HKEY_CURRENT_USERSoftwareModel Technology IncorporatedModelSim]路徑下

6. 如果要使用兩個(gè)自己編譯的庫(kù)
眾所周知,ModelSim PE/SE是要編譯Xilinx庫(kù)的。如果既想要ISE8.1的庫(kù),又想要ISE8.2的庫(kù),直接編譯兩次會(huì)使ModelSim的lib極其混亂。
解決方案就是,保留三個(gè)modelsim.ini文件,一個(gè)8.1的,一個(gè)8.2的,一個(gè)原始的。8.1的和8.2的很好理解,什么時(shí)候要用就復(fù)制到Modelsim安裝目錄下去;原始的為了以后還要編譯別的版本而保留。

Q64: 如何提高的運(yùn)行速度?

1. 修改你的系統(tǒng)結(jié)構(gòu)設(shè)計(jì),或者VERILOG代碼: 這個(gè)是最好的方法,另外一個(gè)是加TIMING CONSTRAINTS,這個(gè)我呆會(huì)兒說(shuō)。具體的方法很多,比如切割大的邏輯,用一個(gè)大CLK(比如10NS)完成的大邏輯切割成兩個(gè)小CLK(6NS)完成的小邏輯,這樣雖然延時(shí)增加了,但是系統(tǒng)的頻率上去了,你的設(shè)計(jì)就可以突破這個(gè)BOTTLE NECK.那什么是大的邏輯什么是小的邏輯,你可以看靜態(tài)時(shí)序報(bào)告,這玩藝你一定要懂,不然你做FPGA就是在玩,即使你的設(shè)計(jì)能跑起來(lái),那你也是玩起來(lái)的,而不是做起來(lái)的。

靜態(tài)時(shí)序報(bào)告會(huì)提示你那個(gè)PATH是延遲最大的,這個(gè)延遲就是你設(shè)計(jì)中制約你頻率的PATH,這個(gè)延時(shí)有兩個(gè)東西帶來(lái),邏輯延遲和布線延遲,邏輯延遲大的話,就切割邏輯為小的邏輯,現(xiàn)在FPGA基本上是一個(gè)4輸入SRAM,你的邏輯輸入就被當(dāng)作地址,而邏輯結(jié)果早就在FPGA配置后放在SRAM里面,這樣FPGA運(yùn)行的時(shí)候,根據(jù)不同的邏輯輸入,從SRAM中取得邏輯結(jié)果輸出,比如你的邏輯是Fout = f(x,y,z,t),那么x,y,z,t就是當(dāng)作了一個(gè)sram的地址,各種結(jié)果就放在sram的16個(gè)內(nèi)存中,根據(jù)不同的x,y,z,t來(lái)取出結(jié)果放在Fout上輸出,如果你的邏輯比較復(fù)雜,比如要5個(gè)輸入信號(hào)(超過(guò)了4個(gè))要在一個(gè)clk中完成,那你的邏輯一個(gè)sram一定完成不了,需要兩個(gè)sram,好,這就是一個(gè)大邏輯,你要切割它,所謂切割就是搞一個(gè)臨時(shí)中間變量,比如F= X + Y + Z,你可以分為兩步走:第一個(gè)CLK: TEMP = X + Y;第二個(gè)CLK: F = TEMP + Z。

簡(jiǎn)單的判斷你可以通過(guò)綜合結(jié)果也可以看到,比如在SYNPLIFYPRO里的TECKNOLOGUY OR RTL VIEWER看你的邏輯是不是在一個(gè)SRAM里,如果不在就是大邏輯了。另外一個(gè)就是布線延遲帶來(lái)的頻率BOTTLE NECK。這就需要用布局布線的TIME CONSTRAINTS來(lái)輔助你了。

2 TIME CONSTRAINTS:作IC的和作FPGA的什么區(qū)別:?CONSTRAINTS! 做IC你不但要寫RTL CODE,還要加面積CONSTRAINTS,時(shí)序CONSTRAINTS,功耗CONSTRAINTS。那你現(xiàn)在就可以明白了CONSTRAINTS有多重要,CONSTRAINTS得工具要看FPGA廠商的工具了,比如ISE QUANTUS。同時(shí)在寫RTL代碼的時(shí)候也要加CONSTRAINTS,因?yàn)樗苯記Q定你的網(wǎng)表的結(jié)構(gòu),如果你的RTL的約束寫的不好,比如一個(gè)狀態(tài)機(jī)有ONEHOT 或者 GRAY CODE風(fēng)格,你如果寫的是ONEHOT風(fēng)格,但是在CONSTRAINTS卻讓綜合期綜合為GRAY CODE風(fēng)格(現(xiàn)在的綜合器很智能,可以把你寫的風(fēng)格代碼綜合為你設(shè)定的CONSTRAINTS其他風(fēng)格),那你的網(wǎng)表就不一樣了,后邊的布局布線工具再努力也沒(méi)有用。

要加CONSTRAINTS,就要看FPGA廠商的CONSTRAINTS文件格式,比如UCF(ISE),QSF(ALTERA)。具體不談了,自己好好學(xué)習(xí),這個(gè)實(shí)在太多,比如你看一個(gè)邏輯的輸入源和輸出目的地太遠(yuǎn),帶來(lái)了很大布線延遲,那就把加CONSTRAINTS把他們盡量拉近,但是距離近不一定他們布線就近了,F(xiàn)PGA可能會(huì)在兩個(gè)很近的單元之間布很長(zhǎng)的線,你還要在CONSTRAINTS里告訴布局布線工具讓他們的的布線也很短,不推薦用手工拉線,這樣你以后的代碼就不能當(dāng)作IP給被人用了,而是要用CONSTRAINTS,這樣你以后寫好RTL代碼和CONSTRAINTS文件,就能當(dāng)作IP賣給客戶了,不然你就留著自己玩玩算了。CONSTRAINTS很多,不具體說(shuō)了,最重要的是PERIOD或者Fmax約束,分別對(duì)應(yīng)xilinx和altera,具體自己學(xué)習(xí),不多說(shuō)了,一般的應(yīng)用用這兩個(gè)CONSTRAINTS就可以了



關(guān)鍵詞: FPGA

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉