性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

【FPGA基礎(chǔ)】基于Quartus Prime 17.1 的FPGA開發(fā)流程

文章目錄

  • 概述
  • 一、建立工程
  • 二、設(shè)計(jì)輸入
  • 三、分析和綜合
  • 四、功能仿真
  • 五、綜合與布局布線
  • 六、時(shí)序仿真
  • 七、IO 分配以及生成配置文件
  • 八、配置 FPGA 下載
  • 九、固化程序到FLASH中
    • 9.1、FPGA 固件存儲(chǔ)方案介紹
    • 9.2、Cyclone IV E FPGA 固件燒寫方案
    • 9.3、燒寫文件 JIC 的產(chǎn)生


概述

科學(xué)合理的 FPGA 設(shè)計(jì)流程是為了更加直觀地展示一個(gè)完整的設(shè)計(jì)流程,本節(jié)以一個(gè)基礎(chǔ)的實(shí)驗(yàn)——二選一選擇器,來介紹完整的 FPGA 設(shè)計(jì)開發(fā)流程。

良好的文件夾設(shè)置以及工程管理是學(xué)好 FPGA 設(shè)計(jì)的基礎(chǔ),在學(xué)習(xí)之初就應(yīng)建立良好的習(xí)慣。因此首先在新建的工程文件夾下面,分別建立如下圖所示的子文件夾。

各級(jí)目錄作用釋義如下:

  • prj 為工程文件存放目錄
    • prj 文件夾下還建立了子文件夾 ip,用于存放 Quartus Prime 中生成的 IP 核文件
  • rtl 為 verilog 可綜合代碼存放目錄
  • testbench 為測(cè)試文件存放目錄
  • img 為設(shè)計(jì)相關(guān)圖片存放目錄
  • doc 為設(shè)計(jì)相關(guān)文檔存放目錄

一、建立工程

每個(gè)開發(fā)過程開始時(shí)都應(yīng)建立一個(gè) Quartus Prime 工程, Quartus II 以工程的方式對(duì)設(shè)計(jì)過程進(jìn)行管理, Quartus II 工程包括創(chuàng)建 FPGA 配置文件需要的所有設(shè)置和設(shè)計(jì)文件。

打開安裝好的 Quartus Prime 17.1 軟件,軟件啟動(dòng)界面及啟動(dòng)后的主界面如下圖所示:

STEP #1

第一步, 單擊 New Project Wizard 來啟動(dòng)一個(gè)工程向?qū)А?會(huì)顯示如下圖所示的工程向?qū)Ы榻B,此處直接單擊 Next 即可。

STEP #2

第二步,選擇新建工程所在路徑、設(shè)置工程命名以及頂層設(shè)計(jì)實(shí)體名稱。在輸入頂層設(shè)計(jì)實(shí)體時(shí)默認(rèn)與工程名稱一致,此處可根據(jù)具體情況來自行修改,這里我就直接使用默認(rèn)設(shè)置了,如下圖所示。

選擇工程類型時(shí)可以選擇一個(gè)全空的工程,也可以基于現(xiàn)有的工程模版來實(shí)現(xiàn)。此處選擇新建一個(gè)空的工程,如下圖所示。

STEP #3

第三步,添加已有設(shè)計(jì)文件。如沒有, 可直接點(diǎn)擊 Next,本次單擊 Next, 如下圖所示。

STEP #4

第四步,選擇器件。在這里選擇 Cyclone IV E 系列的 EP4CE10F17C8 ,如下圖所示。 這里可在右面紅色框內(nèi)可通過添加限定條件來減少需要翻看器件的目錄。

?

小梅哥的AC501使用的是:Cyclone V 系列的 5CSEBA2U19I7

?

STEP #5

第五步, EDA 工具的選擇。從上至下依次是綜合工具、仿真工具以及板級(jí)工具, 可根據(jù)實(shí)際情況自行選擇。在這里根據(jù)自己安裝情況將仿真工具設(shè)置為 Modelsim-Altera,語言選擇 Verilog HDL,其他選項(xiàng)可暫時(shí)不做處理, 如下圖所示。

?

后期需要設(shè)置或更改 EDA 工具相關(guān)路徑時(shí), 依次點(diǎn)擊[Tools] -> [Options] -> [General] -> [EDA Tool Options] -> ModelSim-Altera

?

STEP #6

第六步,出現(xiàn)設(shè)置信息概覽頁面,直接單擊 Finish 完成工程的建立。

二、設(shè)計(jì)輸入

工程建立完成后,需要為工程添加新的設(shè)計(jì)文件,單擊 [File] -> [New] -> Verilog HDL File,或者工具欄中的 New,彈出如下圖所示的選擇框,此處選擇 Design Files 中的 Verilog HDL File,然后點(diǎn)擊OK。

新的文件建立完成后,輸入下述二選一多路器代碼,并以 led.v 命名保存到工程對(duì)應(yīng)的 rtl 文件夾下。

module led(a,b,key_in,led_out); input a;//輸入端口 A input b;//輸入端口 B input key_in; //按鍵輸入,實(shí)現(xiàn)輸入通道的選擇 output led_out; //led 控制端口 默認(rèn)是wire類型 //當(dāng) key_in == 0 : led_out = a assign led_out = (key_in == 0)? a : b;endmodule

簡單解釋代碼,當(dāng) key_in 為低時(shí),輸出 led_out 和 a 相同,否之 led_out 和 b 相同。

?

默認(rèn)勾選Add file to current project

?

三、分析和綜合

單擊工具欄中的 Start Analysis & Synthesis 來進(jìn)行分析和綜合, 如下圖所示。如在設(shè)計(jì)過程有錯(cuò)誤的地方,在分析和綜合后會(huì)提示 Error 或者 Warning,需針對(duì)不同情況進(jìn)行修改。

?

常見的問題以及解決方式,可參見 www.corecourse.cn 網(wǎng)站上相關(guān)文章針對(duì)性解決。

?

Quartus的右下角會(huì)顯示進(jìn)度和所用時(shí)間,如下圖所示。

分析和綜合沒有問題后,依次點(diǎn)擊[Tools] -> [Netlist Viewers] -> RTL Viewer,可以看到如下圖所示的硬件邏輯電路,即一個(gè)二選一選擇器,符合設(shè)計(jì)預(yù)期。

四、功能仿真

STEP #1 編寫測(cè)試激勵(lì)文件

為了驗(yàn)證以上邏輯設(shè)計(jì)是否成功, 在直接下載到開發(fā)板觀察現(xiàn)象之前需要進(jìn)行功能仿真(又稱為行為級(jí)仿真或者前仿真),功能仿真首先需要編寫激勵(lì)文件,此處再新建一個(gè) led_tb.v 文件并輸入如下代碼,保存到工程對(duì)應(yīng)的 testbench 文件夾下, 并再次進(jìn)行分析和綜合查看是否存在語法設(shè)計(jì)錯(cuò)誤。

`timescale 1ns/1psmodule led_tb; //激勵(lì)信號(hào)定義,對(duì)應(yīng)連接到待測(cè)試模塊的輸入端口 reg signal_a; reg signal_b; reg signal_c;  //待檢測(cè)信號(hào)定義,對(duì)應(yīng)連接到待測(cè)試模塊的輸出端口 wire led;  //例化待測(cè)試模塊 led led0(  .a(signal_a),  .b(signal_b),  .key_in(signal_c),  .led_out(led) );  //產(chǎn)生激勵(lì) initial begin  signal_a = 0;signal_b = 0;signal_c = 0;  #100;//延時(shí) 100ns  signal_a = 0;signal_b = 0;signal_c = 1;  #100;  signal_a = 0;signal_b = 1;signal_c = 0;  #100;  signal_a = 0;signal_b = 1;signal_c = 1;  #100;  signal_a = 1;signal_b = 0;signal_c = 0;  #100;  signal_a = 1;signal_b = 0;signal_c = 1;  #100;  signal_a = 1;signal_b = 1;signal_c = 0;  #100;  signal_a = 1;signal_b = 1;signal_c = 1;  #200;  $stop; endendmodule

簡單解釋下程序,timescale 指定程序的延時(shí)單位和精度。#200 的意思就是延時(shí)200ns,#200.123的意思就是延時(shí)200.123ns,即演示精度最多為ps級(jí)別,200123ps。提醒一點(diǎn),需要注意下例化的對(duì)應(yīng)關(guān)系。

STEP #2 設(shè)置仿真腳本

單擊標(biāo)題欄的 [Assignments] -> [Settings] -> Simulation查看仿真工具以及語言是否與之前的設(shè)置一致, 否則根據(jù)實(shí)際使用情況進(jìn)行相應(yīng)的修改,如下圖所示。

選中上述界面下方的 Compile test bench 選項(xiàng),然后單擊其后的 Test Benches,可以看到如下圖所示界面。

點(diǎn)擊 New, 彈出如下圖所示的 Test Bench 設(shè)置文件對(duì)話框,在 Test bench name 中填寫對(duì)應(yīng)的激勵(lì)名稱led_tbTop level module in test bench會(huì)自動(dòng)設(shè)置與其一樣),接著找到已經(jīng)編寫好的激勵(lì)文件,單擊 Add,最后點(diǎn)擊 OK 后回到主界面。

?

手動(dòng)設(shè)置仿真時(shí)間為10us,方式如下圖所示:

?

STEP #3 啟動(dòng)仿真

單擊 [Tools] -> [Run Simulation Tool] -> RTL Simulation 來進(jìn)行前仿真也就是常說的功能仿真,如下圖所示。

?

[Tools] -> [Options] -> EDA ToolOptions 可以設(shè)置對(duì)應(yīng)的仿真軟件的路徑

?

STEP #4 仿真結(jié)果分析

至此, 即可在仿真軟件 modelsim 中看到如下圖所示的波形文件,可以看出符合設(shè)計(jì)預(yù)期, 當(dāng) key_in 等于 0 時(shí) led_out 等于 a,當(dāng) key_in 等于 1 時(shí) led_out 等于 b,即功能仿真通過。

五、綜合與布局布線

點(diǎn)擊 Quartus Prime 主界面的 Start Compilation,進(jìn)行綜合&布局布線, 如下圖所示。布局布線過程中如遇出錯(cuò), 應(yīng)根據(jù)編譯錯(cuò)誤信息具體修改。

六、時(shí)序仿真

?

時(shí)序仿真又稱為后仿真,后仿真之前需要把已打開的Modelsim關(guān)閉!

?

點(diǎn)擊 [Tools] -> [Run Simulation Tool] -> Gate Leval Simulation 或者在工具欄點(diǎn)擊 Gate LevalSimulation 進(jìn)行后仿真, 也就是門級(jí)仿真,如下圖所示。

彈出選擇時(shí)序模型對(duì)話框,可針對(duì)相應(yīng)情況具體選擇。此時(shí)可選擇第一個(gè)時(shí)序模型: 慢速工作、環(huán)境溫度為 85℃、 內(nèi)核供電 1.2V 的情況進(jìn)行仿真, 如下圖所示。

時(shí)序仿真完成后, 可以在 Modelsim 的波形窗口中看到圖 2.2-23 的時(shí)序仿真波形。從波形中發(fā)現(xiàn)與之前的功能仿真相比有了一些差異,如: 存在不希望存在的脈沖、 且在 200ns 時(shí),led 相對(duì)輸入信號(hào)有一定時(shí)間的邏輯延時(shí)。

七、IO 分配以及生成配置文件

IO 分配其方法不唯一,常用的有三種。 在標(biāo)題欄中 Assignments—Pin Planner 或者直接單擊工具欄的 Pin Planner 進(jìn)行 IO 分配, 如下所示。同時(shí)也可通過編寫 Tcl 文件的方式來實(shí)現(xiàn)引腳分配,此處需針對(duì)不同板卡進(jìn)行不同的設(shè)置。

以芯路恒 AC620 開發(fā)板為例, 最終的引腳分配如下圖所示:

此處需注意, 在分配好引腳后,仍需再進(jìn)行一次全編譯才能使引腳分配生效

八、配置 FPGA 下載

單擊工具欄中的 Programmer, 如下圖所示,彈出以下對(duì)話框。確認(rèn)連接好下載器并在 Hardware Setup 中選中 USB-Blaster 以及被下載的.sof 文件后, 單擊 Start 即可將設(shè)計(jì)好的邏輯電路下載到開發(fā)板中。

?

sof文件是下載到FPGA,掉電即丟失;jic文件是固化到FLASH中,掉電仍存在!

?

通過按鍵以及兩根杜邦線控制 P2 插接件下方的 GPIO0 (R1)以及 GPIO1(P2)接入不同的電平值, 可以觀測(cè)到 led 燈(LED0)具有不同的亮滅效果。

九、固化程序到FLASH中

9.1、FPGA 固件存儲(chǔ)方案介紹

Intel 或 Xilinx 的 FPGA 芯片,使用的是基于 SRAM 結(jié)構(gòu)的查找表,而 SRAM 的一大特性就是掉電數(shù)據(jù)會(huì)丟失,當(dāng)使用 JTAG 將 SRAM 配置文件(.sof)配置到 FPGA 芯片中后,這些數(shù)據(jù)是直接存儲(chǔ)在 SRAM 結(jié)構(gòu)的查找表中的,因此,一旦芯片掉電,則 SRAM 中的數(shù)據(jù)將丟失,再次上電后, SRAM 中將不再有有效的數(shù)據(jù)。 而普通的 MCU 內(nèi)部集成了片上程序存儲(chǔ)器 ROM,即使掉電后也能保存程序。 這也就是常見的,使用 JTAG 下載 SOF 固件到FPGA 中后,板子重新上電,則之前下載的固件又不在了的原因。

當(dāng)系統(tǒng)設(shè)計(jì)完成并驗(yàn)證結(jié)束后, 準(zhǔn)備量產(chǎn)時(shí),希望 FPGA 能夠永久保持電路固件,即讓FPGA 上電后其查找表中就被寫入有效的數(shù)據(jù)。但是又不能總是每次系統(tǒng)上電后就用 JTAG去下載一次程序固件。因此, FPGA 支持另外一種配置方式:主動(dòng)串行配置(AS)。

所謂主動(dòng)串行配置,就是在 FPGA 芯片外部放置一片能夠掉電數(shù)據(jù)不丟失的存儲(chǔ)器,例如最常見的 EPCS、 QFLASH、并口 FLASH,來存儲(chǔ)設(shè)計(jì)好的電路固件。而 FPGA 芯片內(nèi)部,則設(shè)計(jì)了一個(gè)專用的硬件電路,在芯片剛上電時(shí)就主動(dòng)去讀取存儲(chǔ)器中的固件,并配置到FPGA 芯片的每一個(gè) SRAM 中去。通過這樣一種方式,可在不改變 FPGA 芯片 SRAM 工藝的查找表結(jié)構(gòu)前提下, 使得芯片每次上電后,都能獲得有效的配置數(shù)據(jù)。外部存儲(chǔ)電路配置信息的芯片稱之為配置芯片。

早前, 原 Altera 公司規(guī)定只能使用其自己發(fā)售的 EPCS 芯片作為外部配置器件,該 EPCS 芯片實(shí)質(zhì)就是一個(gè) SPI 接口的串行 FLASH 芯片, 只不過是經(jīng)過了 Altera 的嚴(yán)格測(cè)試,性能優(yōu)異。而近些年,隨著芯片生產(chǎn)工藝的不斷發(fā)展,很多其他廠家生產(chǎn)的 SPI 接口的 FLASH 芯片也能夠達(dá)到 EPCS 的技術(shù)標(biāo)準(zhǔn),因此 Altera 就放開了該限制,并指出可以使用其他芯片廠家生產(chǎn)的 SPI 接口的 FLASH 芯片代替 EPCS。在芯路恒的 AC620上就使用了一片華邦公司生產(chǎn)的 16Mbit 的串行 FLASH 芯片 W25Q16 來作為配置芯片。該芯片性能優(yōu)異,性價(jià)比較高,完全能夠達(dá)到 EPCS 的性能標(biāo)準(zhǔn)。

9.2、Cyclone IV E FPGA 固件燒寫方案

當(dāng)需要將設(shè)計(jì)好的配置固件固化到該器件中時(shí),有兩種方式。

  • 第一種方式,也就是傳統(tǒng)的方式,是使用專用 AS 接口(與 JTAG 10 針接口獨(dú)立)來直接燒寫該配置芯片,該種方式需要在電路板上設(shè)置一個(gè)獨(dú)立的 AS 接口,占用 PCB 板面積較大,使用起來不方便。
  • 第二種方式,也是現(xiàn)在流行的方式則是通過 JTAG 接口,經(jīng) FPGA 芯片間接燒寫配置芯片,其電路如下圖所示。 AC620 開發(fā)板沒有設(shè)計(jì)獨(dú)立的 AS 接口,因此只支持第二種燒寫方式。

9.3、燒寫文件 JIC 的產(chǎn)生

STEP #1

打開希望固化的 FPGA 設(shè)計(jì)工程, 此處以本節(jié)的工程為例。

STEP #2

在 Quartus Prime 軟件中點(diǎn)擊 File—>Convert Programming Files,如下圖所示:

STEP #3

在彈出的窗口中, Programming file type 選擇 JTAG Indirect Configuration File(.jic), Mode選擇 Active Serial, Configuration device 選擇 EPCS16, File name 默認(rèn)是 output_file.jic,這里,我們養(yǎng)成良好的習(xí)慣,將其改成工程名字: led_test.jic, 如圖 2.3-3 所示。

STEP #4

在 Input files to convert 一欄中,點(diǎn)擊 Flash Loader 一項(xiàng),在右側(cè)點(diǎn)擊 Add Device 選項(xiàng),如下圖所示:

STEP #5

在上一步彈出的選項(xiàng)卡中,選擇 Cyclone IV E 下的 EP4CE10(AC620 開發(fā)板上的芯片為 EP4CE10F17C8,可根據(jù)實(shí)際情況進(jìn)行選擇),然后點(diǎn)擊 OK,如下圖所示:

STEP #6

點(diǎn)擊 OK 后會(huì)回到先前的配置頁面,此時(shí)鼠標(biāo)再次點(diǎn)擊 SOF Data,再點(diǎn)擊右側(cè)的 AddFile,如下圖所示:

STEP #7

在彈出的窗口中,在工程生成的output files文件夾下找到“key_filter.sof”文件,點(diǎn)擊Open,即可添加進(jìn)來,如下圖所示:

STEP #8

點(diǎn)擊 Open 后,回到配置頁面,點(diǎn)擊 Generate 按鈕,如下圖所示:

STEP #9

點(diǎn)擊 Generate 按鈕后,軟件開始轉(zhuǎn)換文件,轉(zhuǎn)換成功后彈出成功提示窗口,如下圖所示:

STEP #10

點(diǎn)擊 OK 即可,然后 close 窗口。

STEP #11

打開 Quartus Pime 中的下載工具 Programmer,將原有的 sof 文件移除, 點(diǎn)擊 Add Files重新添加 Output Files 文件夾下的 led_test.jic 文件進(jìn)來,勾選 Programming/Configuration,如下圖所示:

STEP #12

設(shè)置完成后,點(diǎn)擊 Start(確保此時(shí)下載器與開發(fā)板已經(jīng)正確連接),則軟件開始燒錄固件,整個(gè)燒錄時(shí)間大約花費(fèi) 20 秒鐘左右。

燒錄完成后,此時(shí)固件已經(jīng)保存在了配置芯片中,但是此刻 FPGA 還不能運(yùn)行該固件,因?yàn)楫?dāng)前的固件是存儲(chǔ)在配置芯片中的,并沒有被配置到 FPGA 中,因此需要讓 FPGA 主動(dòng)執(zhí)行一次從配置芯片中配置固件的過程,方法很簡單, 只需開發(fā)板斷電后重新上電即可。

此時(shí), 使用杜邦線分別接觸不同的電平值,就可以看到 LED 的狀態(tài)發(fā)生變化。斷電再上電,固件依舊保持,整個(gè)程序固化工作完成。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 31
收藏 32
關(guān)注 431
成為作者 賺取收益
全部留言
0/200
  • dy-i2UfRuvP 2021-05-19 13:16
    請(qǐng)教一下
    回復(fù)
  • dy-iipPZRPN 2021-05-13 22:38
    佩服樓主
    回復(fù)
  • dy-3EbVR6Ei 2021-05-13 22:27
    期待繼續(xù)
    回復(fù)
  • dy-Xq2JxpfN 2021-05-13 22:12
    感謝分享
    回復(fù)
  • dy-9g42stbW 2021-05-13 21:54
    圍觀學(xué)習(xí)
    回復(fù)
  • dy-mLj7kl5v 2021-05-13 20:30
    學(xué)習(xí)了
    回復(fù)
  • dy-apcih3c1 2021-05-13 20:11
    不亞于看了一篇高質(zhì)量論文
    回復(fù)
  • dy-k78ZHtFD 2021-05-13 20:01
    精彩,很多東西還沒接觸到
    回復(fù)
  • dy-nAWdnPGS 2021-05-13 18:49
    比論文強(qiáng)一萬倍
    回復(fù)
  • dy-prSX6RBY 2021-05-13 18:38
    請(qǐng)教一下
    回復(fù)
  • dy-jqGVYqsF 2021-05-13 16:03
    佩服樓主
    回復(fù)
  • dy-VIQ9auhf 2021-05-13 14:53
    期待繼續(xù)
    回復(fù)
  • dy-7mura2gg 2021-05-13 14:44
    什么時(shí)候更新
    回復(fù)
  • dy-YN3DYTeH 2021-05-13 14:33
    思路清晰,受益匪淺
    回復(fù)
  • dy-9hjGevyn 2021-05-13 13:32
    期待繼續(xù)
    回復(fù)
  • dy-H1WY5jXH 2021-05-13 13:13
    講的真好!
    回復(fù)
  • dy-wVQjSHHX 2021-05-13 12:58
    佩服樓主
    回復(fù)
  • dy-9hjGevyn 2021-05-12 15:58
    期待繼續(xù)
    回復(fù)
  • dy-88VlYaFf 2021-05-12 15:34
    學(xué)習(xí)了
    回復(fù)
  • dy-9QTV6UZW 2021-05-12 15:23
    圍觀學(xué)習(xí)
    回復(fù)