本系列文章主要針對(duì)FPGA初學(xué)者編寫,包括FPGA的模塊書寫、基礎(chǔ)語法、狀態(tài)機(jī)、RAM、UART、SPI、VGA、以及功能驗(yàn)證等。將每一個(gè)知識(shí)點(diǎn)作為一個(gè)章節(jié)進(jìn)行講解,旨在更快速的提升初學(xué)者在FPGA開發(fā)方面的能力,每一個(gè)章節(jié)中都有針對(duì)性的代碼書寫以及代碼的講解,可作為讀者參考。
第一章:模塊書寫
Verilog HDL 語言的基本語法與 C語言相似,因此與 VHDL 相比較更容易上手。本章將會(huì)在實(shí)際小項(xiàng)目的基礎(chǔ)上,以 Verilog HDL 語言為主, 教讀者怎么更方便、更高效的學(xué)習(xí) FPGA。
Verilog HDL 中的 HDL 指的是硬件描述語言(Hardware Description Language), 顧名思義,Verilog HDL 可以描述對(duì)應(yīng)的硬件電路,下面以一個(gè)小例子說明。
如圖1所示為電路示意圖, 首先分析一下該電路:
①兩個(gè)輸入端口即 a 和 b,為了更好地讓讀者理解該變量為一個(gè)輸入端口,輸入端口可加上方向pi(port input)表示輸入。面對(duì)大量的代碼,一個(gè)比較好的命名風(fēng)格,更方便我們后續(xù)的驗(yàn)證, 希望前期就可以養(yǎng)成比較好的命名風(fēng)格。
②一個(gè)輸出端口即 c,同理 po 即為 port output。
功能:該電路實(shí)現(xiàn) a 和 b 相與,結(jié)果為 c。
在用 Verilog HDL 描述一個(gè)電路時(shí),必須要對(duì)該電路命名,此處我們對(duì)該電路命名為 a_and_b。在用 Verilog HDL 描述一個(gè)電路時(shí), 模塊的開始都是以 module 開始,endmodule 結(jié)束, module 后面寫該模塊的模塊名,模塊名的后面有一個(gè)小括號(hào),所有該模塊的端口都需要在此小括號(hào)內(nèi)聲明,小括號(hào)以分號(hào)結(jié)束(半角分號(hào),同c 語言一樣, Verilog HDL 中每一條語句也是以分號(hào)結(jié)束)。
在 module 與 endmodule 之間,可以定義必要的內(nèi)部變量,以及我們所有描述的邏輯功能。具體如圖2所示:
建議安裝專門編輯程序的一些軟件,例如Notepad++軟件界面及功能都比較齊全。用 Notepad++打開我們新建的 V 文件, 按照模板書寫模塊a_and_b的 Verilog HDL 代碼, 如下所示:
代碼解析:
①模塊以 module 作為開頭, endmodule 作為結(jié)尾, 需要注意模塊名與 V 文件名要一致;
②小括號(hào)內(nèi)描述端口, Verilog HDL 中輸入端口的關(guān)鍵字為 input,輸出端口的關(guān)鍵字為 output。wire(線) 為端口的變量類型, input 端口的變量均為 wire型, Verilog HDL 中另一種常用的變量類型為 reg(寄存器),將在后面的章節(jié)詳細(xì)介紹;
③代碼第 8 行, 描述了具體的邏輯功能, assign 為 Verilog HDL 中的關(guān)鍵字,assign 可以描述組合邏輯,每一個(gè) assign 后面只能跟一條語句。Verilog HDL 中另一個(gè)常用的關(guān)鍵字為 always, 后續(xù)會(huì)詳細(xì)講解。該語句表達(dá)的意思為 a&b賦值給 c, 其中=為賦值號(hào), 將右邊的結(jié)果賦值為左邊的變量, &為按位與,即變量的對(duì)應(yīng)位相與, 將在基礎(chǔ)語法部分詳細(xì)講解。
這樣我們就已經(jīng)將圖中電路描述清楚了,代碼只需要按照給出的模板填寫對(duì)應(yīng)的內(nèi)容即可。
第二章節(jié)我們將會(huì)講解在ISE中如何驗(yàn)證代碼是否有語法錯(cuò)誤,以及將對(duì)應(yīng)的代碼轉(zhuǎn)變成 RTL 電路。
第二章:電路綜合
第一章中已經(jīng)將 a & b = c 對(duì)應(yīng)的 Verilog HDL 程序?qū)懗觯?但是我們無法得知我們所寫的代碼是否有語法錯(cuò)誤,也不知道代碼是否能夠按照我們的意思生成對(duì)應(yīng)的電路。本章中我們將會(huì)使用 xilinx 公司的 ISE 軟件對(duì)所寫的程序進(jìn)行綜合,從中可以得知代碼是否有語法錯(cuò)誤,以及生成對(duì)應(yīng)的 RTL 電路。為了方便管理,我們?cè)谂c design 文件夾同路徑下新建一個(gè)文件夾,取名為ise_prj(基于 ISE 的 project)。打開 ISE,會(huì)看到如圖 1 所示的界面。點(diǎn)擊右上角的 File,選擇 New Project…新建一個(gè)工程。
彈出如圖 2 所示的界面,在 Name 處填寫工程名字(盡量保證與頂層文件名一致即a_and_b), Location 處選擇工程存放的路徑, Working Direction 默認(rèn)路徑與 Location一致, Top-level source type 處按照所需選擇,此處我們選擇 HDL。
點(diǎn)擊 Next,彈出如下圖 3的界面,按照板卡芯片選擇對(duì)應(yīng)的選項(xiàng),若是只想看看生成的 RTL 電路(不下板調(diào)試),則不需要選擇,或者隨便選擇一個(gè)芯片即可。
點(diǎn)擊 Next,再點(diǎn)擊 Finish 完成工程的創(chuàng)建。按照?qǐng)D4所示,右鍵點(diǎn)擊芯片型號(hào),選擇 Add Source…添加已經(jīng)存在的文件(a_and_b.v)。找到 design 文件夾中a_and_b.v 文件所在的路徑,選中該文件,點(diǎn)擊 OK。
添加文件后的工程界面如圖 5 所示。
選中 a_and_b,雙擊 Synthesize 選項(xiàng)進(jìn)行對(duì)我們的程序進(jìn)行綜合。若是沒有語法錯(cuò)誤則會(huì)出現(xiàn)圖6左所示的界面,如果有語法錯(cuò)誤則會(huì)出現(xiàn)圖6右所示的界面,則需要查看錯(cuò)誤報(bào)告將錯(cuò)誤的地方改正并重新綜合,直至編譯通過為止。
在綜合正確的情況下,點(diǎn)擊 Synthesize 選項(xiàng)前面的加號(hào),如圖 7 所示。
雙擊 View RTL Schematic 選項(xiàng),出現(xiàn)如圖8所示的界面。
選擇 Start with a schematic of the top-level block,點(diǎn)擊 OK 選項(xiàng),生成如下圖 9 所示界面。
可以雙擊圖 9 所示的模塊的模型,則可以看到模塊內(nèi)部的 RTL 電路,如圖 10 所示。
從圖 10 中我們可以看到生成的電路是我們用 Verilog HDL 語言描述的電路結(jié)構(gòu)。代碼的語法及電路驗(yàn)證都是正確的,但是具體的功能是否滿足我們的要求呢, 這就需要我們通過仿真來驗(yàn)證了。
在第三章中,我們會(huì)針對(duì)該代碼書寫對(duì)應(yīng)的測(cè)試文件,并且通過 Modelsim 軟件來驗(yàn)證我們的a_and_b 模塊功能是否正確。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618513 -
Xilinx
+關(guān)注
關(guān)注
73文章
2185瀏覽量
125356 -
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141764 -
硬件電路
+關(guān)注
關(guān)注
39文章
254瀏覽量
29789 -
VerilogHDL
+關(guān)注
關(guān)注
2文章
39瀏覽量
19457
發(fā)布評(píng)論請(qǐng)先 登錄
【經(jīng)驗(yàn)分享】玩轉(zhuǎn)FPGA串口通信:從“幻覺調(diào)試”到代碼解析

電路基礎(chǔ)學(xué)習(xí)資料
從單片機(jī)初學(xué)者邁向單片機(jī)工程師
linux初學(xué)者,用這樣的開發(fā)板合適嗎?
12V開關(guān)電源制作_適合初學(xué)者制作的TOP22X系列開關(guān)電源
初學(xué)者必看!4G模組Air780EPM的開機(jī)啟動(dòng)及外圍電路設(shè)計(jì)

電子工程師的電路設(shè)計(jì)經(jīng)驗(yàn)分享
基于FPGA的電子琴設(shè)計(jì)

EE-269:以太網(wǎng)802.3初學(xué)者指南

凌科電氣YU系列工業(yè)級(jí)連接器登場(chǎng),解鎖USB&amp;Type-C多模塊新體驗(yàn)!
上新 | 超全模塊超乎想象,YU系列USB&amp;amp;Type-C多模塊工業(yè)級(jí)連接器新品驚喜上市

評(píng)論