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

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

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

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

作者:郝旭帥??校對(duì):陸輝

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

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

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

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

Intel FPGA開(kāi)發(fā)流程

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

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

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

硬件方面

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

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

軟件方面?

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

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

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

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

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

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

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

在后續(xù)的開(kāi)發(fā)設(shè)計(jì)中,我們會(huì)做各種各樣的設(shè)計(jì)。每個(gè)設(shè)計(jì)都有自己的名字,在上述文件內(nèi),用實(shí)驗(yàn)的名字命名一個(gè)文件夾。名字的話(huà)一定要帶有某種含義,不建議隨便給個(gè)字母序列當(dāng)做名字。例如:第一個(gè)要做的二輸入與門(mén)的設(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生成的一些過(guò)程性文件。

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

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

2建立工程

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

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

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

圖3 :quartus 18.0界面

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

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

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

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

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

在工程向?qū)е校覀儠?huì)指定工程名稱(chēng)和位置,頂層實(shí)體的名稱(chēng),工程文件和庫(kù)文件,目標(biāo)器件,EDA工具。

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

點(diǎn)擊Next。

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

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

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

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

點(diǎn)擊Next。

圖7 :選擇建立的工程的類(lèi)型

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

圖8 :添加文件

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

點(diǎn)擊Next。

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

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

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

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

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

圖11 :器件列表

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

圖12 :器件篩選

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

篩選條件中有封裝類(lèi)型、管腳數(shù)目和速度等級(jí)。那么我們?cè)趺粗雷约菏种械男酒倪@些信息呢?

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

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

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

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

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

點(diǎn)擊Next。

圖14 :選擇EDA工具

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

點(diǎn)擊Next。

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

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

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

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

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

打開(kāi)qprj文件夾。

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

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

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

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

Quarus 的版本很多,如果用一個(gè)版本建立的工程,用另外一個(gè)版本打開(kāi)可能會(huì)出一些bug,所以建議采用使用已建好工程的版本打開(kāi)??梢允褂糜浭卤镜姆绞酱蜷_(kāi).qsf。

圖18 :qsf文件的一部分

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

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

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

圖19 :打開(kāi)工程的途徑

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

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

原理圖輸入

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

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

圖20 :新建模塊

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

圖21 :新建文件列表

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

圖22 :另存為

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

圖23 :保存路徑和名稱(chēng)

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

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

圖24 :打開(kāi)添加原件的窗口

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

圖25 :添加二輸入與門(mén)

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

圖26 :放置的二輸入與門(mén)

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

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

圖27 :添加input管腳

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

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

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

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

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

圖29 :連接完成圖樣

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

右擊pin_name1,選擇properties。

圖30 :選擇屬性

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

圖31 :修改管腳名稱(chēng)

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

圖32 :修改完管腳名稱(chēng)的圖樣

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

HDL代碼輸入

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

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

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

圖33 :新建verilog HDL file

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

圖34 :保存verilog HDL文件

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

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

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

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

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

圖35 :verilog第一步

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

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

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

對(duì)于module name來(lái)說(shuō),一般還有一個(gè)要求,與文件名稱(chēng)保持一致。那么此時(shí)我們要做二輸入與門(mén),文件名稱(chēng)是and_gate2_1。要求module name也寫(xiě)成and_gate2_1。

圖36 :verilog第二步

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

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

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

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

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

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

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

對(duì)于描述端口來(lái)說(shuō),有最基本的四項(xiàng):方向、類(lèi)型、位寬、名稱(chēng)。

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

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

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

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

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

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

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

圖39 :assign語(yǔ)句描述二輸入與門(mén)

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

至此,二輸入與門(mén)的HDL輸入就完成了。

原理圖和HDL代碼混入輸入

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

4綜合和分析

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

圖40 :綜合分析按鈕

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

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

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

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

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

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

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

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

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

報(bào)錯(cuò)信息為:錯(cuò)誤(12049):無(wú)法將實(shí)體“and_gate2_1”的重復(fù)聲明編譯到庫(kù)“work”中。報(bào)錯(cuò)的原因是我們?cè)诒竟こ讨新暶髁硕鄠€(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)移除

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

圖50 :綜合分析成功

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

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

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

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

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

圖52 :尋找添加文件

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

圖53 :添加選中文件

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

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

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

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

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

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

在RTL視圖中,綜合出來(lái)的電路圖,只是電路模型而已。在FPGA中是沒(méi)有與門(mén)的,有的只是LUT等效的二輸入與門(mén)電路。

圖56 :RTL視圖的二輸入與門(mén)

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

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

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

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

5RTL仿真 ?

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

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

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

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

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

圖58 :仿真的示意圖

電路的輸入、中間過(guò)程和輸出,都是數(shù)字信號(hào),用波形來(lái)表示比較直觀(guān)。

在真正的電路中,是存在電路延遲的。在仿真時(shí),如果加載的綜合出來(lái)的電路模型,那么此時(shí)驗(yàn)證的內(nèi)容主要是測(cè)試模型的邏輯功能是否正確,不考慮延時(shí)信息。這種仿真被稱(chēng)為功能仿真、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)或者總線(xià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”的界面中會(huì)出現(xiàn)所有的端口。

圖63 :查找需要激勵(lì)和觀(guān)測(cè)的信號(hào)

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

圖64 :選擇觀(guān)測(cè)和激勵(lì)信號(hào)

點(diǎn)擊“OK”。

圖65 :確定選擇的信號(hào)

點(diǎn)擊“OK”。

圖66 :選擇信號(hào)完成

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

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

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

圖67 :設(shè)置輸入信號(hào)?

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

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

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

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

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

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

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

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

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

利用modelsim仿真

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

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

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

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

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

圖71 :and_gate2_1_tb代碼

`timescale是verilog中定義時(shí)間標(biāo)度的關(guān)鍵字。1ns/1ps中的1ns表示時(shí)間的單位,在veirlog中不支持直接寫(xiě)出單位,例:5 ns,ns等時(shí)間單位是不被識(shí)別的。當(dāng)定義了1ns為時(shí)間單位后,表示時(shí)間時(shí),可以直接寫(xiě)出,例:表示10ns時(shí),可以直接寫(xiě)10即可。1ns/1ps中的1ps表示時(shí)間的精度,由于精度的存在我們可以寫(xiě)小數(shù)。例:表示5.5ns時(shí),可以直接寫(xiě)5.5。但是也正是由于精度的存在,小數(shù)不能無(wú)限制向下描述。例:表示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文件中,是沒(méi)有端口的。在測(cè)試時(shí),輸入的信號(hào)都由內(nèi)部產(chǎn)生,輸出信號(hào)只要引出到內(nèi)部即可,仿真器會(huì)自動(dòng)捕獲。所以tb的模塊是沒(méi)有端口的。

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

圖72 :例化方式

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

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

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

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

在測(cè)試時(shí),我們需要順序性的給出激勵(lì),verilog提供了一種比較簡(jiǎn)單的方式“initial”語(yǔ)句。在這個(gè)語(yǔ)句中,我們只需要順序性的給出激勵(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表示中間的語(yǔ)句是一個(gè)整體,verilog和C類(lèi)似,每一個(gè)函數(shù)或者語(yǔ)句下只能包含一個(gè)語(yǔ)句塊。C語(yǔ)言中采用大括號(hào),verilog中采用begin end。

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

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

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

在寫(xiě)完testbench后,可以綜合分析一下。保證沒(méi)有任何的語(yǔ)法錯(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的對(duì)話(huà)框中輸入: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軟件會(huì)自動(dòng)啟動(dòng)。如果沒(méi)有啟動(dòng)的話(huà),并且報(bào)錯(cuò)的話(huà),請(qǐng)查看modelsim的關(guān)聯(lián)位置。

圖86 :無(wú)法連接到modelsim軟件

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

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

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

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

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

圖88 :modelsim的基本界面

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

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

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

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

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

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

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

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

6鎖定管腳

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

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

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

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

自己制作或者購(gòu)買(mǎi)的開(kāi)發(fā)板,都會(huì)有原理圖。

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

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

圖92 :LED電路

經(jīng)過(guò)分析,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原理類(lèi)似。

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

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

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

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

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

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

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

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

輸入對(duì)應(yīng)的管腳號(hào)。

圖96 :輸入對(duì)應(yīng)的管腳號(hào)

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

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

7布局布線(xiàn)

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

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

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

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

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

8時(shí)序仿真

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

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

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

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

啟動(dòng)后仿真。

圖4-89 :?jiǎn)?dòng)后仿真

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

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

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

圖100 :二輸入與門(mén)后仿真波形圖

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

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

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

9生成配置文件并下載

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

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

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

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

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

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

圖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)擊“瀏覽”,按照?qǐng)D4-96中所示路徑(quartus 的安裝路徑,讀者請(qǐng)尋找自己的路徑,后面的路徑是相同的)選擇文件夾,然后點(diǎn)擊確定。

點(diǎn)擊下一步,開(kāi)始安裝驅(qū)動(dòng)。安裝過(guò)程中,PC會(huì)詢(xún)問(wèn)是否安裝,點(diǎn)擊安裝即可。

安裝完成后,可以將下載線(xiàn)從PC上重新插拔一下。在通用串行總線(xiàn)控制器中就有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即可開(kāi)始下載。右上角會(huì)有下載進(jìn)度條。

圖108:下載界面

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

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

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

圖109 :二輸入與門(mén)真值表

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

圖110 :二輸入與門(mén)的按鍵和LED功能真值表

通過(guò)分析按鍵和LED的工作原理,可以化簡(jiǎn)真值表。

圖111 :二輸入與門(mén)的按鍵和LED化簡(jiǎn)真值表

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

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

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

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

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

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

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

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

在programming file type中選擇jic文件,在configuration device中選擇EPCS16。EPCS16是altera 公司推出的一款flash的型號(hào),國(guó)內(nèi)大多數(shù)開(kāi)發(fā)板上不是altera公司推出的芯片,但是能夠兼容。EPCS16是一個(gè)16Mbit的flash。讀者需要觀(guān)察自己手中開(kāi)發(fā)板的flash型號(hào),找到與之對(duì)應(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,開(kāi)始生成.jic文件。

圖116 :生成文件成功

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

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

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

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

圖118:下載.jic文件

下載此文件速度比較慢,請(qǐng)耐心等待。

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

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

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

更多資料可在叁芯智能FPGA論壇(www.sxznfpga.com)下載獲取,點(diǎn)擊愿讀原文可跳轉(zhuǎn)。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠(chǎng)商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
EP4CE40U19I7N 1 Intel Corporation Field Programmable Gate Array, 2475 CLBs, 39600-Cell, PBGA484, 19 X 19 MM, 0.80 MM PITCH, LEAD FREE, UBGA-484

ECAD模型

下載ECAD模型
$745.4 查看
A3P250-FGG256T 1 Microsemi FPGA & SoC Field Programmable Gate Array, 6144 CLBs, 250000 Gates, 350MHz, 6144-Cell, CMOS, PBGA256, 1 MM PITCH, GREEN, FBGA-256
暫無(wú)數(shù)據(jù) 查看
A3P125-VQG100I 1 Microsemi Corporation Field Programmable Gate Array, 3072 CLBs, 125000 Gates, 350MHz, CMOS, PQFP100, 14 X 14 MM, 1 MM HEIGHT, 0.50 MM PITCH, GREEN, VQFP-100

ECAD模型

下載ECAD模型
$14.94 查看

相關(guān)推薦

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

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