加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1、設(shè)計(jì)前準(zhǔn)備
    • 2、建立工程
    • 3輸入設(shè)計(jì)
    • 4、綜合和分析
    • 5、RTL仿真??
    • 6、鎖定管腳
    • 7、布局布線
    • 8、時(shí)序仿真
    • 9、生成配置文件并下載
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

FPGA零基礎(chǔ)學(xué)習(xí)精選:Intel FPGA 開發(fā)流程(超詳細(xì))

10/10 14:50
817
閱讀需 52 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

作者:郝旭帥??校對:陸輝

大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。

大俠好,歡迎來到FPGA技術(shù)江湖。本次帶來FPGA系統(tǒng)性學(xué)習(xí)系列,今天開始正式更新,之前更新過類似的郝旭帥FPGA零基礎(chǔ)學(xué)習(xí)系列,由于時(shí)間久遠(yuǎn),之前的系列所用開發(fā)操作軟件、硬件設(shè)備及所涉及知識維度都有待更新及完善。

本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會。

系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。后續(xù)會陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)FPGA設(shè)計(jì)方法及設(shè)計(jì)思想的同時(shí),實(shí)操結(jié)合各類操作軟件,會讓你在技術(shù)學(xué)習(xí)道路上無比的順暢,告別技術(shù)學(xué)習(xí)小BUG卡破腦殼,告別目前忽悠性的培訓(xùn)誘導(dǎo),真正的去學(xué)習(xí)去實(shí)戰(zhàn)應(yīng)用,這種快樂試試你就會懂的。話不多說,上貨。

本篇將設(shè)計(jì)一個(gè)簡單的二輸入與門,來講解整個(gè)設(shè)計(jì)流程。至于設(shè)計(jì)語言就不在單獨(dú)列出一個(gè)章節(jié)去做特殊說明,語法、操作、實(shí)驗(yàn)將同時(shí)講解,這樣更具有帶入性,便于讀者閱讀和學(xué)習(xí)。

1、設(shè)計(jì)前準(zhǔn)備

在設(shè)計(jì)之前我們需要在兩個(gè)方面進(jìn)行準(zhǔn)備:硬件方面和軟件方面。

硬件方面

開發(fā)FPGA設(shè)計(jì),最終的產(chǎn)品是要落在使用FPGA芯片完成某種功能。所以我們首先需要一個(gè)帶有Intel FPGA芯片的開發(fā)板。

本文中設(shè)計(jì)將采用CYCLONE系列FPGA進(jìn)行講解,如果讀者有其他系列(必須是Intel FPGA,否則無法在Quartus上開發(fā)),也可以進(jìn)行學(xué)習(xí),不同系列的開發(fā)流程基本相同。

軟件方面?

我們需要綜合工具-quartus 軟件和仿真工具-modelsim軟件。正確安裝這兩個(gè)軟件是開發(fā)Intel FPGA的必要條件。

圖1 :Quartus 軟件圖標(biāo)

按照《quaruts prime 18.0標(biāo)準(zhǔn)版安裝與破解-郝旭帥團(tuán)隊(duì)V1》的方式安裝,Modelsim軟件的圖標(biāo)將不會出現(xiàn)在桌面上。并不是沒有安裝上,而是此時(shí)Quartus軟件認(rèn)為Modelsim軟件只是它的一個(gè)小程序包而已,所以就沒有體現(xiàn)單獨(dú)的軟件圖標(biāo)。

當(dāng)準(zhǔn)備好軟件后,筆者向大家推薦一個(gè)工程管理的方式,也是本文中做工程管理的方式,這樣會比較清楚。

做設(shè)計(jì)的話,會編寫很多設(shè)計(jì)文件、仿真文件以及綜合器會給我輸出很多的過程文件等等,那么這些文件最好都能有自己的一個(gè)“歸宿”,不要亂放。

路徑和命名中不允許出現(xiàn)非法字符(合法字符包括:數(shù)字、字母、下劃線。特別說明:空格是非法的),筆者建議以字母開頭。

我們是做FPGA開發(fā)設(shè)計(jì)的,首先我們將建立一個(gè)文件夾,專門用來放FPGA開發(fā)設(shè)計(jì)。例如:E:/fpga_design。

在后續(xù)的開發(fā)設(shè)計(jì)中,我們會做各種各樣的設(shè)計(jì)。每個(gè)設(shè)計(jì)都有自己的名字,在上述文件內(nèi),用實(shí)驗(yàn)的名字命名一個(gè)文件夾。名字的話一定要帶有某種含義,不建議隨便給個(gè)字母序列當(dāng)做名字。例如:第一個(gè)要做的二輸入與門的設(shè)計(jì),命名為and_gate2_1。

在建立完某項(xiàng)設(shè)計(jì)的文件后,依次在其里面新建四個(gè)文件夾,分別為:rtl、qprj、msim、doc。

圖 2 :工程管理文件脈絡(luò)示意圖

rtl文件夾用于存放設(shè)計(jì)的源文件。

doc文件夾用于存放設(shè)計(jì)的一些文檔性的資料。

qprj文件夾用于存放quaruts 工程以及quartus生成的一些過程性文件。

msim文件夾用于存放仿真文件。

在 FPGA 設(shè)計(jì)時(shí),主要是這四個(gè)文件的使用。某些時(shí)候我們也會新加一些文件,例如:FPGA板卡需要我們設(shè)計(jì)自己時(shí),就會多一個(gè)文件夾PCB,用于存放PCB相關(guān)的工程或者源文件等。

2、建立工程

做好設(shè)計(jì)前準(zhǔn)備后,就可以開始建立quartus 工程了。

在做設(shè)計(jì)時(shí),都是以工程為主體的設(shè)計(jì)。在沒有工程的情況下,利用quartus軟件打開設(shè)計(jì)源文件等,也是不支持編譯和綜合的。

雙擊quartus 軟件的圖標(biāo)(圖4-1),打開quartus軟件。在有的電腦上,軟件啟動(dòng)的速度不是很快(在確保自己已經(jīng)雙擊打開的前提下,可以等待1分鐘),不要多次去雙擊圖標(biāo),容易造成PC卡死或者啟動(dòng)了很多個(gè)quartus軟件。

圖3 :quartus 18.0界面

筆者這里不對每個(gè)界面進(jìn)行單獨(dú)介紹,后續(xù)用到那個(gè)功能或者界面時(shí),會單獨(dú)介紹說明。

點(diǎn)擊左上角File,選擇New Project Wizard…。

4 :打開新工程創(chuàng)建向?qū)?/strong>

打開新工程向?qū)В紫瘸霈F(xiàn)一個(gè)工程向?qū)Ы榻B說明。

圖5 :工程向?qū)У慕榻B界面

在工程向?qū)е校覀儠付üこ堂Q和位置,頂層實(shí)體的名稱,工程文件和庫文件,目標(biāo)器件,EDA工具。

在復(fù)雜設(shè)計(jì)時(shí),會將電路分成各個(gè)小模塊去做設(shè)計(jì),最終還需要一個(gè)大模塊將這些小模塊包括進(jìn)來,對外呈現(xiàn)都是大模塊的接口。此時(shí),這個(gè)大模塊就是頂層實(shí)體(TOP level entity)。如果設(shè)計(jì)中只有一個(gè)模塊,那么這個(gè)模塊就是頂層實(shí)體。

點(diǎn)擊Next。

圖6 :指定工程位置、工程名稱和頂層實(shí)體的界面

將工程的位置指定到之前我們準(zhǔn)備好的文件夾(qprj)中。點(diǎn)擊編輯框后面的三個(gè)小點(diǎn),進(jìn)行文件搜索指定。

工程的名稱就是采用之前我們做的設(shè)計(jì)文件夾的名字,這個(gè)名字可以是任意的,筆者建議和文件夾保持一致,因?yàn)楫?dāng)初建立文件夾時(shí),就是選擇用工程的名字。直接輸入工程名稱and_gate2_1即可。

頂層實(shí)體的名字會自動(dòng)出現(xiàn),與工程的名字保持一致。我們也可以重新指定一個(gè)新名字,筆者建議與工程名字保持一致。

點(diǎn)擊Next。

圖7 :選擇建立的工程的類型

選擇空白工程(默認(rèn)空白工程),點(diǎn)擊Next。

圖8 :添加文件

建立工程時(shí),我們可以直接向工程中添加已有的文件。一般我們選擇什么都不添加,后續(xù)設(shè)計(jì)中,如果有提前做好的文件,也是選擇什么都不添加。建立完工程后,依然可以向工程添加文件。

點(diǎn)擊Next。

圖9 :選擇目標(biāo)器件

FPGA設(shè)計(jì)最終是要落實(shí)到芯片內(nèi)部,在這里要選擇對應(yīng)的芯片(自己手里開發(fā)板的FPGA芯片)。芯片的型號在FPAG的芯片上有描述,如果芯片上看不清楚,或者芯片在被其他東西擋住,可以查看開發(fā)板的資料,一般都有介紹。筆者手中開發(fā)板的FPGA的型號為EP4CE10F17C8N。后續(xù)所有的選擇將按照筆者手中的型號進(jìn)行設(shè)計(jì)和選擇,讀者不相同的,請自行改動(dòng)。如果暫時(shí)還沒有開發(fā)板的讀者,可以跟著筆者選擇繼續(xù)下面的步驟(沒有開發(fā)板的話,后面有一些步驟是做不了的)。

選擇時(shí),首先選擇對應(yīng)的系列。

圖10 :選擇芯片所對應(yīng)的系列

選擇對應(yīng)的系列后,可以看到下面的器件列表(此列表的窗口是可以拉大的,可以直接擴(kuò)大整個(gè)界面)中,就出現(xiàn)很多的器件。呈現(xiàn)的器件都是按照一定的規(guī)律進(jìn)行排列的,可以很快的找到自己的芯片,然后單擊選擇芯片(先不考慮為什么沒有EP4CE10F17C8N,而選擇EP4CE10F17C8)。

圖11 :器件列表

如果每次新建工程都是這樣去尋找芯片的話,是有一定的累人。好在這個(gè)軟件給我們提供了篩選面板,我們可以把篩選條件輸入進(jìn)去。

圖12 :器件篩選

? ?設(shè)置好篩選條件后,器件列表中就只有四個(gè)器件了,很容易就可以找到我們這款芯片。

篩選條件中有封裝類型、管腳數(shù)目和速度等級。那么我們怎么知道自己手中的芯片的這些信息呢?

答案都隱藏在芯片的名字中。筆者手中的是CYCLONE IV系列的片子,下面就介紹一下這個(gè)系列的命名方式。

圖13 :CYCLONE IV E系列命名規(guī)則

如果是其他系列,請自行參考所對應(yīng)的芯片手冊。

通過觀察圖4-13,EP4CE10F17C8N中末位N,只是表示無鉛封裝,和具體內(nèi)部機(jī)構(gòu)沒有任何關(guān)系。故而選擇不帶N的,也是可以的。

注意無論是哪種方法,最后找到自己想要的芯片后,一定要點(diǎn)擊它,選中它。

點(diǎn)擊Next。

圖14 :選擇EDA工具

Quartus軟件是一個(gè)綜合工具,他可以關(guān)聯(lián)一些其他的工具協(xié)助設(shè)計(jì)FPGA。在這里我們在simulation一欄,工具選擇modelsim-altera,格式選擇verilog HDL。其他保持默認(rèn)。

點(diǎn)擊Next。

圖15 :工程向?qū)渲每偨Y(jié)

這個(gè)總結(jié)顯示出在新工程向?qū)е?,我們所做的所有的設(shè)置。大家可以檢查一下,如果發(fā)現(xiàn)那一項(xiàng)和自己的要求不一致,就需要點(diǎn)擊back,修改后,在回到此步驟。

點(diǎn)擊Finsh,完成工程創(chuàng)建。

圖16 :工程建立完成后,工程向?qū)Ы缑?/strong>

工程建立完成后,工程向?qū)Ы缑骘@示出選擇的器件和指定的頂層實(shí)體。

打開qprj文件夾。

圖17 :建立完工程后的qprj文件夾

db文件夾為基礎(chǔ)數(shù)據(jù)文件夾。

.qpf為quartus project file,quartus 工程文件。如果此時(shí)將quatus關(guān)閉了,雙擊此文件就可以打開工程。

.qsf為quartus settings file,quartus 設(shè)置文件。在quaruts里面做的大部分操作都會記錄到此文件中。

Quarus 的版本很多,如果用一個(gè)版本建立的工程,用另外一個(gè)版本打開可能會出一些bug,所以建議采用使用已建好工程的版本打開。可以使用記事本的方式打開.qsf。

圖18 :qsf文件的一部分

通過查看.qsf文件,可以了解到工程的最初用什么版本建立,最后用什么版本打開(打開時(shí),建議采用最后的版本打開)。

打開工程的方式,不建議采用雙擊.qpf文件。有時(shí)間一個(gè)PC上面,會有多個(gè)quaruts軟件的情況,如果直接雙擊,就會采用某一個(gè)版本打開,這不一定是我們想要的。

建議打開工程的方式,首先查看應(yīng)該選擇的版本,啟動(dòng)對應(yīng)的版本quartus軟件,點(diǎn)擊File,選擇Open project(不要點(diǎn)擊Open),找到工程,啟動(dòng)。

圖19 :打開工程的途徑

3輸入設(shè)計(jì)

當(dāng)建立完工程后,就可以輸入設(shè)計(jì)。輸入設(shè)計(jì)的方法有三種:原理圖輸入、HDL代碼輸入、原理圖和HDL代碼混入輸入。

原理圖輸入

原理圖輸入就是以現(xiàn)有模塊級聯(lián)的方式實(shí)現(xiàn)功能。

點(diǎn)擊File,選擇New。

圖20 :新建模塊

?選擇design file中的Block Diagram/Schematic File。點(diǎn)擊ok。

圖21 :新建文件列表

對于新建的bdf文件立刻進(jìn)行另存為。

圖22 :另存為

另存為到qprj文件夾。Bdf文件是只有quartus軟件才能認(rèn)可,不具有移植性,把它放到工程文件夾中。

圖23 :保存路徑和名稱

點(diǎn)擊保存。特別注意保存路徑和保存名稱。不要盲目直接點(diǎn)擊保存,一定要再三確認(rèn)。

在BDF文件的空白位置,雙擊,打開添加原件的窗口。

圖24 :打開添加原件的窗口

在libraries中,選擇and2,點(diǎn)擊ok。

圖25 :添加二輸入與門

鼠標(biāo)會拖動(dòng)一個(gè)二輸入與門的符號,此時(shí)點(diǎn)擊鼠標(biāo)左鍵,一個(gè)二輸入的與門就放置在文件中了。

圖26 :放置的二輸入與門

當(dāng)添加完二輸入與門后,也就意味著芯片內(nèi)部的設(shè)計(jì)完成?,F(xiàn)在需要將內(nèi)部設(shè)計(jì)與外部相連接。芯片與外界相連接靠的是IO。

雙擊空白處,選擇input(輸入),點(diǎn)擊ok。添加輸入IO。

圖27 :添加input管腳

二輸入與門,要有兩個(gè)輸入。同樣的方法,再次添加一個(gè)。同時(shí)也要有一個(gè)輸出,選擇output(輸出)(在input下面),添加一個(gè)輸出。

圖28 :添加兩個(gè)輸入和一個(gè)輸出

將管腳和二輸入與門進(jìn)行相連接。

把鼠標(biāo)移至需要連接線的地方時(shí),鼠標(biāo)會自動(dòng)變?yōu)槭譅睿ú皇鞘譅罴^),并且右下帶有一個(gè)“7”形的導(dǎo)管。然后按住鼠標(biāo)左鍵進(jìn)行導(dǎo)線的引出。當(dāng)連接到另外一個(gè)接口時(shí),

就會出現(xiàn)一個(gè)小方框,證明已經(jīng)連接上,此時(shí)釋放鼠標(biāo)左鍵即可。

圖29 :連接完成圖樣

此時(shí)默認(rèn)兩個(gè)輸入的管腳的名字為pin_name1和pin_name2。在設(shè)計(jì)時(shí),二輸入與門我們將其輸入命名為一個(gè)為A,一個(gè)為B,輸出為Y。

右擊pin_name1,選擇properties。

圖30 :選擇屬性

將pin name改為A。點(diǎn)擊ok。

圖31 :修改管腳名稱

將其他兩個(gè)管腳也做對應(yīng)修改。

圖32 :修改完管腳名稱的圖樣

此時(shí)點(diǎn)擊保存(ctrl + s),使用原理圖的輸入方式就完成了。

HDL代碼輸入

計(jì)算機(jī)語言設(shè)計(jì)一個(gè)數(shù)字電路系統(tǒng),其實(shí)質(zhì)就是用一種語言描述一個(gè)硬件模型,因此這樣的語言又稱為硬件描述語言(Hardware Description Language),或使用縮寫HDL。雖然現(xiàn)在HDL已經(jīng)有多種語言版本,而且還在發(fā)展中。但是在本書討論的HDL僅包括現(xiàn)在最常使用的Verilog HDL和VHDL兩種語言系統(tǒng)。

目前在國內(nèi)做FPGA設(shè)計(jì)的公司中,使用Verilog HDL占據(jù)大多數(shù),故而本書以Verilog HDL為主,在后續(xù)的章節(jié)中,專門設(shè)置一章來講解VHDL。

選擇File,New,選擇design file中的verilog HDL file。點(diǎn)擊ok。

圖33 :新建verilog HDL file

新建完成后,立刻另存為,保存到rtl中。hdl文件的移植性比較高,無論在哪個(gè)平臺都是通用的。

圖34 :保存verilog HDL文件

保存時(shí),注意名字和保存路徑。Verilog文件的后綴為.v。

建立完,verilog HDL文件后,就需要輸入二輸入與門所對應(yīng)的verilog代碼了。

Verilog 語法和C很相似,學(xué)習(xí)起來比較容易。下面我們按照做電路的方式講解verilog語言。

做電路的話,首先需要拿出一塊打的面包板,剪出合適大小的一塊。相當(dāng)于圈了一個(gè)地方,做設(shè)計(jì)只能在這塊區(qū)域內(nèi)。

對于verilog語言來說,需要用module和endmodule圈出一個(gè)區(qū)域,設(shè)計(jì)代碼只能在這塊區(qū)域中。Verilog語言區(qū)分大小寫,我們一律采用小寫。module和endmodule是verilog的關(guān)鍵字,在綜合器中會變藍(lán)。如果endmodule沒有變藍(lán),請多打一個(gè)回車或者空格。

圖35 :verilog第一步

當(dāng)剪出合適大小的面包板后,需要其上面寫一個(gè)名字。后面應(yīng)用也好,說起來也好,好歹有個(gè)名字。

在verilog中,也需要有一個(gè)module name。

在verilog中命名的話,需要遵從一定的規(guī)則。由字母、數(shù)字、下劃線構(gòu)成;建議字母開頭;不能夠與verilog的關(guān)鍵字相同;命名是要有一定的意義。

對于module name來說,一般還有一個(gè)要求,與文件名稱保持一致。那么此時(shí)我們要做二輸入與門,文件名稱是and_gate2_1。要求module name也寫成and_gate2_1。

圖36 :verilog第二步

當(dāng)對面包板命名后,需要給它添加輸入和輸出的端口(合理的布局接口)。

二輸入與門有兩個(gè)輸入,一個(gè)為A,另外一個(gè)為B;一個(gè)輸出為Y。在verilog中,布置接口的方式有兩種。

圖37 :布置接口的第一種方式

圖38 :布置接口的第二種方式

在verilog中,module name(and_gate2_1)之后的那個(gè)括號中的內(nèi)容成為端口列表。

Verilog布置接口的第一種方式為1995標(biāo)準(zhǔn),第二種方式為2003標(biāo)準(zhǔn)。目前大多數(shù)平臺都可以支持這兩種方式。筆者建議用2003標(biāo)準(zhǔn)。

端口列表中,描述端口時(shí),用逗號隔開,最后一個(gè)端口后面不加逗號。在端口列表的括號后面有一個(gè)分號。

對于描述端口來說,有最基本的四項(xiàng):方向、類型、位寬、名稱。

input表示輸入,output表示輸出,inout表示輸入輸出。

類型中比較常用的有兩種:一種是wire,另外一種reg。wire類型時(shí),wire可以省略不寫。另外input必須是wire類型。筆者建議wire不省略,都寫上。

在做電路時(shí),位寬表示有幾根線。有時(shí)候?yàn)榱朔奖?,會將同一種類的線進(jìn)行同時(shí)命名,此時(shí)就需要用到位寬。例如:5位的地址線。可以單獨(dú)命名5次,但是比較麻煩。位寬用中括號括起來,例:[3:0],[3:1],[2:5]。如果位寬為1的話,省略不寫。筆者建議位寬的右側(cè)為0,左側(cè)為位寬減一。

名稱就是為這個(gè)輸入命名了一個(gè)名字。命名時(shí)要遵從verilog命名規(guī)則。

在做完端口后,需要在面包板上做出符合功能的設(shè)計(jì),然后用連接線將設(shè)計(jì)和輸入輸出管腳相連接。

二輸入與門的設(shè)計(jì)是需要在中間放一個(gè)組合邏輯電路二輸入與門。

Verilog中,描述組合邏輯的第一種方式是利用assign語句進(jìn)行描述。

圖39 :assign語句描述二輸入與門

assign語句要求被賦值變量(Y)為wire類型,中間采用阻塞賦值(=)的方式,最后面是賦值表達(dá)式,在verilog中,算術(shù)與用&來表示(后續(xù)介紹算術(shù)運(yùn)算和邏輯運(yùn)算的區(qū)別)。

至此,二輸入與門的HDL輸入就完成了。

原理圖和HDL代碼混入輸入

在復(fù)雜設(shè)計(jì)時(shí),我們可以用HDL代碼生成底層模塊,用原理圖的方式,將底層模塊進(jìn)行連接。此方式在后續(xù)的章節(jié)中介紹。

4、綜合和分析

當(dāng)設(shè)計(jì)輸入完成后,需要對設(shè)計(jì)進(jìn)行綜合分析,同時(shí)也檢查一下其中是否存在錯(cuò)誤。可以單擊綜合分析按鈕,可以雙擊綜合分析選項(xiàng),也可以利用快捷鍵(Ctrl + K)。

圖40 :綜合分析按鈕

圖41 :綜合分析選項(xiàng)

進(jìn)行綜合分析時(shí),有時(shí)會提出一個(gè)提示:

圖42 :某文件被改變,是否要保存

出現(xiàn)上述提示,就證明我們在設(shè)計(jì)時(shí),修改了某些文件后,沒有點(diǎn)擊保存。此時(shí)點(diǎn)擊Yes即可。但是這是一個(gè)非常不好的習(xí)慣,建議大家修改完任何設(shè)計(jì)都要及時(shí)保存。

圖43 :Task的綜合分析前面的進(jìn)度條和后面的已用時(shí)間

經(jīng)過一段時(shí)間后,會出現(xiàn)錯(cuò)誤。

圖44 :出現(xiàn)錯(cuò)誤

出現(xiàn)錯(cuò)誤后,可以觀察quartus 的下部massage窗口。

圖45 :massages窗口報(bào)錯(cuò)信息

報(bào)錯(cuò)信息為:錯(cuò)誤(12049):無法將實(shí)體“and_gate2_1”的重復(fù)聲明編譯到庫“work”中。報(bào)錯(cuò)的原因是我們在本工程中聲明了多個(gè)and_gate2_1,在電路中是不允許出現(xiàn)多個(gè)電路模塊是同樣的名字。

在設(shè)計(jì)時(shí),為了演示原理圖輸入和HDL代碼輸入,工程中存在原理圖輸入的and_gate2_1和HDL代碼輸入的and_gate2_1。

在工程向?qū)Ы缑?,選擇Hierarchy,選擇Files。Hierarchy為結(jié)構(gòu),顯示工程的電路模塊的結(jié)構(gòu);Files為文件,顯示工程中存放的所有文件??梢岳么朔绞讲榭?,工程中是否存在多個(gè)and_gate2_1。

圖46 :選擇Files界面

在Files界面中,可以發(fā)現(xiàn)工程中確實(shí)存在兩個(gè)and_gate2_1。

圖47 :Files界面

此時(shí)右鍵選擇第and_gate2_1.v,選擇Remove file from project。

圖48 :選擇移除

隨后在確定界面點(diǎn)擊Yes。

圖49 :確認(rèn)移除

將其移除工程后,就會只剩下一個(gè)原理圖輸入的and_gate2_1。然后進(jìn)行綜合分析,等待結(jié)果完成。

圖50 :綜合分析成功

如果中間有錯(cuò)誤的話,請參考輸入設(shè)計(jì)中的原理圖輸入,查看自己的步驟是否正確。

再一次選擇到Files界面,將and_gate2_1.bdf移除。將HDL代碼輸入的and_gate2_1.v

重新添加回來。在Files上右鍵,選擇Add/Remove Files in project(添加或移除文件)。

圖51 :從工程中添加或移除文件

選擇編輯框后面三個(gè)點(diǎn)。

圖52 :尋找添加文件

找到and_gate2_1.v,選中,點(diǎn)擊打開。

圖53 :添加選中文件

注意添加文件的路徑,and_gate2_1.v是存放在rtl文件夾中。

然后點(diǎn)擊apply,OK。就添加成功。

圖54 :確認(rèn)添加文件

點(diǎn)擊綜合分析,確認(rèn)綜合分析成功。如果綜合分析失敗,請參考輸入設(shè)計(jì)中的HDL輸入,查找錯(cuò)誤的地方。

無論是哪一種輸入方式,綜合分析成功。雙擊RTL視圖選項(xiàng),打開RTL視圖,查看quartus綜合出的電路模型。

圖55 :RTL視圖的選項(xiàng)

在RTL視圖中,綜合出來的電路圖,只是電路模型而已。在FPGA中是沒有與門的,有的只是LUT等效的二輸入與門電路

圖56 :RTL視圖的二輸入與門

綜合分析成功后,會產(chǎn)生一個(gè)報(bào)告。

圖57 :綜合分析報(bào)告

在報(bào)告中,可以看出綜合狀態(tài)、軟件信息、工程版本信息、頂層實(shí)體、器件系列、目標(biāo)器件、時(shí)序模型、邏輯單元數(shù)量、寄存器數(shù)量、管腳數(shù)量、虛擬管腳數(shù)量、存儲器大小、嵌入式乘法器的使用個(gè)數(shù)、鎖相環(huán)使用個(gè)數(shù)。

只是設(shè)計(jì)了一個(gè)二輸入的與門,所以使用一個(gè)邏輯單元,3個(gè)管腳,其他都沒有涉及到。

5、RTL仿真??

在綜合分析完成后,對于簡單的設(shè)計(jì),通過查看RTL視圖中綜合出來的電路模型,就能夠知道所做設(shè)計(jì)是否正確。但是對于復(fù)雜的設(shè)計(jì),電路模型比較復(fù)雜,無法直接判斷是否設(shè)計(jì)正確。

如果直接將不知道正確與否的設(shè)計(jì)加載到板卡中,很多時(shí)候無法通過結(jié)果直接看出來是否設(shè)計(jì)比較嚴(yán)謹(jǐn)。所以要求設(shè)計(jì)者在軟件環(huán)境下對所做設(shè)計(jì)進(jìn)行一定的測試。

仿真是利用模型復(fù)現(xiàn)實(shí)際系統(tǒng)中發(fā)生的本質(zhì)過程,并通過對系統(tǒng)模型的實(shí)驗(yàn)來研究存在的或設(shè)計(jì)中的系統(tǒng)。

當(dāng)所研究的系統(tǒng)造價(jià)昂貴、實(shí)驗(yàn)的危害性大或需要很長的時(shí)間才能了解系統(tǒng)參數(shù)變化所引起的后果時(shí),仿真是一種特別有效的研究手段。

仿真其實(shí)就是模擬實(shí)際情況。對于電路來說,就是給予合適的輸入,觀測輸出是否和設(shè)計(jì)時(shí)所預(yù)想的相同。

圖58 :仿真的示意圖

電路的輸入、中間過程和輸出,都是數(shù)字信號,用波形來表示比較直觀。

在真正的電路中,是存在電路延遲的。在仿真時(shí),如果加載的綜合出來的電路模型,那么此時(shí)驗(yàn)證的內(nèi)容主要是測試模型的邏輯功能是否正確,不考慮延時(shí)信息。這種仿真被稱為功能仿真、RTL仿真、前仿真、前仿。

仿真的途徑有兩個(gè),一個(gè)是quaruts 自帶的仿真環(huán)境,一個(gè)是modelsim的仿真環(huán)境。

Quartus 自帶的仿真環(huán)境

點(diǎn)擊File,New,選擇Uiversity Program VWF。

圖59 :新建VWF文件

 

點(diǎn)擊OK。

圖60 :VWF初始化界面

在“空白位置”雙擊。

圖61 :插入節(jié)點(diǎn)或者總線

點(diǎn)擊“節(jié)點(diǎn)查找”。

圖62 :節(jié)點(diǎn)查找

點(diǎn)擊“l(fā)ist”。在“filter”中,默認(rèn)選擇的是“Pins:all”,當(dāng)點(diǎn)擊“List”后,“Nodes Found”的界面中會出現(xiàn)所有的端口。

圖63 :查找需要激勵(lì)和觀測的信號

選中所有的端口,點(diǎn)擊“>>”,全部添加到“Selected Nodes”中。

圖64 :選擇觀測和激勵(lì)信號

點(diǎn)擊“OK”。

圖65 :確定選擇的信號

點(diǎn)擊“OK”。

圖66 :選擇信號完成

A端口和B端口是二輸入與門的兩個(gè)輸入,只要給A、B兩個(gè)端口加載上合適的信號,觀測Y端口的輸出是否正確即可。

A端口和B端口一共只有四種情況“00”、“01”、“10”和“11”,只要將四種情況全部加載一遍即可。

利用鼠標(biāo)左鍵,選中A端口信號一段或者B端口信號一段,利用上方的置1或者置0按鈕,將輸入信號做成下圖所示:

圖67 :設(shè)置輸入信號

設(shè)置好輸入信號后,點(diǎn)擊保存,將其保存到qprj文件中。雖然其為仿真文件,但是此文件依然只是quartus軟件能識別,可移植性太差。

點(diǎn)擊Simulation -> Run Functional Simulation(運(yùn)行功能仿真)。

圖68 :選擇運(yùn)行功能仿真

經(jīng)過一段時(shí)間的運(yùn)行。

圖69 :運(yùn)行功能仿真的過程

在運(yùn)行中,如果有報(bào)錯(cuò),請認(rèn)真回顧上述步驟。

圖70 :功能仿真結(jié)果圖

通過分析上述結(jié)果圖,容易得出結(jié)論:AB“00” –?> ?Y“0”, AB“01” –?> ?Y“0”, AB“10” –?> ?Y“0”, AB“11” –?> ?Y“1”。通過波形的圖的分析,二輸入與門的功能仿真是沒有任何問題的。

利用quartus 自帶的仿真器,可以支持原理圖輸入和HDL代碼輸入;可移植性不強(qiáng);對于一些復(fù)雜的輸入信號,利用這種驅(qū)動(dòng)方式較為復(fù)雜;在企業(yè)設(shè)計(jì)研發(fā)中,很少有人會用這個(gè)工具。

利用modelsim仿真

Mentor公司的ModelSim是業(yè)界最優(yōu)秀的HDL語言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。

利用quaruts 自帶的仿真器仿真時(shí),是利用繪制波形的方式進(jìn)行輸入信號的驅(qū)動(dòng)。但是這種方法移植性不好,無法在modelsim中充當(dāng)激勵(lì)。

在開發(fā)中用的比較多的方式是利用HDL的方式進(jìn)行充當(dāng)激勵(lì),modelsim軟件會自動(dòng)抓取HDL代碼中的信號進(jìn)行繪制波形,用于設(shè)計(jì)者的觀測。

Modelsim的軟件無法為原理圖的輸入方式進(jìn)行仿真,所以要將HDL代碼輸入的方式添加到工程,將原理圖輸入的方式移除工程。在企業(yè)工程開發(fā)時(shí),不建議使用原理圖的方式輸入,移植性太低。所以在后續(xù)的章節(jié)中,將全部采用代碼的輸入方式進(jìn)行設(shè)計(jì)。

新建一個(gè)verilog文件,命名為and_gate2_1_tb,保存到msim中。這個(gè)verilog文件是當(dāng)做測試文件的,命名時(shí),建議名字設(shè)置成為被測試模塊的名字,然后后面加上“_tb”。tb為testbench的簡寫。

圖71 :and_gate2_1_tb代碼

`timescale是verilog中定義時(shí)間標(biāo)度的關(guān)鍵字。1ns/1ps中的1ns表示時(shí)間的單位,在veirlog中不支持直接寫出單位,例:5 ns,ns等時(shí)間單位是不被識別的。當(dāng)定義了1ns為時(shí)間單位后,表示時(shí)間時(shí),可以直接寫出,例:表示10ns時(shí),可以直接寫10即可。1ns/1ps中的1ps表示時(shí)間的精度,由于精度的存在我們可以寫小數(shù)。例:表示5.5ns時(shí),可以直接寫5.5。但是也正是由于精度的存在,小數(shù)不能無限制向下描述。例:表示5.523ns時(shí),可以成5.523,如果表示5.258963ns,那目前的精度是到不了這么精確的。精度是1ps,因此小數(shù)的位數(shù)最多能有三位。在設(shè)計(jì)中,很少用到比ps還要精確的單位,所以一般的時(shí)間標(biāo)度都是1ns/1ps。

Testbench文件也是verilog文件,所以也必須遵從verilog的標(biāo)準(zhǔn)。

在tb文件中,是沒有端口的。在測試時(shí),輸入的信號都由內(nèi)部產(chǎn)生,輸出信號只要引出到內(nèi)部即可,仿真器會自動(dòng)捕獲。所以tb的模塊是沒有端口的。

在測試文件中,需要將被測試元件例化進(jìn)來。例化的方式如下:

圖72 :例化方式

在例化時(shí),首先是模塊名稱(and_gate2_1),后面是例化名稱,這個(gè)名字可以任意名字,筆者建議例化名稱要和模塊名稱有一定的關(guān)系,筆者采用模塊名稱后加上_inst,表示例化的意思。后面的括號是端口列表,每一個(gè)端口的前面加上一個(gè)“.”,后面加上一個(gè)“()”,此時(shí)表示這個(gè)端口可以連接線了,連接線放到“()”里面就是連接上了。

對于連接線來說,命名也是任意的,筆者建議連接線的名字和要連接的端口的名字要有一定的關(guān)系,筆者采用端口名字前面加tb_,表示tb中的連接線。

所有的連接線都需要提前定義。在定義時(shí),都可以采用“wire”類型(后續(xù)會有更改)。

當(dāng)例化完成,連接線定義和連接完成后,就需要開始測試了。而測試就是給模塊的輸入賦值,觀測輸出是否正確。

在測試時(shí),我們需要順序性的給出激勵(lì),verilog提供了一種比較簡單的方式“initial”語句。在這個(gè)語句中,我們只需要順序性的給出激勵(lì)就可以了。“#”表示延時(shí),延時(shí)在verilog中是不可綜合的,但是在仿真中,是存在的。

“1’b0”中的1表示位寬為1,’b表示后面的數(shù)碼為2進(jìn)制,0表示數(shù)碼為0。

在賦值時(shí),建議采用位寬+進(jìn)制+數(shù)碼的方式進(jìn)行賦值。

Verilog中,begin end表示中間的語句是一個(gè)整體,verilog和C類似,每一個(gè)函數(shù)或者語句下只能包含一個(gè)語句塊。C語言中采用大括號,verilog中采用begin end。

上述的initial語句塊中,描述了tb_A和tb_B被先賦值00,延遲20ns,被賦值為01,延遲20ns,被賦值為10,延遲20ns,被賦值為11。

Verilog語法規(guī)定,在initial語句中被賦值的變量,應(yīng)該定義為reg類型。

圖73 :定義變量(連接線)

在寫完testbench后,可以綜合分析一下。保證沒有任何的語法錯(cuò)誤。

在仿真之前,需要指定仿真文件。

選擇assignments -> settings。

圖74 :選擇settings

選擇simulation。

圖75 :選擇simulation

選擇compile test bench 后,選擇后面的test benches…。

圖76 :選擇test benches

選擇New,新建一個(gè)test bench。

圖77 :新建test bench

在test bench name的對話框中輸入:and_gate2_1_tb。默認(rèn)模塊中的頂層實(shí)體也是相同的。

圖78 :輸入testbench名字

點(diǎn)擊file name后面的三個(gè)點(diǎn),尋找and_gate2_1_tb文件。

圖79 :查找testbench文件

找到msim文件夾中的and_gate2_1_tb,選中后,點(diǎn)擊open。

圖80 :確定testbench文件

點(diǎn)擊ADD。

圖81 :添加testbench

添加成功后,點(diǎn)擊ok。

圖82 :添加成功

點(diǎn)擊ok。

圖83 :新建成功一個(gè)testbench

點(diǎn)擊OK。

圖84 :設(shè)置完成

在設(shè)置完成后,進(jìn)行綜合和分析。

綜合和分析完成后,點(diǎn)擊tools ?-> Run Simulation -> RTL Simulation。

圖85 :進(jìn)行RTL 仿真

稍微等一段時(shí)間,modelsim軟件會自動(dòng)啟動(dòng)。如果沒有啟動(dòng)的話,并且報(bào)錯(cuò)的話,請查看modelsim的關(guān)聯(lián)位置。

圖86 :無法連接到modelsim軟件

點(diǎn)擊tools 中的options。選擇EDA Toos options。

圖87 :配置關(guān)聯(lián)路徑

在modelsim-Altera中,看看路徑是否正確(這是筆者的安裝路徑,請自行查看自己的安裝路徑),注意最后那個(gè)“”,很多的系統(tǒng)中,沒有它也是不對的。

配置完成后,點(diǎn)擊ok。

重新點(diǎn)擊RTL 仿真。

圖88 :modelsim的基本界面

在wave界面中,點(diǎn)擊一下鼠標(biāo)左鍵,就會出現(xiàn)一個(gè)黃色的光標(biāo)。

點(diǎn)擊“全局縮放”。

圖89 :放大縮小的圖標(biāo)

在全局縮放前面一個(gè)為縮小,后面一個(gè)為放大。兩頭的兩個(gè)圖標(biāo),暫時(shí)不考慮。

全局縮放后,所有的波形都顯示到wave窗口中,經(jīng)過分析,設(shè)計(jì)正確。

此時(shí)就可以關(guān)閉modelsim軟件。

圖90 :是否確定關(guān)閉modelsim

點(diǎn)擊“是”即可關(guān)閉。

6、鎖定管腳

輸入設(shè)計(jì)后,經(jīng)過綜合和分析以及RTL仿真后,證明設(shè)計(jì)的邏輯功能是沒有任何錯(cuò)誤的。但是設(shè)計(jì)是在芯片內(nèi)部進(jìn)行實(shí)現(xiàn)的,如果想要發(fā)揮功能,勢必要與外部的邏輯電路進(jìn)行相連接。

在上述例子中,設(shè)計(jì)了二輸入與門。我們可以將兩個(gè)輸入綁定到任意的兩個(gè)管腳上,將輸出綁定到任意一個(gè)管腳上。經(jīng)過下載后,可以在輸入的管腳上加載電平,測量輸出管腳的電平,驗(yàn)證設(shè)計(jì)是否正確。

在FPGA學(xué)習(xí)開發(fā)板上,大部分都會有一些按鍵和LED,這些按鍵就可以為輸入提供高低電平,LED就可以檢測輸出的電平值。

所以最好的驗(yàn)證方法是,將輸入的管腳分配到連接有按鍵的管腳上,將輸出分配到帶有LED的管腳上。

自己制作或者購買的開發(fā)板,都會有原理圖。

圖91 :四位按鍵的電路原理圖

經(jīng)過分析,key1的網(wǎng)絡(luò)是直接連接到FPGA芯片上的;按鍵釋放時(shí),key1網(wǎng)絡(luò)為高電平,按下時(shí),key1網(wǎng)絡(luò)為低電平。其他按鍵原理相同。

圖92 :LED電路

經(jīng)過分析,LED1的網(wǎng)絡(luò)是直接連接到FPGA芯片上的;當(dāng)FPGA將LED1網(wǎng)絡(luò)置成高電平時(shí),LED是熄滅的;當(dāng)FPGA將LED1網(wǎng)絡(luò)置成低電平時(shí),LED是點(diǎn)亮的。其他的LED原理類似。

不同的電路原理,后續(xù)會得出不同的結(jié)果。請認(rèn)真分析原理。

通過查看各個(gè)網(wǎng)絡(luò)與FPGA的芯片連接關(guān)系,就可以得出按鍵、LED電路與FPGA的線連接的IO。

圖93 :外部網(wǎng)絡(luò)與FPGA連接示意圖

經(jīng)過查看,兩個(gè)按鍵分別選擇M15和M16。LED選擇G15。

點(diǎn)擊assignments ?-> ?pin planner。打開管腳規(guī)劃器。

圖94 :打開管腳規(guī)劃器

在對應(yīng)端口的Location標(biāo)簽下的空白窗位置雙擊。

圖95 :準(zhǔn)備輸入管腳號

輸入對應(yīng)的管腳號。

圖96 :輸入對應(yīng)的管腳號

輸入完成后,點(diǎn)擊關(guān)閉即可。

點(diǎn)擊綜合和分析,等待綜合分析完成。

7、布局布線

綜合分析只是將外部的輸入轉(zhuǎn)換成為對應(yīng)的電路模型或者對應(yīng)FPGA的電路模型,我們可以對電路模型進(jìn)行RTL仿真,來排除邏輯功能的錯(cuò)誤。

在FPGA片內(nèi)實(shí)現(xiàn)的話,就需要對模型進(jìn)行“實(shí)地”布置,利用FPGA片內(nèi)的資源來實(shí)現(xiàn)模型,并且要固定好位置和連接線。這部分操作稱為適配,也被稱為布局布線。

圖97 :布局布線選項(xiàng)

雙擊Fitter即可進(jìn)行布局布線。

布局布線后形成的報(bào)告有可能和之前綜合分析形成的報(bào)告中的資源利用有所出入,最終我們以布局布線后的資源為準(zhǔn)。

8、時(shí)序仿真

在真正的電路中,是存在電路延遲的。在仿真時(shí),如果加載的綜合出來的電路模型,那么此時(shí)驗(yàn)證的內(nèi)容主要是測試模型的邏輯功能是否正確,不考慮延時(shí)信息。這種仿真被稱為功能仿真、RTL仿真、前仿真、前仿。

在仿真時(shí),也可以加載布局布線后的電路模型,那么此時(shí)驗(yàn)證的內(nèi)容主要是測試模型的延時(shí)是否能夠達(dá)到我們的要求。這種仿真被稱為時(shí)序仿真、后仿真、后仿、門級仿真。

雙擊EDA Netlist writer,產(chǎn)生后仿真所需要的模型。

圖98 :EDA Netlist Writer選項(xiàng)

啟動(dòng)后仿真。

圖4-89 :啟動(dòng)后仿真

直接默認(rèn)選擇,點(diǎn)擊RUN。

圖99 :選擇時(shí)序模型

綜合器給出了外部不同條件下的時(shí)序模型,這里先不敘述他們各自的作用,后續(xù)時(shí)序分析中,會專門提到各個(gè)模型的作用。

圖100 :二輸入與門后仿真波形圖

在輸入信號都變?yōu)楦吆?,輸出信號沒有立刻變化為高,而是延遲了一段時(shí)間后,才變?yōu)楦唠娖健?/p>

在二輸入與門中,電路的延遲對于我們來說是可以接受的,沒有任何的要求。在后續(xù)的一些復(fù)雜的電路中,就要求電路的延遲不能太大,否則就會影響電路的功能。

時(shí)序仿真在企業(yè)設(shè)計(jì)中用的不太多,對于時(shí)序的很多問題,采用靜態(tài)時(shí)序分析來查看。所以在后續(xù)的設(shè)計(jì)中,時(shí)序仿真將不在重點(diǎn)敘述。

9、生成配置文件并下載

在布局布線后,需要將對應(yīng)的結(jié)果下載到FPGA片內(nèi)。對于模型來說是無法下載的,只有通過編譯,形成某種文件才可以下載。

雙擊Assembler(Generate programming files),產(chǎn)生配置文件。

圖101 :產(chǎn)生配置文件選項(xiàng)

利用下載電纜連接FPGA開發(fā)板和PC。Intel FPGA的下載器為usb blaster ,當(dāng)連接到PC后,需要安裝驅(qū)動(dòng)。

將FPGA開發(fā)板通電。

打開設(shè)備管理器。在通用串行總線控制器的下面,觀看有沒有Altera USB blaster。如果有的話,證明已經(jīng)有了驅(qū)動(dòng),不需要再次安裝。如果沒有Altera USB blaster,在其他設(shè)備中,觀測有沒有“其他設(shè)備”。如果沒有“其他設(shè)備”的話,就需要認(rèn)真的檢查開發(fā)板的各個(gè)連接線的連接情況。

圖102 :Altera USB blaster驅(qū)動(dòng)

圖103 :其他設(shè)備

選中USB-Blaster,右擊,選擇更新驅(qū)動(dòng)程序

圖104 :如何搜索驅(qū)動(dòng)程序軟件

選擇“瀏覽計(jì)算機(jī)以查找驅(qū)動(dòng)程序軟件”。

圖105 :瀏覽計(jì)算機(jī)上的驅(qū)動(dòng)程序文件

點(diǎn)擊“瀏覽”,按照圖4-96中所示路徑(quartus 的安裝路徑,讀者請尋找自己的路徑,后面的路徑是相同的)選擇文件夾,然后點(diǎn)擊確定。

點(diǎn)擊下一步,開始安裝驅(qū)動(dòng)。安裝過程中,PC會詢問是否安裝,點(diǎn)擊安裝即可。

安裝完成后,可以將下載線從PC上重新插拔一下。在通用串行總線控制器中就有Altera USB Blaster的驅(qū)動(dòng)。

安裝好驅(qū)動(dòng)后,點(diǎn)擊quartus 界面中tools的programmer。點(diǎn)擊Hardware setup。

圖106 :下載界面

選擇USB Blaster后,點(diǎn)擊close。

圖107 :選擇USB Blaster

選擇USB Blaster后,下載界面中顯示出,USB Blaster。此時(shí)直接Start即可開始下載。右上角會有下載進(jìn)度條。

圖108:下載界面

如果下載界面沒有可下載的文件,可以點(diǎn)擊add files,在qprj中的output files文件夾中,有一個(gè)后綴為.sof文件。選擇后,下載即可。

下載完成后,此界面就可以關(guān)閉。詢問是否保存時(shí),選擇否即可。

當(dāng)配置完成后,我們就可以進(jìn)行驗(yàn)證。按下按鍵,分析LED的燈的狀態(tài)。我們做的是二輸入與門,它的真值表如下:

圖109 :二輸入與門真值表

通過記錄按鍵和LED的狀態(tài),也會得到一組真值表。

圖110 :二輸入與門的按鍵和LED功能真值表

通過分析按鍵和LED的工作原理,可以化簡真值表。

圖111 :二輸入與門的按鍵和LED化簡真值表

通過分析兩個(gè)真值表,確認(rèn)功能正確。

不同的按鍵和LED原理,可以對應(yīng)去分析。

大多數(shù)FPGA的內(nèi)部實(shí)現(xiàn)是用SRAM等效出來的電路,SRAM是一種掉電丟失的器件。所以FPGA下載成功后可以正常運(yùn)行,但是掉電后,F(xiàn)PGA會丟失之前配置的所有信息。

這種情況非常不利于產(chǎn)品的研發(fā),設(shè)備斷電時(shí)常有的事情,而斷電后再上電,還是希望FPGA能夠正常工作的。

正是由于FPGA掉電丟失所有信息,所以在FPGA的周邊會配置一塊掉電不丟失的存儲器(flash),可以將配置信息存儲到存儲器中,F(xiàn)PGA每次上電后讀取存儲器的內(nèi)容即可。

向flash中存儲信息,需要將上述.sof文件轉(zhuǎn)換為.jic文件。

在quartus 界面中,點(diǎn)擊file ?-> Convert Programming file。

圖112 :轉(zhuǎn)換配置文件

在programming file type中選擇jic文件,在configuration device中選擇EPCS16。EPCS16是altera 公司推出的一款flash的型號,國內(nèi)大多數(shù)開發(fā)板上不是altera公司推出的芯片,但是能夠兼容。EPCS16是一個(gè)16Mbit的flash。讀者需要觀察自己手中開發(fā)板的flash型號,找到與之對應(yīng)的altera公司的兼容產(chǎn)品,選擇即可。

圖113 :添加flash loader

選擇flash loader,點(diǎn)擊add device,選擇ep4ce10,單擊OK。

圖114 :選擇FPGA系列

選擇SOF data,點(diǎn)擊add file,找到之前的配置文件.sof,點(diǎn)擊open。

圖115 :選擇配置文件

點(diǎn)擊generate,開始生成.jic文件。

圖116 :生成文件成功

點(diǎn)擊OK后,關(guān)閉界面即可。

重新打開下載界面。選擇下載文件,點(diǎn)擊delete。

圖117:移除默認(rèn)下載文件

點(diǎn)擊add files,將生成的.jic文件(在qprj中的outputfiles文件中)添加進(jìn)來,勾選program/configure,然后點(diǎn)擊start。

圖118:下載.jic文件

下載此文件速度比較慢,請耐心等待。

下載后,F(xiàn)PGA不能夠正常工作,需要斷電后上電,F(xiàn)PGA就可以正常工作了。

以后每次斷電再上電,都可以正常工作。

本文的1到9小節(jié)就是正常的開發(fā)流程。在此過程之外,還有可能會加入一些其他的流程,例:功耗分析、時(shí)序約束等等。

更多資料可在叁芯智能FPGA論壇(www.sxznfpga.com)下載獲取。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

任何技術(shù)的學(xué)習(xí)就好比一個(gè)江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。