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