Verilog HDL數(shù)字設(shè)計(jì)教程(賀敬凱)第2章_第1頁(yè)
Verilog HDL數(shù)字設(shè)計(jì)教程(賀敬凱)第2章_第2頁(yè)
Verilog HDL數(shù)字設(shè)計(jì)教程(賀敬凱)第2章_第3頁(yè)
Verilog HDL數(shù)字設(shè)計(jì)教程(賀敬凱)第2章_第4頁(yè)
Verilog HDL數(shù)字設(shè)計(jì)教程(賀敬凱)第2章_第5頁(yè)
已閱讀5頁(yè),還剩155頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 Verilog HDL基本概念 2.1 編寫(xiě)并運(yùn)行一個(gè)簡(jiǎn)單的Verilog HDL程序 2.2 層次建模2.3 Verilog HDL的數(shù)據(jù)類(lèi)型及常量和變量2.4 編譯預(yù)處理2.5 小結(jié)習(xí)題2 第2章 Verilog HDL基本概念 2.1 編寫(xiě)并運(yùn)行一個(gè)簡(jiǎn)單的編寫(xiě)并運(yùn)行一個(gè)簡(jiǎn)單的Verilog HDL程序程序2.1.1 編寫(xiě)一個(gè)簡(jiǎn)單的編寫(xiě)一個(gè)簡(jiǎn)單的Verilog HDL程序程序一個(gè)完整的Verilog HDL程序是由一個(gè)或若干個(gè)模塊組合而成的?!纠?-1】 實(shí)現(xiàn)一個(gè)二選一多路選擇器。設(shè)計(jì)代碼如下:module mux21a(a,b,s,y);input a,b,s;output y;

2、assign y = s ? b : a; /實(shí)現(xiàn)二選一功能endmodule第2章 Verilog HDL基本概念 程序說(shuō)明:(1) module和endmodule是Verilog HDL語(yǔ)言的關(guān)鍵字,用來(lái)說(shuō)明模塊。Verilog HDL程序是由模塊構(gòu)成的,每個(gè)模塊的內(nèi)容都嵌在module和endmodule兩個(gè)語(yǔ)句之間。(2) input和output是Verilog HDL語(yǔ)言的關(guān)鍵字,用來(lái)說(shuō)明模塊的端口屬性。端口屬性有三種,即input、output和inout,分別為輸入、輸出和輸入輸出屬性。每個(gè)模塊要進(jìn)行端口列表聲明,說(shuō)明這些端口的輸入、輸出屬性。第2章 Verilog HDL基

3、本概念 (3) assign是Verilog HDL語(yǔ)言的關(guān)鍵字,用來(lái)說(shuō)明模塊內(nèi)部信號(hào)的連接關(guān)系。語(yǔ)句assign y = s ? b : a;的功能是:當(dāng)s=1時(shí),y=b;當(dāng)s=0時(shí),y=a。(4) 使用Quartus 軟件可以對(duì)設(shè)計(jì)進(jìn)行綜合,綜合出來(lái)的電路圖如圖2-1所示。 第2章 Verilog HDL基本概念 圖2-1 二選一多路選擇器第2章 Verilog HDL基本概念 由圖2-1可以看出,該設(shè)計(jì)最終實(shí)現(xiàn)的是一個(gè)二選一選擇電路。關(guān)于Verilog HDL程序的進(jìn)一步說(shuō)明:(1) Verilog HDL程序是由模塊構(gòu)成的,每個(gè)模塊的內(nèi)容都嵌在module和endmodule兩個(gè)語(yǔ)句之

4、間。每個(gè)模塊實(shí)現(xiàn)特定的功能。模塊是可以進(jìn)行層次嵌套的。正因?yàn)槿绱耍趴梢詫⒋笮偷臄?shù)字電路設(shè)計(jì)分割成不同的小模塊來(lái)實(shí)現(xiàn)特定的功能,最后通過(guò)頂層模塊調(diào)用子模塊來(lái)實(shí)現(xiàn)整體功能。(2) 每個(gè)模塊要進(jìn)行端口列表聲明,說(shuō)明輸入、輸出端口屬性,然后對(duì)模塊的功能進(jìn)行描述。第2章 Verilog HDL基本概念 (3) Verilog HDL程序的書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫(xiě)多行。(4) 除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。(5) 可以用/*.*/和/.對(duì)Verilog HDL程序的任何部分作注釋。一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋?zhuān)栽鰪?qiáng)程序

5、的可讀性和可維護(hù)性。第2章 Verilog HDL基本概念 2.1.2 Verilog HDL程序開(kāi)發(fā)環(huán)境程序開(kāi)發(fā)環(huán)境Quartus 6.0本節(jié)將簡(jiǎn)單介紹在Quartus 6.0環(huán)境下開(kāi)發(fā)Verilog HDL程序的基本操作。由于Altera FPGA教學(xué)開(kāi)發(fā)板可以很容易地設(shè)計(jì)或者購(gòu)買(mǎi)到,因此配合FPGA開(kāi)發(fā)板,使用Quartus 軟件來(lái)學(xué)習(xí)Verilog HDL語(yǔ)言,可以達(dá)到事半功倍的效果。Quartus 是Altera提供的FPGA/CPLD開(kāi)發(fā)集成環(huán)境,圖1-5是Quartus 設(shè)計(jì)流程,下面使用文本輸入設(shè)計(jì)方法結(jié)合該設(shè)計(jì)流程來(lái)介紹Quartus 軟件的使用。 第2章 Verilog H

6、DL基本概念 【例2-2】 實(shí)現(xiàn)一個(gè)跑馬燈程序設(shè)計(jì),使8個(gè)燈逆時(shí)針輪流顯示,每個(gè)燈顯示1s時(shí)間。設(shè)計(jì)代碼如下:第2章 Verilog HDL基本概念 第2章 Verilog HDL基本概念 第2章 Verilog HDL基本概念 第2章 Verilog HDL基本概念 程序說(shuō)明:(1) always語(yǔ)句是一種結(jié)構(gòu)化過(guò)程語(yǔ)句,它是Verilog HDL行為建模的基本語(yǔ)句之一。每個(gè)always語(yǔ)句代表一個(gè)獨(dú)立的執(zhí)行過(guò)程,在一個(gè)模塊內(nèi)部可以有多個(gè)always語(yǔ)句。(2) case語(yǔ)句是多路分支語(yǔ)句,其行為類(lèi)似于多路選擇器。case語(yǔ)句只能用在行為建模always語(yǔ)句中。該case語(yǔ)句根據(jù)led_ru

7、n的當(dāng)前值來(lái)決定led_run下一個(gè)狀態(tài)的值,從而控制led按照設(shè)定的順序點(diǎn)亮。(3) 本例主要用于介紹Quartus 軟件的使用,程序中各語(yǔ)句的具體含義及其用法將在后續(xù)章節(jié)予以介紹。下面詳細(xì)介紹Quartus 軟件的使用流程。 第2章 Verilog HDL基本概念 1. 創(chuàng)建工程準(zhǔn)備工作創(chuàng)建工程準(zhǔn)備工作(1) 雙擊桌面上的Quartus 圖標(biāo),打開(kāi)Quartus 軟件。也可以通過(guò)“開(kāi)始程序AlteraQuartus 6.0Quartus 6.0”打開(kāi)。(2) 選擇“FileNew”打開(kāi)New對(duì)話(huà)框,在該對(duì)話(huà)框中選擇“Verilog HDL File”,如圖2-2所示。第2章 Verilog

8、 HDL基本概念 圖2-2 選擇編輯文件及其語(yǔ)言類(lèi)型第2章 Verilog HDL基本概念 (3) 在打開(kāi)的界面中輸入Verilog源代碼,完成后點(diǎn)擊“FileSave”,并鍵入文件名為led_run,如圖2-3所示。第2章 Verilog HDL基本概念 圖2-3 鍵入源程序并存盤(pán)第2章 Verilog HDL基本概念 2. 創(chuàng)建工程創(chuàng)建工程 創(chuàng)建工程有兩種方法:第一種方法是在圖2-3中最下方選中“Create new project based on this file”,點(diǎn)擊圖2-3中的保存后即出現(xiàn)創(chuàng)建工程的其他對(duì)話(huà)框;第二種方法是利用“New Preject Wizard”創(chuàng)建工程。這

9、兩種方法創(chuàng)建工程的步驟和涉及的內(nèi)容是一致的,下面我們用第二種方法來(lái)創(chuàng)建工程。(1) 選擇“FileNew Project Wizard”,見(jiàn)圖2-4。第2章 Verilog HDL基本概念 圖2-4 選擇創(chuàng)建新工程第2章 Verilog HDL基本概念 (2) 選擇編緝工程位置、工程名稱(chēng)、頂層模塊名稱(chēng),見(jiàn)圖2-5。圖2-5 工程位置、工程名稱(chēng)、頂層模塊名第2章 Verilog HDL基本概念 (3) 加入Verilog HDL源文件,見(jiàn)圖2-6。圖2-6 將所有相關(guān)的文件都加入此工程 這一步將所有相關(guān)的文件都加入此工程。對(duì)于本例只有一個(gè)Verilog HDL文件led_run.v,將該文件添加

10、進(jìn)工程即可。第2章 Verilog HDL基本概念 (4) 選擇FPGA器件,界面見(jiàn)圖2-7。圖2-7 選擇目標(biāo)FPGA器件第2章 Verilog HDL基本概念 如果熟悉所用FPGA器件的封裝類(lèi)型、管腳數(shù)或速度,可以通過(guò)直接選擇封裝類(lèi)型、引腳數(shù)量或速度來(lái)方便快捷地選擇FPGA器件。第2章 Verilog HDL基本概念 (5) 選擇第三方的綜合工具、仿真工具或時(shí)序分析工具。圖2-8所示為Quartus 6.0用于選擇使用的第三方綜合、仿真、時(shí)序分析工具。如果要使用ModelSim作為仿真工具,可按圖2-9所示設(shè)置。第2章 Verilog HDL基本概念 圖2-8 用于選擇使用的第三方綜合、仿

11、真、時(shí)序工具第2章 Verilog HDL基本概念 圖2-9 使用ModelSim作為仿真工具的設(shè)置第2章 Verilog HDL基本概念 (6) 點(diǎn)擊Next后出現(xiàn)項(xiàng)目匯總信息,然后點(diǎn)擊Finish,至此工程創(chuàng)建完畢。工程創(chuàng)建完成后,可以查看工程的層次信息以及工程中的設(shè)計(jì)文件信息,如圖2-10所示。在查看設(shè)計(jì)文件界面時(shí),通過(guò)點(diǎn)擊文件名led_run.v,可以在右側(cè)顯示該文件的Verilog HDL代碼,并可以編輯修改該文件。 第2章 Verilog HDL基本概念 圖2-10 工程層次界面和設(shè)計(jì)文件界面 第2章 Verilog HDL基本概念 3. 編譯設(shè)置編譯設(shè)置(1) 在工程層次界面,在

12、led_run上單擊右鍵,然后點(diǎn)擊Setting,出現(xiàn)圖2-11所示的對(duì)話(huà)框。圖2-11 設(shè)置對(duì)話(huà)框第2章 Verilog HDL基本概念 圖2-11所示對(duì)話(huà)框在設(shè)計(jì)過(guò)程中經(jīng)常要用到,我們也對(duì)一些常用的功能作了簡(jiǎn)單的注釋。比如:在General選項(xiàng)卡中,可以隨時(shí)更改頂層設(shè)計(jì)文件,這樣就可以在同一個(gè)工程中對(duì)不同層次的文件進(jìn)行編譯、綜合、仿真等;在Device選項(xiàng)卡中,可以根據(jù)情況隨時(shí)選定或更改目標(biāo)器件;在Simulator Settings選項(xiàng)卡中,可以選用第三方仿真工具,可以隨時(shí)更改仿真為功能仿真或時(shí)序仿真,也可以隨時(shí)更改仿真用的仿真向量文件,等等。對(duì)于在創(chuàng)建工程過(guò)程中的錯(cuò)誤的設(shè)置,也可以通過(guò)

13、這個(gè)界面更正過(guò)來(lái)。第2章 Verilog HDL基本概念 (2) Device設(shè)置。在圖2-11中點(diǎn)擊Device,出現(xiàn)如圖2-12所示對(duì)話(huà)框,設(shè)置信息如圖2-12所示。圖2-12 Device設(shè)置對(duì)話(huà)框第2章 Verilog HDL基本概念 (3) 設(shè)置器件工作方式。圖2-12中顯示的目標(biāo)器件是我們?cè)趧?chuàng)建工程中設(shè)置的。點(diǎn)擊Device&Pin Options標(biāo)簽,彈出如圖2-13所示對(duì)話(huà)框。圖2-13 選擇配置器件的工作方式 第2章 Verilog HDL基本概念 (4) 選擇配置器件和編程方式。在圖2-13中點(diǎn)擊Configuration標(biāo)簽,可設(shè)置器件的編程方式和配置器件,設(shè)置信

14、息如圖2-14所示。圖2-14 選擇配置器件和編程方式 第2章 Verilog HDL基本概念 (5) 未用管腳設(shè)置。在圖2-14中點(diǎn)擊Unused Pins標(biāo)簽,可對(duì)未用的管腳進(jìn)行設(shè)置,設(shè)置界面如圖2-15所示。圖2-15 未用管腳設(shè)置第2章 Verilog HDL基本概念 一般情況下,我們把不用的管腳置為輸入三態(tài),原因有兩個(gè):一是SRAM等設(shè)備是低電平啟動(dòng),置成高阻態(tài)可防止錯(cuò)誤地啟動(dòng)類(lèi)似SRAM的設(shè)備;二是為了降低功耗,一般我們的設(shè)計(jì)都比較小,未用管腳較多,而未用管腳若默認(rèn)為輸出低電平,則會(huì)形成電流回路,產(chǎn)生較大的功耗。第2章 Verilog HDL基本概念 (6) 編譯整個(gè)工程,顯示編譯

15、進(jìn)度,如圖2-16所示。圖2-16 編譯進(jìn)度第2章 Verilog HDL基本概念 通常,我們的設(shè)計(jì)較小,建議選用全程編譯。如果我們的設(shè)計(jì)較大,建議按照“分析綜合器件適配裝配時(shí)序分析”的步驟一步步來(lái)編譯工程。全程編譯過(guò)程中,如果設(shè)計(jì)中有錯(cuò)誤,則Quartus 將停止編譯并給出錯(cuò)誤信息,如圖2-17所示。 第2章 Verilog HDL基本概念 圖2-17 全程編譯后出現(xiàn)報(bào)錯(cuò)信息第2章 Verilog HDL基本概念 出現(xiàn)報(bào)錯(cuò)信息后,我們找到第一個(gè)錯(cuò)誤,雙擊后可將錯(cuò)誤定位到源碼中,如圖2-17所示。從圖中可以看出,錯(cuò)誤行中的rset未定義,將其修改成reset即可。通常,源碼中的一個(gè)錯(cuò)誤可能引發(fā)

16、多個(gè)報(bào)錯(cuò)信息,因此我們將第一個(gè)錯(cuò)誤修改完成后,應(yīng)該再次進(jìn)行全程編譯,這樣一步步地修改所有錯(cuò)誤,直到?jīng)]有錯(cuò)誤。全程編譯成功后,會(huì)給出一個(gè)編譯報(bào)告,其中有許多有用的信息,如圖2-18所示。 第2章 Verilog HDL基本概念 圖2-18 全程編譯成功后的匯總信息第2章 Verilog HDL基本概念 4. 仿真仿真(1) 建立仿真文件。選擇FileNewOtherFiles后,出現(xiàn)如圖2-19所示界面。圖2-19 選擇Vector waveform file界面第2章 Verilog HDL基本概念 在圖2-19中作出圖示選擇后點(diǎn)擊OK,可看到仿真測(cè)試向量波形文件,如圖2-20所示。圖2-20

17、 仿真測(cè)試向量波形文件第2章 Verilog HDL基本概念 按圖2-20指示,雙擊左邊的空白區(qū)域后,會(huì)彈出一個(gè)對(duì)話(huà)框,在彈出的對(duì)話(huà)框中選擇“Node Finder”按鈕,則彈出如圖2-21所示對(duì)話(huà)框。 第2章 Verilog HDL基本概念 圖2-21 仿真波形信號(hào)設(shè)置第2章 Verilog HDL基本概念 圖2-21中,選擇Filter:Pins:all,然后點(diǎn)擊List,Node Found欄將列出所有輸入、輸出端口。選擇要觀察的信號(hào),點(diǎn)擊加入到觀察目標(biāo)窗口中。選擇OK,則在波形圖中加入了待觀察信號(hào)的圖形,如圖2-22所示。第2章 Verilog HDL基本概念 圖2-22 加入了待觀察

18、信號(hào)的波形圖第2章 Verilog HDL基本概念 (2) 設(shè)置仿真時(shí)間的最小間隔。本例中使用的是硬件環(huán)境提供的1 Hz的時(shí)鐘信號(hào),即時(shí)鐘周期為1 s。選擇EditGrid Size,將仿真時(shí)間的最小間隔設(shè)為1 s,設(shè)置界面如圖2-23所示。第2章 Verilog HDL基本概念 圖2-23 設(shè)置仿真時(shí)間最小間隔第2章 Verilog HDL基本概念 (3) 選擇仿真時(shí)間長(zhǎng)度為10 s。選擇EditEnd Time,將仿真時(shí)間長(zhǎng)度設(shè)為10 s,如圖2-24所示。圖2-24 設(shè)置仿真時(shí)間長(zhǎng)度第2章 Verilog HDL基本概念 (4) 編輯輸入波形。選中clk_1Hz,點(diǎn)擊設(shè)置為時(shí)鐘波形,周期

19、為1 s。選中reset,點(diǎn)擊將其設(shè)置為0,或者將前面2個(gè)周期設(shè)置為1,其余設(shè)為0。設(shè)置完成,保存,默認(rèn)文件名同工程名一致。設(shè)置好的界面如圖2-25所示。第2章 Verilog HDL基本概念 圖2-25 設(shè)置好的激勵(lì)波形圖第2章 Verilog HDL基本概念 (5) 功能仿真(前仿真)。選擇SettingsSimulator Settings,選擇Simulation mode為Functional,將仿真設(shè)置為功能仿真,設(shè)置界面見(jiàn)圖2-26。第2章 Verilog HDL基本概念 圖2-26 功能仿真設(shè)置界面第2章 Verilog HDL基本概念 點(diǎn)擊processGenerate Fu

20、nctional Simulation Netlist,產(chǎn)生功能仿真網(wǎng)表。然后選擇Start開(kāi)始仿真,仿真結(jié)果如圖2-27所示。第2章 Verilog HDL基本概念 圖2-27 功能仿真波形輸出 第2章 Verilog HDL基本概念 (6) 時(shí)序仿真(后仿真)。 功能仿真后,如果仿真波形與預(yù)想的一致,則開(kāi)始做時(shí)序仿真,檢查波形延時(shí)對(duì)設(shè)計(jì)有沒(méi)有影響。選擇SettingsSimulator Settings,選擇Simulation mode為T(mén)iming,將仿真設(shè)置為時(shí)序仿真,設(shè)置界面見(jiàn)圖2-28。 第2章 Verilog HDL基本概念 圖2-28 時(shí)序仿真設(shè)置界面第2章 Verilog

21、HDL基本概念 點(diǎn)擊Start開(kāi)始時(shí)序仿真。時(shí)序仿真比功能仿真要慢一些。仿真波形如圖2-29所示。從圖中可以看出led_run有毛刺,同時(shí)時(shí)序仿真存在延時(shí)。但由于延時(shí)時(shí)間很短,為幾納秒,所以在波形中看起來(lái)不是很明顯。第2章 Verilog HDL基本概念 圖2-29 時(shí)序仿真波形輸出 第2章 Verilog HDL基本概念 5. 引腳鎖定引腳鎖定選擇AssignmentsPins,彈出如圖2-30所示對(duì)話(huà)框,按圖示進(jìn)行引腳鎖定,然后保存。圖2-30 引腳鎖定對(duì)話(huà)框圖第2章 Verilog HDL基本概念 6. 把程序下載到硬件上進(jìn)行測(cè)試把程序下載到硬件上進(jìn)行測(cè)試首先安裝USB-Blaster編

22、程器。將USB-Blaster編程器的USB口插入PC機(jī),如果是第一次使用USB-Blaster,則PC機(jī)會(huì)彈出提示,要求安裝驅(qū)動(dòng)程序FTD2XX.sys。根據(jù)提示,將驅(qū)動(dòng)程序路徑指定為“C:alteraquartus60driversusb-blaster”即可正確安裝USB-Blaster編程器。 第2章 Verilog HDL基本概念 然后設(shè)置USB硬件端口,選用USB編程器對(duì)FPGA編程,操作界面及選項(xiàng)如圖2-31所示。具體操作步驟分3步。第1步,選擇編程下載方式(Mode)為JTAG模式。這種模式可將程序下載至FPGA中運(yùn)行,但斷電后下載到FPGA中的程序即消失,下次調(diào)試程序時(shí)還需要

23、重新下載。如果要保存下載的程序而不必每次調(diào)試都重新下載,則可以選擇其他下載模式,將需要下載的程序保存在程序存儲(chǔ)器中,每次上電時(shí)FPGA從程序存儲(chǔ)器中取出程序運(yùn)行。第2章 Verilog HDL基本概念 第2步,點(diǎn)擊右上角的Hardware Setup選擇下載電纜,在彈出的對(duì)話(huà)框中可以看到“USB-Blaster”,這說(shuō)明USB-Blaste編程器已安裝完成,若沒(méi)有出現(xiàn)“USB-Blaster”,則需要重新安裝USB-Blaste編程器。第3步,雙擊“USB-Blaster”選項(xiàng),則在Currently selected hardware后面出現(xiàn)USB-BlasteUSB-0。然后點(diǎn)擊Close

24、退出對(duì)話(huà)框。完成設(shè)置的對(duì)話(huà)框如圖2-32所示,此時(shí)就可以用USB編程器對(duì)FPGA進(jìn)行編程了。第2章 Verilog HDL基本概念 圖2-31 設(shè)置USB硬件端口第2章 Verilog HDL基本概念 圖2-32 下載界面第2章 Verilog HDL基本概念 在圖2-32中,點(diǎn)擊Add File,彈出如圖2-33所示的對(duì)話(huà)框,然后選取run_led.sof文件作為下載文件,所有準(zhǔn)備工作完成后的界面如圖2-32所示。第2章 Verilog HDL基本概念 圖2-33 選擇下載文件第2章 Verilog HDL基本概念 在圖2-32中選中,然后在Quartus 軟件界面下選擇ToolsProgr

25、ammer,或者點(diǎn)擊圖2-32中的Start按鈕,程序就下載到FPGA中了。程序下載后,就可以看到硬件板上的跑馬燈的效果了。需要說(shuō)明的是,上文介紹了使用Quartus 軟件的完整的數(shù)字系統(tǒng)設(shè)計(jì)流程,包括設(shè)計(jì)輸入編輯、設(shè)計(jì)分析與綜合、適配、編程文件匯編(裝配)、時(shí)序參數(shù)提取以及編程下載幾個(gè)步驟。我們?cè)诤笪闹兄饕墙栌肣uartus 軟件來(lái)學(xué)習(xí)Verilog HDL語(yǔ)言,因此對(duì)于整個(gè)設(shè)計(jì)流程我們可能只用其中的一部分,并且不同的例題可能用到的部分也不相同。第2章 Verilog HDL基本概念 2.2 層層 次次 建建 模模在詳細(xì)討論Verilog語(yǔ)言之前,我們首先需要理解數(shù)字系統(tǒng)設(shè)計(jì)中的層次建模的

26、概念。本章通過(guò)一個(gè)典型的實(shí)例來(lái)介紹層次建模的方法?!纠?-3】 實(shí)現(xiàn)一個(gè)1位全加器。 1位全加器的Verilog HDL實(shí)現(xiàn)代碼如下:第2章 Verilog HDL基本概念 /*以下為全加器頂層模塊*/module f_adder(ain,bin,cin,cout,sum);output cout,sum;input ain,bin,cin;wire ain,bin,cin,cout,sum;wire d,e,f;h_adder u0(ain,bin,d,e);h_adder u1(e,cin,f,sum);or2a u2(d,f,cout);endmodule/*以下為半加器模塊*/第2章

27、Verilog HDL基本概念 module h_adder(a,b,co,so);output co,so;input a,b;wire a,b,co,so,bbar;and and2(co,a,b);not not1(bbar,b);xnor xnor2(so,a,bbar);endmodule第2章 Verilog HDL基本概念 /*以下為或門(mén)模塊*/module or2a(a,b,c);output c;input a,b;wire a,b,c;assign c=a | b;endmodule使用Quartus 軟件綜合的全加器的電路圖如圖2-34所示。第2章 Verilog HDL

28、基本概念 圖2-34 全加器f_adder電路圖第2章 Verilog HDL基本概念 從圖2-34可見(jiàn),全加器是由兩個(gè)半加器和一個(gè)或門(mén)組成的。雙擊圖中的半加器,可以看出半加器又由與門(mén)、異或門(mén)和非門(mén)構(gòu)成,如圖2-35所示。圖2-35 半加器h_adder電路圖第2章 Verilog HDL基本概念 程序說(shuō)明:(1) 語(yǔ)句assign c=a | b; 中,“|”是按位或運(yùn)算符,其功能是將a與b按位或的結(jié)果賦給信號(hào)c。(2) 語(yǔ)句wire a,b,c; 中,wire是線(xiàn)網(wǎng)數(shù)據(jù)類(lèi)型,表示a、b、c是線(xiàn)網(wǎng),是硬件單元之間的連接。(3) 一個(gè)Verilog HDL模塊內(nèi)部的實(shí)現(xiàn)方式有多種。本例中,在或

29、門(mén)模塊內(nèi)部使用了數(shù)據(jù)流語(yǔ)句assign;在半加器模塊內(nèi)部調(diào)用了基本邏輯門(mén)原語(yǔ);在全加器模塊內(nèi)部調(diào)用了半加器模塊和或門(mén)模塊。第2章 Verilog HDL基本概念 (4) 在全加器模塊中有兩處調(diào)用了半加器:h_adder u0(ain,bin,d,e);和h_adder u1(e,cin,f,sum);。每次調(diào)用均給出一個(gè)唯一的實(shí)例名,而且調(diào)用時(shí)端口列表名稱(chēng)不同。在Verilog HDL設(shè)計(jì)中,在模塊調(diào)用的時(shí)候,可以按順序?qū)⒛K定義的端口與外部環(huán)境中的信號(hào)連接起來(lái),這種方法稱(chēng)為“按順序連接”。h_adder u0(ain,bin,d,e);調(diào)用將ain、bin、d、e分別與模塊定義中的端口a、b

30、、co、so連接;h_adder u1(e,cin,f,sum);調(diào)用將e、cin、f、sum分別與模塊定義中的端口a、b、co、so連接。(5) 全加器的仿真波形如圖2-36所示。從仿真波形可以看出,該設(shè)計(jì)完成了一位全加器的功能。 第2章 Verilog HDL基本概念 圖2-36 一位全加器功能仿真波形第2章 Verilog HDL基本概念 關(guān)于該例的進(jìn)一步說(shuō)明:(1) 層次建模。數(shù)字電路設(shè)計(jì)中有兩種基本的設(shè)計(jì)方法:自底向上和自頂向下。在自頂向下設(shè)計(jì)方法中,我們首先定義頂層功能塊,隨后將頂層模塊分解為多個(gè)必要的子模塊,然后進(jìn)一步對(duì)各個(gè)子模塊進(jìn)行分解,直到達(dá)到無(wú)法進(jìn)一步分解的底層功能塊,如圖

31、2-37所示。 第2章 Verilog HDL基本概念 圖2-37 自頂向下設(shè)計(jì)方法第2章 Verilog HDL基本概念 在自底向上設(shè)計(jì)方法中,我們首先對(duì)現(xiàn)有的功能塊進(jìn)行分析,然后使用這些模塊來(lái)搭建規(guī)模大一些的功能塊,直至得到頂層模塊,如圖2-38所示。第2章 Verilog HDL基本概念 圖2-38 自底向上設(shè)計(jì)方法第2章 Verilog HDL基本概念 在典型的設(shè)計(jì)中,這兩種方法是混合使用的。為了說(shuō)明層次建模的概念,下面我們以全加器為例進(jìn)行說(shuō)明。全加器的電路圖如圖2-39所示。第2章 Verilog HDL基本概念 圖2-39 全加器f_adder電路圖第2章 Verilog HDL基

32、本概念 圖2-39中的全加器是由兩個(gè)半加器和一個(gè)或門(mén)組成的,而半加器又由與門(mén)、異或門(mén)和非門(mén)構(gòu)成,如圖2-40所示。圖2-40 半加器h_adder電路圖第2章 Verilog HDL基本概念 綜上所述,全加器的設(shè)計(jì)層次如圖2-41所示。圖2-41 全加器的設(shè)計(jì)層次第2章 Verilog HDL基本概念 使用自頂向下的方法進(jìn)行設(shè)計(jì),首先需要說(shuō)明全加器的功能。在使用半加器和或門(mén)搭建頂層模塊之后,進(jìn)一步使用與門(mén)、異或門(mén)和非門(mén)來(lái)實(shí)現(xiàn)半加器。這樣就可以將較大的功能塊分解為較小的功能塊,直到無(wú)法繼續(xù)分解。對(duì)于本例,我們可以認(rèn)為基本門(mén)就是最小的功能塊,不可再分解。事實(shí)上,這些基本門(mén)是可以繼續(xù)分解的,這里就隱

33、含著自底向上的設(shè)計(jì)方法。各種門(mén)級(jí)元件都是由MOS晶體管級(jí)開(kāi)關(guān)元件構(gòu)成的,都經(jīng)過(guò)了優(yōu)化設(shè)計(jì),都可以用來(lái)搭建高層模塊。第2章 Verilog HDL基本概念 對(duì)于本例來(lái)說(shuō),自頂向下的設(shè)計(jì)方法和自底向上的設(shè)計(jì)方法按相反的方向獨(dú)立地進(jìn)行,在門(mén)級(jí)會(huì)合。這樣,電路設(shè)計(jì)者使用開(kāi)關(guān)級(jí)原語(yǔ)創(chuàng)建了一個(gè)底層元件庫(kù),而邏輯設(shè)計(jì)者也通過(guò)使用自頂向下的方法將整個(gè)設(shè)計(jì)分解為由庫(kù)單元構(gòu)成的結(jié)構(gòu)描述。 第2章 Verilog HDL基本概念 (2) 模塊實(shí)例化。在頂層模塊中調(diào)用了兩個(gè)半加器子模塊和一個(gè)或門(mén)子模塊。模塊的調(diào)用過(guò)程稱(chēng)為模塊的實(shí)例化,調(diào)用模塊后創(chuàng)建的對(duì)象稱(chēng)為實(shí)例。模塊實(shí)例化是實(shí)現(xiàn)自頂向下設(shè)計(jì)的一種重要途徑。模塊實(shí)例化

34、可以是多層次的,一個(gè)調(diào)用了較低層次模塊的模塊,可以被更高層次的模塊調(diào)用。例如,上例中,我們可以先設(shè)計(jì)一個(gè)異或門(mén)模塊,這個(gè)模塊在半加器中被實(shí)例化,半加器模塊又在全加器模塊中被實(shí)例化。第2章 Verilog HDL基本概念 需要說(shuō)明的是,模塊的調(diào)用(實(shí)例化)與C語(yǔ)言中的函數(shù)調(diào)用有著本質(zhì)的區(qū)別。模塊被調(diào)用后會(huì)生成一個(gè)實(shí)例,這個(gè)實(shí)例可以使用實(shí)例名對(duì)其進(jìn)行唯一標(biāo)識(shí)。如果在某個(gè)模塊內(nèi)出現(xiàn)了多次模塊調(diào)用,則各次調(diào)用所指定的實(shí)例名必須不相同,即在同一模塊內(nèi)不能出現(xiàn)兩個(gè)相同的實(shí)例名。同一個(gè)上級(jí)模塊可以對(duì)多個(gè)下級(jí)模塊進(jìn)行調(diào)用,也可以對(duì)一個(gè)下級(jí)模塊進(jìn)行多次調(diào)用。這樣,就會(huì)在同一電路中生成多個(gè)一模一樣的電路結(jié)構(gòu)單元,

35、這些電路結(jié)構(gòu)單元就是每次模塊調(diào)用后生成的模塊實(shí)例。為了對(duì)這些相同的電路結(jié)構(gòu)單元進(jìn)行區(qū)分,為它們所取的模塊實(shí)例名應(yīng)該是各不相同的。第2章 Verilog HDL基本概念 實(shí)例名和模塊名的區(qū)別是:模塊名標(biāo)志著不同的模塊,用來(lái)區(qū)分電路單元的不同種類(lèi);而實(shí)例名則標(biāo)志著不同的模塊實(shí)例,用來(lái)區(qū)別電路系統(tǒng)中的不同硬件電路單元。第2章 Verilog HDL基本概念 (3) 端口關(guān)聯(lián)。在模塊實(shí)例化中,端口起著非常重要的作用。端口是模塊與外界環(huán)境交互的接口,事實(shí)上,我們可以將模塊理解為一顆芯片,端口可理解為芯片的引腳。對(duì)于外部環(huán)境來(lái)說(shuō),模塊內(nèi)部是不可見(jiàn)的,對(duì)模塊的實(shí)例化只能通過(guò)其端口進(jìn)行。這種特點(diǎn)為設(shè)計(jì)者提供了

36、很大的靈活性,只要端口保持不變,就可以對(duì)模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)作任意修改。在模塊實(shí)例化中,可以使用兩種方法將模塊定義的端口與外部環(huán)境中的信號(hào)連接起來(lái):位置關(guān)聯(lián)法和名稱(chēng)關(guān)聯(lián)法。 第2章 Verilog HDL基本概念 位置關(guān)聯(lián)法。在位置關(guān)聯(lián)方法下,端口連接表的格式為:(,)這些信號(hào)端口將與在模塊定義時(shí)給出的“端口列表”中出現(xiàn)的各個(gè)模塊端口依次相連:端口連接表中的端口1與第1個(gè)模塊端口相連,端口連接表中的端口2與第2個(gè)模塊端口相連,依此類(lèi)推。在全加器的Verilog HDL描述中,采用了位置關(guān)聯(lián)的方法,即以下三條實(shí)例語(yǔ)句:h_adder u0(ain,bin,d,e); h_adder u1(e,ci

37、n,f,sum);or2a u2(d,f,cout);第2章 Verilog HDL基本概念 名稱(chēng)關(guān)聯(lián)法。在名稱(chēng)關(guān)聯(lián)方法下,端口連接表的格式為:(.(),.(), .()端口連接表內(nèi)顯式地指明了與每個(gè)外部信號(hào)端口相連的模塊端口名,即模塊端口1所代表的端口將與端口1相連,依此類(lèi)推。在全加器的Verilog HDL描述中,若采用名稱(chēng)關(guān)聯(lián)的方法,則需要用以下三條實(shí)例語(yǔ)句來(lái)替換相應(yīng)的位置關(guān)聯(lián)語(yǔ)句: 第2章 Verilog HDL基本概念 h_adder u0(.a(ain),.b(bin),.co(d),.so(e); /替換h_adder u0(ain,bin,d,e);h_adder u1(.a(

38、e),.b(cin),.co(f),.so(sum); /替換h_adder u1(e,cin,f,sum);or2a u2(.a(d),.b(f),.c(cout); /替換or2a u2(d,f,cout);需要說(shuō)明的是,不能在同一個(gè)端口連接表內(nèi)混合使用名稱(chēng)關(guān)聯(lián)和位置關(guān)聯(lián)。例如下面這條語(yǔ)句是非法的:h_adder u0(ain,.b(bin),.co(d),.so(e); /同時(shí)使用名稱(chēng)關(guān)聯(lián)和位置關(guān)聯(lián)是非法的 第2章 Verilog HDL基本概念 但對(duì)于不同的實(shí)例語(yǔ)句,則可以選擇不同的端口關(guān)聯(lián)方法。如下面的語(yǔ)句共存于同一個(gè)模塊中是合法的:h_adder u0(.a(ain),.b(bin

39、),.co(d),.so(e);h_adder u1(e,cin,f,sum);另外,在端口名稱(chēng)關(guān)聯(lián)方法下,模塊端口和信號(hào)端口的連接關(guān)系被顯式地說(shuō)明,因此端口連接表內(nèi)各項(xiàng)的排列順序?qū)Χ丝谶B接關(guān)系是沒(méi)有影響的。例如,在全加器中對(duì)于半加器的實(shí)例化語(yǔ)句可寫(xiě)成:h_adder u0(.so(e),.co(d),.b(bin),.a(ain); /替換h_adder u0(.a(ain),.b(bin),.co(d),.so(e);這樣,在大型設(shè)計(jì)中可以避免端口連接錯(cuò)誤。 第2章 Verilog HDL基本概念 2.3 Verilog HDL的數(shù)據(jù)類(lèi)型及常量和變量的數(shù)據(jù)類(lèi)型及常量和變量數(shù)據(jù)類(lèi)型是用來(lái)表示

40、數(shù)字電路硬件中的數(shù)據(jù)存儲(chǔ)和傳送元素的,其中reg型、wire型、integer型、parameter型是四個(gè)最基本的數(shù)據(jù)類(lèi)型。Verilog HDL中也有常量和變量之分,它們分別屬于以上這些類(lèi)型。 第2章 Verilog HDL基本概念 2.3.1 變量及其數(shù)據(jù)類(lèi)型變量及其數(shù)據(jù)類(lèi)型變量就是在程序運(yùn)行過(guò)程中其值可以改變的量。變量有多種數(shù)據(jù)類(lèi)型,下面介紹幾個(gè)最基本的數(shù)據(jù)類(lèi)型:reg型、wire型、integer型和memory型。1. 值的種類(lèi)值的種類(lèi)Verilog HDL使用四值邏輯來(lái)對(duì)實(shí)際的硬件電路建模,四值邏輯如表2-1所示。 第2章 Verilog HDL基本概念 第2章 Verilog

41、HDL基本概念 2. wire類(lèi)型類(lèi)型wire表示硬件單元之間的連接,就像真實(shí)的電路中一樣。wire是由其連接器件的輸出端連續(xù)驅(qū)動(dòng)的。如果沒(méi)有驅(qū)動(dòng)源,則wire的值為z。如果沒(méi)有顯式地說(shuō)明為向量,則默認(rèn)wire型變量的位寬為1。wire型數(shù)據(jù)常用來(lái)表示以assign關(guān)鍵字指定的組合邏輯信號(hào)。Verilog HDL程序模塊中的輸入/輸出信號(hào)類(lèi)型缺省時(shí)自動(dòng)定義為wire型。wire型信號(hào)可以用作任何表達(dá)式的輸入,也可以用作“assign”語(yǔ)句或?qū)嵗妮敵?。?章 Verilog HDL基本概念 wire型信號(hào)的格式如下:wire n-1:0 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i; /共有i條總線(xiàn),每條

42、總線(xiàn)內(nèi)有n條線(xiàn)路或 wire n:1 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i;其中:wire是wire型數(shù)據(jù)的確認(rèn)符;n-1:0和n:1代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位(bit);最后是數(shù)據(jù)的名字。如果一次定義多個(gè)數(shù)據(jù),則數(shù)據(jù)名之間用逗號(hào)隔開(kāi)。聲明語(yǔ)句的最后要用分號(hào)表示語(yǔ)句結(jié)束。例如:第2章 Verilog HDL基本概念 wire a; /定義了一個(gè)1位的wire型數(shù)據(jù)wire 7:0 b; /定義了一個(gè)8位的wire型數(shù)據(jù)wire 4:1 c, d; /定義了二個(gè)4位的wire型數(shù)據(jù)第2章 Verilog HDL基本概念 3. reg類(lèi)型類(lèi)型寄存器用來(lái)表示存儲(chǔ)元件,它保持原有的數(shù)值,直到被改寫(xiě)。注意

43、,不要將這里的寄存器與實(shí)際電路中的由觸發(fā)器構(gòu)成的硬件寄存器相混淆。在Verilog HDL中,reg僅僅意味著一個(gè)保存數(shù)值的變量。與wire不同,寄存器不需要驅(qū)動(dòng)源,而且也不像硬件寄存器那樣需要時(shí)鐘信號(hào)。在任何時(shí)刻,寄存器的值都可以通過(guò)賦值來(lái)改變。寄存器是數(shù)據(jù)存儲(chǔ)單元的抽象。寄存器數(shù)據(jù)類(lèi)型中最常用的是reg類(lèi)型,通過(guò)賦值語(yǔ)句可以改變寄存器存儲(chǔ)的值。reg類(lèi)型數(shù)據(jù)的缺省初始值為不定值x。 第2章 Verilog HDL基本概念 reg型數(shù)據(jù)的格式如下:reg n-1:0 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i;或 reg n:1 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i;其中:reg是reg型數(shù)據(jù)的確認(rèn)標(biāo)識(shí)符;n-1

44、:0和n:1代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位(bit);最后的是數(shù)據(jù)的名字。如果一次定義多個(gè)數(shù)據(jù),則數(shù)據(jù)名之間用逗號(hào)隔開(kāi)。聲明語(yǔ)句的最后要用分號(hào)表示語(yǔ)句結(jié)束。例如: 第2章 Verilog HDL基本概念 reg rega; /定義了一個(gè)1位的名為rega的reg型數(shù)據(jù)reg 3:0 regb; /定義了一個(gè)4位的名為regb的reg型數(shù)據(jù)reg 4:1 regc, regd; /定義了兩個(gè)4位的名字分別為regc和regd的reg型數(shù)據(jù)第2章 Verilog HDL基本概念 【例2-4】 二選一數(shù)據(jù)選擇器示例。module mux21a(a,b,s,y);input wire a,b,s;o

45、utput reg y;always (a,b,s)if(s=1) y=b;else y=a;endmodule第2章 Verilog HDL基本概念 程序說(shuō)明:(1) 在模塊中,輸入端口只能為wire類(lèi)型,輸出端口可以為wire類(lèi)型,也可以為reg類(lèi)型。通常情況下,如果輸出端口在always語(yǔ)句中使用,則必須聲明為reg類(lèi)型。(2) if(s=1) y=b;else y=a;為條件語(yǔ)句結(jié)構(gòu),表達(dá)的意思是當(dāng)s為1時(shí)y=b,否則y=a。條件語(yǔ)句只能用在always語(yǔ)句中。 第2章 Verilog HDL基本概念 關(guān)于reg類(lèi)型的進(jìn)一步說(shuō)明:(1) reg型數(shù)據(jù)常用來(lái)表示“always”模塊內(nèi)的指

46、定信號(hào)。通常,在設(shè)計(jì)中要由“always”塊通過(guò)使用行為描述語(yǔ)句來(lái)表達(dá)邏輯關(guān)系。在“always”塊內(nèi)被賦值的每一個(gè)信號(hào)都必須定義成reg型。 第2章 Verilog HDL基本概念 (2) 對(duì)于reg型數(shù)據(jù),其賦值語(yǔ)句的作用就象改變一組觸發(fā)器的存儲(chǔ)單元的值。在Verilog中有許多構(gòu)造用來(lái)控制何時(shí)或是否執(zhí)行這些賦值語(yǔ)句。這些控制構(gòu)造可用來(lái)描述硬件觸發(fā)器的各種具體情況,如時(shí)鐘上升沿等,或用來(lái)描述具體判斷邏輯的細(xì)節(jié),如各種多路選擇器。reg型數(shù)據(jù)可以賦正值,也可以賦負(fù)值。但當(dāng)一個(gè)reg型數(shù)據(jù)是一個(gè)表達(dá)式中的操作數(shù)時(shí),它的值被當(dāng)作是無(wú)符號(hào)值,即正值。例如:當(dāng)一個(gè)四位的寄存器用作表達(dá)式中的操作數(shù)時(shí),

47、如果開(kāi)始寄存器被賦以值-1,則在表達(dá)式中進(jìn)行運(yùn)算時(shí),其值被認(rèn)為是15。第2章 Verilog HDL基本概念 (3) reg型只表示被定義的信號(hào)將用在“always”塊內(nèi),并不是說(shuō)reg型信號(hào)一定是寄存器或觸發(fā)器的輸出。雖然reg型信號(hào)常常是寄存器或觸發(fā)器的輸出,但并不一定總是這樣。第2章 Verilog HDL基本概念 4. integer類(lèi)型類(lèi)型除了reg數(shù)據(jù)類(lèi)型外,Verilog還支持integer寄存器數(shù)據(jù)類(lèi)型。整數(shù)是一種通用的寄存器數(shù)據(jù)類(lèi)型,用于對(duì)數(shù)據(jù)進(jìn)行操作,使用關(guān)鍵字integer進(jìn)行聲明。整數(shù)的默認(rèn)位寬為32位。通常,聲明為reg類(lèi)型的寄存器變量為無(wú)符號(hào)數(shù),而整數(shù)類(lèi)型的寄存器變

48、量則為有符號(hào)數(shù)。 第2章 Verilog HDL基本概念 5. 向量向量wire和reg型的數(shù)據(jù)均可以聲明為向量(位寬大于1)。如果在聲明中沒(méi)有指定位寬,則默認(rèn)為標(biāo)量(1位)。向量通過(guò)MSB : LSB進(jìn)行說(shuō)明,方括號(hào)中左邊的數(shù)總是代表向量的最高有效位。例如:wire0:31 addr; reg7:0 data;定義了向量addr和data,則向量addr的最高有效位為它的第0位,向量data的最高有效位為它的第7位。 第2章 Verilog HDL基本概念 【例2-5】 一個(gè)使用多種數(shù)據(jù)類(lèi)型的程序片斷。integer M;reg3:0A;reg7:0B;initialbeginM=-1; /

49、M為32位整數(shù),采用補(bǔ)碼形式存放,補(bǔ)碼形式為32個(gè)1A=M; /A為4位無(wú)符號(hào)數(shù),截取M的低4位賦給A:1111B=A; /B為8位無(wú)符號(hào)數(shù),將A零擴(kuò)展后送給B:00001111B=A+14; /B為29:11101A=A+14; /A+14為29,截取低4位送給A:1101end第2章 Verilog HDL基本概念 程序說(shuō)明:(1) 程序中定義了3個(gè)變量,即1個(gè)整型變量M,2個(gè)寄存型變量A和B。其中,整型變量是有符號(hào)數(shù),而寄存器變量是無(wú)符號(hào)數(shù)。(2) M=-1;是將-1賦值給變量M,在內(nèi)存中采用補(bǔ)碼的形式存放,故M=32hffffffff。(3) A=M;是將變量M賦值給變量A,由于變量A

50、是4位的,故將M的補(bǔ)碼形式的低4位賦給A。第2章 Verilog HDL基本概念 (4) B=A;是將A的值賦給B,因?yàn)锽是8位無(wú)符號(hào)數(shù),A是4位無(wú)符號(hào)數(shù),所以將A賦值給B時(shí),還需要將A高位零擴(kuò)展4位后賦給B。(5) A=A+14;是將A+14的結(jié)果賦給A,因?yàn)锳+14的結(jié)果為5位,所以在賦值給A時(shí),需要截取低4位。 第2章 Verilog HDL基本概念 6. memory型型Verilog HDL通過(guò)對(duì)reg型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器建模,可以描述RAM型存儲(chǔ)器、ROM型存儲(chǔ)器、寄存器文件。數(shù)組中的每一個(gè)單元通過(guò)一個(gè)數(shù)組索引進(jìn)行尋址。在Verilog HDL中沒(méi)有多維數(shù)組存在?!纠?-6】

51、存儲(chǔ)器建模。 第2章 Verilog HDL基本概念 module rom(clk,rst,rd,data,addr);input clk,rst,rd; /rd為讀使能信號(hào)input2:0 addr; /建立的存儲(chǔ)器有8個(gè)地址空間output reg7:0 data; /數(shù)據(jù)是8位的reg7:0 memory0:7; /8 8位數(shù)據(jù)的存儲(chǔ)器always (posedge clk,posedge rst)if(rst)第2章 Verilog HDL基本概念 begin: init /該順序塊用于初始化ROM值memory0 = 8b0000_0001;memory1 = 8b0000_0010

52、;memory2 = 8b0000_0100;memory3 = 8b0000_1000;memory4 = 8b0001_0000;memory5 = 8b0010_0000;memory6 = 8b0100_0000;memory7 = 8b1000_0000; endelse第2章 Verilog HDL基本概念 begin: read /該順序塊用于讀取ROM值if(rd) data=memoryaddr; endendmodule程序說(shuō)明:(1) reg7:0 memory0:7定義了一個(gè)存儲(chǔ)器,reg7:0定義了這個(gè)存儲(chǔ)器中每一個(gè)存儲(chǔ)單元的大小為8位,而memory0:7定義了這個(gè)

53、存儲(chǔ)器中有8個(gè)這樣的存儲(chǔ)單元。也就是說(shuō),該存儲(chǔ)器有8個(gè)8位的數(shù)據(jù),該存儲(chǔ)器的地址范圍為從0到7。 第2章 Verilog HDL基本概念 (2) 對(duì)存儲(chǔ)器進(jìn)行尋址的地址索引可以是表達(dá)式,而且表達(dá)式的值可以取決于電路中其他寄存器的值,這樣就可以對(duì)存儲(chǔ)器的不同單元進(jìn)行操作。例如,data=memoryaddr根據(jù)addr的不同值對(duì)存儲(chǔ)器進(jìn)行尋址。(3) ROM可以用來(lái)實(shí)現(xiàn)組合邏輯電路功能,本例中ROM實(shí)現(xiàn)的是一個(gè)3-8線(xiàn)譯碼器。第2章 Verilog HDL基本概念 2.3.2 常量及其數(shù)據(jù)類(lèi)型常量及其數(shù)據(jù)類(lèi)型常量是指其值不能被改變的量。常量也有多種數(shù)據(jù)類(lèi)型,如整型、參數(shù)型等。下面分別予以介紹。1

54、. 數(shù)字聲明數(shù)字聲明在Verilog HDL中,整型常量即整常數(shù)有以下四種進(jìn)制表示形式:二進(jìn)制整數(shù)(b或B)、十進(jìn)制整數(shù)(d或D)、十六進(jìn)制整數(shù)(h或H)和八進(jìn)制整數(shù)(o或O)。第2章 Verilog HDL基本概念 數(shù)字表達(dá)方式有以下三種:(1) ,這是一種全面的描述方式。(2) ,在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機(jī)器系統(tǒng)決定,但至少為32位)。(3) ,在這種描述方式中,進(jìn)制缺省為十進(jìn)制。在表達(dá)式中,位寬指明了數(shù)字的精確位數(shù),即該數(shù)在二進(jìn)制數(shù)形式下的位數(shù)。例如:8b10101001 /位寬為8的數(shù)的二進(jìn)制表示8ha5 /位寬為8的數(shù)的十六進(jìn)制表示,等價(jià)于8b101001

55、01第2章 Verilog HDL基本概念 2. x和和z值值在數(shù)字電路中,x代表不定值,z代表高阻值。一個(gè)x可以用來(lái)定義十六進(jìn)制數(shù)的四位狀態(tài),八進(jìn)制數(shù)的三位狀態(tài),二進(jìn)制數(shù)的一位狀態(tài)。z的表示方式同x類(lèi)似。z還有一種表達(dá)方式是可以寫(xiě)作“?”。例如:第2章 Verilog HDL基本概念 4b10 x0/位寬為4的二進(jìn)制數(shù)從低位數(shù)起第二位為不定值4b101z/位寬為4的二進(jìn)制數(shù)從低位數(shù)起第一位為高阻值12dz/等價(jià)于12bzzzzzzzzzzzz,位寬為12的十進(jìn)制數(shù)其值為高阻值(第一種表達(dá)方式)12d?/同上(第二種表達(dá)方式)8h4x/位寬為8的十六進(jìn)制數(shù)其低四位值為不定值,等價(jià)于8b0100

56、 xxxx第2章 Verilog HDL基本概念 3. 負(fù)數(shù)負(fù)數(shù)一個(gè)數(shù)字可以被定義為負(fù)數(shù),只需在位寬表達(dá)式前加一個(gè)減號(hào),減號(hào)必須寫(xiě)在數(shù)字定義表達(dá)式的最前面。注意減號(hào)不可以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具體的數(shù)之間。例如:-8d4/這個(gè)表達(dá)式代表4的補(bǔ)數(shù)(用八位二進(jìn)制數(shù)表示)8d-4/非法格式第2章 Verilog HDL基本概念 4. 下劃線(xiàn)下劃線(xiàn)下劃線(xiàn)可以分隔開(kāi)數(shù)的表達(dá),以提高程序可讀性,但它不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間。例如:16b1010_1011_1111_1010 /合法格式8b_0011_1010 /非法格式 第2章 Verilog HDL基本概念 當(dāng)常量

57、不說(shuō)明位數(shù)時(shí),默認(rèn)值是32位。例如:1032d1032b10101=32d1=32b1-1=-32d1=32hFFFFFFFFBX=32BX=32HXXXXXXXX 第2章 Verilog HDL基本概念 5. 參數(shù)參數(shù)(parameter)型型在Verilog HDL中用parameter來(lái)定義常量,即用parameter定義一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量,稱(chēng)為符號(hào)常量,即標(biāo)識(shí)符形式的常量。采用標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性和可維護(hù)性。parameter型數(shù)據(jù)是一種常數(shù)型的數(shù)據(jù),其說(shuō)明格式如下:parameter參數(shù)名1表達(dá)式,參數(shù)名2表達(dá)式, , 參數(shù)名n表達(dá)式;第2章 Verilog H

58、DL基本概念 parameter是參數(shù)型數(shù)據(jù)的確認(rèn)符,確認(rèn)符后跟著一個(gè)用逗號(hào)分隔開(kāi)的賦值語(yǔ)句表。在每一個(gè)賦值語(yǔ)句的右邊必須是一個(gè)常數(shù)表達(dá)式。也就是說(shuō),該表達(dá)式只能包含數(shù)字或先前已定義過(guò)的參數(shù)。例如:parameter msb=-3b1; /定義參數(shù)msb為常量7parameter e=2_5; /定義常數(shù)參數(shù)e=25parameter byte_size=8, byte_msb=byte_size-1; /用常數(shù)表達(dá)式賦值參數(shù)型常數(shù)經(jīng)常用于定義延遲時(shí)間和變量寬度。在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞改變?cè)诒灰媚K中已定義的參數(shù)。 第2章 Verilog HDL基本概念 【例2-7】 設(shè)計(jì)參數(shù)型N

59、位加法器。module add_N( X, Y, sum, co);parameter N=4;input N-1: 0 X, Y;output N-1: 0 sum;output co;assign co, sum = X + Y;endmodule/16位加法器只需要調(diào)用參數(shù)型N位加法器即可module add_16(X, Y, s, c);第2章 Verilog HDL基本概念 input 15 : 0 X, Y;output 15 : 0 s;output c;add_N #(16) add16(X, Y, s, c);endmodule/8位加法器只需要調(diào)用參數(shù)型N位加法器即可第2章

60、 Verilog HDL基本概念 module add_8(X, Y, s, c);input 7 : 0 X, Y;output 7 : 0 s;output c;add_N add8(X, Y, s, c);defparam add8.N=8;endmodule第2章 Verilog HDL基本概念 程序說(shuō)明:(1) 在調(diào)用add_N模塊時(shí),可用#(16)使參數(shù)N的值變?yōu)?6,從而使模塊功能變?yōu)?6位加法器,具體實(shí)現(xiàn)語(yǔ)句為add_N #(16) add16(X, Y, s, c);。(2) 也可以使用defparam來(lái)改變參數(shù)。用后綴改變引用模塊的參數(shù)要用被引用模塊的實(shí)例名作為參數(shù)的前綴,如add

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論