徹底掌握Quartus——基礎篇
你可以在EETOP的論壇上面搜索到quartus的下載鏈接,然后在百度能找到破解方法。
不建議用quartus13以前的版本(舊版帶的USB blaster驅動可能在WIN8、WIN10上面安裝不了),還有quartus13及以后的版本都把IDE和器件包分成兩部分,記得下載器件包。此外,quartus13.0sp1是最后一個支持cyclone II的版本。
接下來,介紹Quartus 13最基礎的日常使用方法。
如何新建工程就不說了,但是要注意,工程目錄和工程名不要有中文和空格,還有,要有一個設計文件(如,.v、.vhd、.bsf文件)的名稱要跟工程名一樣,不然會有警告。
一、新建工程,New個設計文件,會出現下圖所示。
上面那么多種文件有什么卵用?
1、AHDL文件,用於編寫Altera發明的AHDL語言,此語言已經被淘汰,可以不管它。
2、Block Diagram/Schematic文件,原理圖文件,跟AD、PADS、Cadence等電路圖設計軟件的用法差不多。
3、EDIF文件,網表文件。
4、Qsys system文件,用於設計軟核,Qsys前身是NIOS。
5、State Machine文件,狀態機文件。
6、System Verilog文件,用於系統級驗證。
7、Tcl script文件,TCL腳本文件。
8和9、常用的HDL文件(包括verilog和VHDL)
10是十六進制文件,11是MIF文件,用於ROM或RAM的初始化。
12、Probe文件,用於觀察FPGA內部某一信號,一般用Signaltap
13、 邏輯分析儀接口文件,暫時不知道有什么用。
14、VWF文件,用於調用quartus自帶的仿真工具QSIM
15、AHDL頭文件,可以不管它。
16、原理圖的Symbol文件,用於編輯原理圖Symbol,跟你用電路圖設計軟件時,畫原理圖庫差不多。
17、JTAG鏈描述文件,給一個或多個芯片下載代碼時用的。
18、Synopsys約束文件,時序約束用的SDC文件。
19、txt文件。
就算quartus支持那么多種文件,但常用的沒幾個,一般是原理圖.bdf文件或者純文本的.v或.vhd文件,就算后面需要用邏輯分析儀或者時序約束,也是可以用quartus自動給你生成的。
特別要注意一下,不同類型的文件,名字最好不一樣。比如,已經有了test.v,就不要用弄test.vwf,不然你雙擊test的原理圖Symbol的時候,會問你要打開test.v還是test.vwf,讓你浪費不必要時間。我一般是除了.v或.vhd文件用test之外,vwf就用test_vwf.vwf,bdf就用test_top.bdf。
二、如何把HDL文件,轉成原理圖Symbol
先選中你要轉的HDL文件。
白色襯底(左邊)是被選中的HDL文件,右邊是沒有選中的,然后在菜單欄File下面。
點Create Symbol Files for Current File,即可把HDL轉成原理圖Symbol了,然后新建一個.bdf的原理圖文件。
雙擊紅圈位置,在libraries->Project下,已經生成了原理圖Symbol了,點OK,可以調用了。(我的機子是高分屏,Symbol顯示有點問題,是quartus對高分屏支持得不好)。
如果你覺得原理圖的symbol不夠大,可以按住Ctrl鍵,滑動鼠標滾輪,可以使symbol放大/縮小。
再來對照一下,原理圖Symbol和.vhd文件的實體
entity bin2bcd is
port(
clk_50M : in std_logic;
add : in std_logic;
sub : in std_logic;
bcdout1 :out std_logic_vector(3 downto 0)
);
end bin2bcd;
這是一一對應,輸入在左,輸出在右,有多個輸入的時候,也會按順序排列,如果不方便連線,可以改一下引腳的順序,再保存,生成Symbol,再update。
右擊Symbol,就可以update了,update時,會出現下面的對話框。
懂點英語的,都能看懂上面三個選擇。1、只update選中的symbol,2、update所有關聯(名字一樣)的symbol,3、update全部symbol。一般選第一個。
quartus13有個bug,生成的symbol的實例名可能會重名,而報警告。這時,可以右擊symbol,選properties。
把上圖的inst改成其它名字就可以了。
三、在剛才調用symbol的位置,還可以調用其它IP核。
在Name下面輸入input,可以調用輸入端口,output就是輸出端口了,這些都是quartus自帶的一些symbol,把primitives下面的折疊全部打開,你會發現有很多東西,如:與或非門、各種觸發器等。當然,還有其它東西,自己去挖掘吧。特別要說明兩個symbol,VCC代表高電平,GND代表低電平,可用於使能或者其它用途。
也是在剛才那個對話框,下面有MegaWizard,用來調用quartus自帶的IP核,也叫宏功能模塊(LPM),有部分是免費,部分是收費,還有部分需要聯網下載的。
MegaWizard的使用方法也很簡單,寫上IP核的名字,一步步next到finish就可以了,調用也是在上面那個對話框里調用。
其中,原理圖symbol之間的連線要注意一下位寬,不然會出錯。也可以使用網絡標號,先把線引出來,選中線,再輸入網格標號就可以了,但是要注意一下格式,如:qout是8位,網絡標號就要寫成qout[7..0]。也有些特殊用法,如下圖所示:
這里,引出64位寬的fre信號,而在另一個symbol則只連了[63..32]這幾個腳,這是合法的,空出來的引腳,沒用的話,可以不管。
四、編寫好你的設計文件之后,就可以編譯(也可以叫綜合)了。因為綜合很慢,所以先分析一下設計文件有無語法錯誤之類的,再綜合。
綜合的時候,要注意,哪個是頂層文件。比如你弄一個流水燈,在led_top.bdf里面,有分頻模塊fre_div的symbol和流水燈控制模塊led_ctrl的symbol的話,那么led_top.bdf就是頂層文件,因為它調用了你所有的設計文件。你可以先選中led_top.bdf,再用快捷鍵Ctrl+Shift+J,把它設置為頂層文件,不然綜合出來有很多警告,甚至出錯。
上圖所示,藍圈就是分析設計文件了,而紅圈就是綜合。綜合之后,就會生成report,告訴你,你設計出來的電路占用哪些資源。
懂點英文和FPGA的內部結構的,都能看懂上圖。現在解釋一下:
1、電路占用了62個LE。
2、電路占用了43個組合電路。
3、電路占用了55個專用的寄存器。
4、整個電路占用了55個寄存器。
5、電路使用了31個引腳,我的FPGA是EP2C8Q208C8N,一共有208個引腳,其中138個引腳是可用的。
6、電路使用了0個虛擬引腳,虛擬引腳是前期設計時,預先分配的,可以解決引腳不夠用導致無法綜合的問題。
7、電路使用的內存為0 bit,這里memory是指FPGA內部的存儲單元,包括ROM和RAM,其中RAM指的是塊RAM而不是分布式RAM,因為分布式RAM是用LE實現的。
8、電路使用了0個PLL,我這芯片一共有2個PLL,PLL是固核(也可以認為是硬核,硬核和固核的分界線並不是很明確),可以配置一下就調用,某些FPGA會有4個或更多的PLL固核。
五、接下來看看,你綜合出來是個什么電路。在菜單欄的Tools下面,點擊查看RTL圖、狀態機圖(前提是綜合出來有狀態機)或者工藝映射表(Technology Map)
其中RTL圖和工藝映射表,都可以表示你設計出來的電路,區別在於,RTL圖抽象層次更高一些,而工藝映射表更接近於門級。
某些時候,RTL並不能完全表示出電路的正確性,因為綜合出來,有部分細節出錯,在RTL圖看不出來,這里得用工藝映射表。
六、用Assignment Editor鎖管腳。
在Value下面輸入23,就可以把clk鎖定在23號引腳了。如下圖所示。
七、鎖完之后,保存好,還要再綜合一次,這樣的綜合出來的電路才是你需要的。如果不想綜合兩次,那就要用TCL腳本來鎖管腳了。
新建一個TCL腳本文件。輸入如下代碼:
set_location_assignmentPIN_23 -to clk
這樣就可以把clk鎖定在23號引腳了。如果你的引腳是按鍵,就要加上拉電阻(不然會容易燒壞IO口),輸入如下代碼:
set_location_assignmentPIN_208 -to switch_input
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to switch_input
這樣就把switch_input這個鎖在208號引腳,同時給208號引腳加了上拉電阻。
保存好你的TCL腳本,然后在菜單欄的tools下,點TCL scripts,
點Run,運行一下你的TCL腳本。這樣,就只需要綜合一次了。
八、接好你的JTAG就可以用Programmer下載代碼了,由於此步驟太簡單了,省略。
其中sof文件,是直接JTAG下載的,斷電就沒了;pof文件是AS下載,斷電可保存。但是AS下載需要額外加點電路,而且對電路要求高,有點問題都無法下載,而且工業上的板子也只有JTAG下載口(節省PCB面積),這樣就得用JTAG間接下載,斷電可保存。
在菜單欄的file下,轉換編程文件:
選擇jic格式,配置芯片的型號(我這里是EPCQ16),然后改一下jic的名字,默認是output_file。
先設置一下flash loader(在Select Devices要選擇你所用的芯片系列,下圖為參考)。
再點一下SOF Data
然后add file,把你的SOF文件添加進去。
然后點generate即可生成jic文件。(你也把上面這些配置保存為.cof文件,以后可以重復使用)
最后在programmer,添加這個jic文件,就可以下載代碼了。下載完之后,FPGA並不直接運行代碼,需要先斷電,再上電,FPGA才正常工作。