FPGA開發(fā)板快速教程(二)
第一節(jié) FPGA的基本開發(fā)流程
PLD是可編程邏輯器件(Programable Logic Device)的簡稱,FPGA是現(xiàn)場可編程門陣列(Field Programable Gate Array)的簡稱,兩者的功能基本相同,只是實(shí)現(xiàn)原理略有不同,所以我們有時可以忽略這兩者的區(qū)別,統(tǒng)稱為可編程邏輯器件或PLD/FPGA。
PLD是電子設(shè)計領(lǐng)域中最具活力和發(fā)展前途的一項(xiàng)技術(shù),它的影響絲毫不亞于70年代單片機(jī)的發(fā)明和使用。
PLD能做什么呢?可以毫不夸張的講,PLD能完成任何數(shù)字器件的功能,上至高性能CPU,下至簡單的74電路,都可以用PLD來實(shí)現(xiàn)。PLD如同一張白紙或是一堆積木,工程師可以通過傳統(tǒng)的原理圖輸入法,或是硬件描述語言自由的設(shè)計一個數(shù)字系統(tǒng)。通過軟件仿真,我們可以事先驗(yàn)證設(shè)計的正確性。在PCB完成以后,還可以利用PLD的在線修改能力,隨時修改設(shè)計而不必改動硬件電路。使用PLD來開發(fā)數(shù)字電路,可以大大縮短設(shè)計時間,減少PCB面積,提高系統(tǒng)的可靠性。 PLD的這些優(yōu)點(diǎn)使得PLD技術(shù)在90年代以后得到飛速的發(fā)展,同時也大大推動了EDA軟件和硬件描述語言(HDL)的進(jìn)步。
如何使用PLD呢?其實(shí)PLD的使用很簡單,學(xué)習(xí)PLD比學(xué)習(xí)單片機(jī)要簡單的多,有數(shù)字電路基礎(chǔ),會使用計算機(jī),就可以進(jìn)行PLD的開發(fā)?! ?
開發(fā)PLD需要了解兩個部分:1.PLD開發(fā)軟件 2.PLD本身
由于PLD軟件已經(jīng)發(fā)展的相當(dāng)完善,用戶甚至可以不用詳細(xì)了解PLD的內(nèi)部結(jié)構(gòu),也可以用自己熟悉的方法:如原理圖輸入或HDL語言來完成相當(dāng)優(yōu)秀的PLD設(shè)計。所以對初學(xué)者,首先應(yīng)了解PLD開發(fā)軟件和開發(fā)流程。了解PLD的內(nèi)部結(jié)構(gòu),將有助于提高我們設(shè)計的效率和可靠性。
下面我們以基于Altera公司的QuantusII軟件來簡單說明一下FPGA的開發(fā)流程。
下圖是一個典型的基于QuantusII的FPGA開發(fā)流程。
(2)建立頂層圖??梢赃@樣理解,頂層圖是一個容器,將整個工程的各個模塊包容在里面,編譯的時候就將這些模塊整合在一起。也可以理解為它是一個大元件,包含各個模塊,編譯的時候就是生成一個這樣的大元件。
(3)采用ALTERA公司提供的LPM功能模塊。Q2軟件環(huán)境里包含了大量的常用功能模塊,例如計數(shù)器、累加器、比較器、譯碼器等等;如果不懂得在工程中采用這些現(xiàn)有的功能模塊真是太浪費(fèi)了。以本人的經(jīng)驗(yàn),一個設(shè)計中一般只有極少部分的模塊需要自己從零設(shè)計。
(4)自己建立功能模塊。當(dāng)然,有些設(shè)計中現(xiàn)有的模塊功能不能滿足具體設(shè)計的要求,那就只能自己設(shè)計啦。可以用硬件描述語言也可以用原理圖的輸入方法??梢园阉鼈儶?dú)立地當(dāng)作一個工程來設(shè)計,并生成模塊符號(Symbol),然后在頂層圖中使用這個模塊的符號,并將源文件(實(shí)現(xiàn)該模塊的原理圖或HDL文件)拷到頂層圖所在的工程目錄下。這個過程好比你要做一個電路,現(xiàn)在市面上沒有你想要的某個芯片,你就只能自己做一塊這樣的一塊芯片,然后添加到你的電路板上。
(5)將頂層圖的各個功能模塊用連線連起來。這個過程類似電路圖設(shè)計,把各個芯片連接起來,組成電路系統(tǒng)。
(6)系統(tǒng)的功能原理圖至此已經(jīng)基本出爐了,下一步要為該設(shè)計選擇芯片載體,才能真正在物理上實(shí)現(xiàn)系統(tǒng)的功能。這一步的主要工作是:(1)選擇芯片型號;(2)為頂層圖的各個輸入輸出信號分配芯片的管腳;(3)設(shè)置編譯選項(xiàng),目的是讓編譯器知道更多的信息。
(7)編譯。這個過程類似軟件開發(fā)里的編譯,但實(shí)際上這個過程比軟件的編譯要復(fù)雜得多,因?yàn)樗吘棺罱K要實(shí)現(xiàn)硬件里的物理結(jié)構(gòu),包含了優(yōu)化邏輯的組合、綜合邏輯以及布線等步驟。在類似Q2這樣的集成環(huán)境里面,這些過程都可以一氣呵成,集成環(huán)境幫你自動完成了幾個步驟的工作。當(dāng)然,你也可以用其它工具來實(shí)現(xiàn)各個步驟的工作,這些內(nèi)容超出了本教程陳述的范圍。
(8)編譯后會生成*.sof或*.pof文件,前者可以通過JTAG下載到FPGA內(nèi)部,設(shè)計無誤的話即能實(shí)現(xiàn)預(yù)期的功能,但斷電后FPGA里的這些信息會丟失;后者可以下載到FPGA的配置芯片(EEPROM或FLASH芯片),掉電后這些配置信息不會丟失,重新上電以后通過該配置芯片對FPGA的內(nèi)部RAM進(jìn)行配置。
(9)對于復(fù)雜的設(shè)計,工程編譯了以后可以采用Q2的仿真功能或其它仿真軟件(如ModelSim)對設(shè)計反復(fù)進(jìn)行仿真和驗(yàn)證,直到滿足要求。
第二節(jié) 基于QuartusII的實(shí)例
實(shí)驗(yàn)一 實(shí)驗(yàn)板上的KEY1按鈕控制FPGA核心板上的第一個LED燈。
本實(shí)驗(yàn)比較簡單,使用本站FPGA開發(fā)板或者CPLD開發(fā)板以及其它FPGA開發(fā)板都可進(jìn)行實(shí)驗(yàn)。
目的:通過該實(shí)例學(xué)習(xí),可以了解FPGA的基本開發(fā)流程,熟識quartusII軟件基本功能的使用。
原理:利用一個常開按鈕(實(shí)驗(yàn)板上的KEY1)作為輸入(常開時輸入1,閉合時輸入0),經(jīng)過一個反相器后輸出到核心板的第一個LED。KEY1常開時,LED亮,按下(閉合)實(shí)驗(yàn)板上的KEY1,該LED熄滅。
1. 建立工程
運(yùn)行QuatrusII軟件(以下簡稱Q2),建立工程,F(xiàn)ileàNew Project Wizad如
2. 建立頂層圖
執(zhí)行FileàNew,彈出新建文件對話框:
3. 添加邏輯元件(Symbol)
雙擊頂層圖圖紙的空白處,彈出添加元件的對話筐:
在圖紙上分別添加非門(not)、輸入(input)、輸出(output)三個symbol,如圖所示:
為芯片分配管腳可以用QuartusII軟件里的“AssignmentsàPins”菜單,也可以用tcl腳本文件。用Tcl文件進(jìn)行配置可重用性好,易于管理,因此本文介紹用tcl的方法。對于另一種方法,可以參考QuartusII軟件的幫助文檔。
在工程目錄下建立一個name為Setup.tcl的file。FileàNew,選擇other files頁面:
對應(yīng)于EP1C6 FPGA開發(fā)板,EP1C12 FPGA開發(fā)板:
#Setup.tcl
# Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS AS INPUT TRI-STATED
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_1 -to led1
set_location_assignment PIN_122 -to key1
保存到工程目錄下,并注意在保存對話框選上“Add file to current project”選項(xiàng)。然后打開Tools -> Tcl Scripts,選中剛才編輯的Script文件:Setup,并點(diǎn)擊Run,如下圖:
如果是:
C:alteraquartus51my q2projectsFPGA_led_test
在該目錄下運(yùn)行工程里的setup.tcl就會出錯。
如果使用Tools -> Tcl Scripts 后沒有彈出“tcl Script”對話框可以試一下關(guān)了QII,再重新打開。使用TCL文件分配管腳是很方便的,用戶可以直接從相關(guān)例子工程中復(fù)制需要管腳分配表到自己的工程中,省時又方便。
評論