<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開(kāi)發(fā)基礎知識問(wèn)答

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

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

Q51、編譯ModelSim需要的Xilinx庫的操作

首先要將安裝的ModelSim目錄下的ModelSim.ini屬性設置為存檔類(lèi)型(去掉只讀)
然后從DOS界面到ISE安裝目錄binnt(如果在Windows的環(huán)境變量中已經(jīng)設置過(guò)Xilinx路徑,就不必了),
運行命令:(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 指定編譯庫輸出目錄
(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://dyxdggzs.com/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)的寫(xiě)法的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Q60、Xilinx軟件安裝事項

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

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

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

Q62:Toggle Path是什么意思?

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

Q63:iMPACT可不可以單獨裝?

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

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

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

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

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

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

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

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

Q64: 如何提高的運行速度?

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

靜態(tài)時(shí)序報告會(huì )提示你那個(gè)PATH是延遲最大的,這個(gè)延遲就是你設計中制約你頻率的PATH,這個(gè)延時(shí)有兩個(gè)東西帶來(lái),邏輯延遲和布線(xiàn)延遲,邏輯延遲大的話(huà),就切割邏輯為小的邏輯,現在FPGA基本上是一個(gè)4輸入SRAM,你的邏輯輸入就被當作地址,而邏輯結果早就在FPGA配置后放在SRAM里面,這樣FPGA運行的時(shí)候,根據不同的邏輯輸入,從SRAM中取得邏輯結果輸出,比如你的邏輯是Fout = f(x,y,z,t),那么x,y,z,t就是當作了一個(gè)sram的地址,各種結果就放在sram的16個(gè)內存中,根據不同的x,y,z,t來(lái)取出結果放在Fout上輸出,如果你的邏輯比較復雜,比如要5個(gè)輸入信號(超過(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ò)綜合結果也可以看到,比如在SYNPLIFYPRO里的TECKNOLOGUY OR RTL VIEWER看你的邏輯是不是在一個(gè)SRAM里,如果不在就是大邏輯了。另外一個(gè)就是布線(xiàn)延遲帶來(lái)的頻率BOTTLE NECK。這就需要用布局布線(xiàn)的TIME CONSTRAINTS來(lái)輔助你了。

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

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



關(guān)鍵詞: FPGA

評論


相關(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>