ch03-Verilog HDL基礎(chǔ)與組合電路建模PPT課件_第1頁(yè)
ch03-Verilog HDL基礎(chǔ)與組合電路建模PPT課件_第2頁(yè)
ch03-Verilog HDL基礎(chǔ)與組合電路建模PPT課件_第3頁(yè)
ch03-Verilog HDL基礎(chǔ)與組合電路建模PPT課件_第4頁(yè)
ch03-Verilog HDL基礎(chǔ)與組合電路建模PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩109頁(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、2021/3/91工程學(xué)院工程學(xué)院 信息技術(shù)教研室信息技術(shù)教研室Verilog HDL與與FPGA數(shù)字系統(tǒng)設(shè)計(jì)數(shù)字系統(tǒng)設(shè)計(jì)2021/3/923.1 Verilog HDL基本語(yǔ)法規(guī)則基本語(yǔ)法規(guī)則3.2 Verilog HDL門(mén)級(jí)建模門(mén)級(jí)建模3.3 Verilog HDL數(shù)據(jù)流建模與運(yùn)算符數(shù)據(jù)流建模與運(yùn)算符3.4 組合電路的行為級(jí)建模組合電路的行為級(jí)建模3.5分層次的電路設(shè)計(jì)方法分層次的電路設(shè)計(jì)方法2021/3/933.1 Verilog HDL基本語(yǔ)法規(guī)則基本語(yǔ)法規(guī)則3.1.1 詞法規(guī)定詞法規(guī)定 3.1.2 邏輯值集合邏輯值集合3.1.3 常量及其表示常量及其表示3.1.4 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型3

2、2021/3/943.1.1 詞法規(guī)定詞法規(guī)定 為對(duì)數(shù)字電路進(jìn)行描述為對(duì)數(shù)字電路進(jìn)行描述, ,Verilog語(yǔ)言規(guī)定了一套完整的語(yǔ)法結(jié)語(yǔ)言規(guī)定了一套完整的語(yǔ)法結(jié)構(gòu)。構(gòu)。1間隔符間隔符: Verilog 的間隔符主要起分隔文本的作用,可以使的間隔符主要起分隔文本的作用,可以使文本錯(cuò)落有致,便于閱讀與修改。文本錯(cuò)落有致,便于閱讀與修改。間隔符包括空格符(間隔符包括空格符(b)、)、TAB 鍵(鍵(t)、換行符()、換行符(n)及換)及換頁(yè)符。頁(yè)符。2注釋符注釋符:注釋只是為了改善程序可讀性,編譯時(shí)不起作用。注釋只是為了改善程序可讀性,編譯時(shí)不起作用。多行注釋符多行注釋符(用于寫(xiě)多行注釋用于寫(xiě)多行注

3、釋): /* - */;單行注釋符單行注釋符 :以以/開(kāi)始到行尾結(jié)束為注釋文字。開(kāi)始到行尾結(jié)束為注釋文字。42021/3/95o任何用任何用Verilog HDLVerilog HDL語(yǔ)言描述的語(yǔ)言描述的“東西東西”都通過(guò)其名字來(lái)識(shí)別,都通過(guò)其名字來(lái)識(shí)別,這個(gè)名字被稱(chēng)為這個(gè)名字被稱(chēng)為標(biāo)識(shí)符標(biāo)識(shí)符。o如源文件名、模塊名、端口名、變量名、常量名、實(shí)例名等。如源文件名、模塊名、端口名、變量名、常量名、實(shí)例名等。o標(biāo)識(shí)符可由字母、數(shù)字、下劃線(xiàn)和標(biāo)識(shí)符可由字母、數(shù)字、下劃線(xiàn)和$ $符號(hào)構(gòu)成;符號(hào)構(gòu)成;但第一個(gè)字符但第一個(gè)字符必須是字母或下劃線(xiàn),不能是數(shù)字或必須是字母或下劃線(xiàn),不能是數(shù)字或$ $符號(hào)符號(hào)!

4、o在在Verilog HDLVerilog HDL中變量名是區(qū)分大小寫(xiě)的!中變量名是區(qū)分大小寫(xiě)的!o合法合法的名字:的名字:n A_99_Zn Resetn _54MHz_Clock$n Module 不合法的名字:不合法的名字:123a$datamodule7seg.v標(biāo)識(shí)符標(biāo)識(shí)符不能與不能與關(guān)鍵字關(guān)鍵字同名!同名!三、標(biāo)識(shí)符和關(guān)鍵字三、標(biāo)識(shí)符和關(guān)鍵字 52021/3/96o 關(guān)鍵字關(guān)鍵字事先定義好的確認(rèn)符,用來(lái)組事先定義好的確認(rèn)符,用來(lái)組織語(yǔ)言結(jié)構(gòu);或者用于定義織語(yǔ)言結(jié)構(gòu);或者用于定義Verilog HDLVerilog HDL提提供的門(mén)元件(如供的門(mén)元件(如andand,notnot,o

5、ror,bufbuf)。)。o 用用小寫(xiě)小寫(xiě)字母定義!字母定義! 如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire用戶(hù)程序中的用戶(hù)程序中的變變量、節(jié)點(diǎn)等量、節(jié)點(diǎn)等名稱(chēng)名稱(chēng)不能與不能與關(guān)鍵字關(guān)鍵字同同名!名!三、標(biāo)識(shí)符和關(guān)鍵字三、標(biāo)識(shí)符和關(guān)鍵字 62021/3/97為了表示數(shù)字邏輯電路的邏輯狀態(tài),為了表示數(shù)字邏輯電路的邏輯狀態(tài),Verilog語(yǔ)言規(guī)定了語(yǔ)言規(guī)定了4 4種基本的邏輯值。種基本的邏輯值。 0邏輯邏輯0、邏輯假邏輯假 1邏輯邏輯1、邏輯真

6、邏輯真 x或或X不確定的值(未知狀態(tài))不確定的值(未知狀態(tài)) z或或Z高阻態(tài)高阻態(tài)3.1.2 邏輯值集合邏輯值集合72021/3/98o 數(shù)據(jù)類(lèi)型是用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)數(shù)據(jù)類(lèi)型是用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)存儲(chǔ)和傳送元素的。存儲(chǔ)和傳送元素的。o 常量是在程序運(yùn)行過(guò)程中,其值不能被改變常量是在程序運(yùn)行過(guò)程中,其值不能被改變的量。的量。3.1.3 常量及其表示常量及其表示82021/3/993.1.3 常量及其表示常量及其表示三種類(lèi)型的常量三種類(lèi)型的常量整數(shù)型常量整數(shù)型常量實(shí)數(shù)型常量實(shí)數(shù)型常量字符串型常量字符串型常量實(shí)數(shù)型常量實(shí)數(shù)型常量十進(jìn)制記數(shù)法十進(jìn)制記數(shù)法 如:如: 0.10.1、2.

7、02.0、5.675.67科學(xué)記數(shù)法科學(xué)記數(shù)法 如如: : 23_5.1e2、5E4 23510.0、 0.0005十進(jìn)制數(shù)形式的表示方法十進(jìn)制數(shù)形式的表示方法: :表示有符號(hào)表示有符號(hào)常量常量例如:例如:3030、2 2帶基數(shù)形式的表示方法帶基數(shù)形式的表示方法: :格式為:格式為: 整數(shù)型整數(shù)型常量常量例如:例如:3b101、5o37、8he3,8b1001_0011 92021/3/9103.1.3 常量及其表示常量及其表示;Verilog 允許用參數(shù)定義語(yǔ)句定義一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量,允許用參數(shù)定義語(yǔ)句定義一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量,稱(chēng)為稱(chēng)為符號(hào)常量符號(hào)常量。定義的格式為:。定義的格式為

8、: parameter 參數(shù)名參數(shù)名1 1常量表達(dá)式常量表達(dá)式1 1,參數(shù)名,參數(shù)名2 2常量表達(dá)式常量表達(dá)式2 2如如 parameter BIT=1, BYTE=8, PI=3.14;字符串常量字符串常量字符串是用雙撇號(hào)括起來(lái)的字符序列,它必須包含在同一行字符串是用雙撇號(hào)括起來(lái)的字符序列,它必須包含在同一行中,不能分成多行書(shū)寫(xiě)。例如:中,不能分成多行書(shū)寫(xiě)。例如: this is a string hello world!符號(hào)常量符號(hào)常量102021/3/9113.1.4 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型變量的數(shù)據(jù)類(lèi)型變量的數(shù)據(jù)類(lèi)型寄存器型寄存器型線(xiàn)網(wǎng)型線(xiàn)網(wǎng)型線(xiàn)網(wǎng)類(lèi)線(xiàn)網(wǎng)類(lèi): :是指輸出始終根據(jù)輸入的變化而更

9、新其值的變量是指輸出始終根據(jù)輸入的變化而更新其值的變量, ,它一般指的是硬件電路中的各種物理連接它一般指的是硬件電路中的各種物理連接. . 常用的網(wǎng)絡(luò)類(lèi)型由關(guān)鍵詞常用的網(wǎng)絡(luò)類(lèi)型由關(guān)鍵詞wire定義定義, ,格式如下:格式如下:wire n n-1:0 -1:0 變量名變量名1 1,變量名,變量名2 2,變量名,變量名n;變量寬度變量寬度例例: :網(wǎng)絡(luò)型變量網(wǎng)絡(luò)型變量L的值由與門(mén)的驅(qū)動(dòng)信號(hào)的值由與門(mén)的驅(qū)動(dòng)信號(hào)a a和和b b所決定,即所決定,即La&b。a、b的值發(fā)的值發(fā)生變化,線(xiàn)網(wǎng)生變化,線(xiàn)網(wǎng)L L的值會(huì)立即跟著變化。的值會(huì)立即跟著變化。 B A L G1 112021/3/912o

10、wire型數(shù)據(jù)常用來(lái)表示用以型數(shù)據(jù)常用來(lái)表示用以assign關(guān)鍵字指定的關(guān)鍵字指定的組合邏輯信號(hào)。組合邏輯信號(hào)。o Verilog 程序模塊中輸入、輸出信號(hào)類(lèi)型默認(rèn)時(shí),程序模塊中輸入、輸出信號(hào)類(lèi)型默認(rèn)時(shí),自動(dòng)定義為自動(dòng)定義為wire型。型。o wire型信號(hào)可以用做任何方程式的輸入,也可型信號(hào)可以用做任何方程式的輸入,也可以用做以用做assign語(yǔ)句或?qū)嵗妮敵?。語(yǔ)句或?qū)嵗妮敵觥?wire a; /定義了一個(gè)定義了一個(gè)1位的位的wire型數(shù)據(jù)型數(shù)據(jù) wire7:0 b; /定義了一個(gè)定義了一個(gè)8位的位的wire型數(shù)據(jù)型數(shù)據(jù) wire4:1 c,d; /定義了二個(gè)定義了二個(gè)4位的位的w

11、ire型數(shù)據(jù)型數(shù)據(jù)wirewire型型122021/3/913表3.1.3 線(xiàn)網(wǎng)類(lèi)型變量及其說(shuō)明線(xiàn)網(wǎng)類(lèi)型線(xiàn)網(wǎng)類(lèi)型功能說(shuō)明功能說(shuō)明wire, tri用于表示單元(元件)之間的連線(xiàn),wire為一般連線(xiàn);tri用于描述由多個(gè)信號(hào)源驅(qū)動(dòng)的線(xiàn)網(wǎng),并沒(méi)有其他特殊意義,兩者的功能完全相同。wor, trior具有線(xiàn)或特性的線(xiàn)網(wǎng),用于一個(gè)線(xiàn)網(wǎng)被多個(gè)信號(hào)驅(qū)動(dòng)的情況wand, riand具有線(xiàn)與特性的線(xiàn)網(wǎng),用于一個(gè)線(xiàn)網(wǎng)被多個(gè)信號(hào)驅(qū)動(dòng)的情況trireg具有電荷保持特性的線(xiàn)網(wǎng)類(lèi)型,用于開(kāi)關(guān)級(jí)建模tri1上拉電阻,用于開(kāi)關(guān)級(jí)建模tri0下拉電阻,用于開(kāi)關(guān)級(jí)建模supply1用于對(duì)電源建模,高電平1 supply0用于對(duì)

12、地建模,低電平0 132021/3/914關(guān)于關(guān)于“多重驅(qū)動(dòng)多重驅(qū)動(dòng)”o 在寫(xiě)可綜合的在寫(xiě)可綜合的Verilog代碼時(shí),建議不要對(duì)同一個(gè)變量進(jìn)代碼時(shí),建議不要對(duì)同一個(gè)變量進(jìn)行多次賦值(簡(jiǎn)稱(chēng)多重驅(qū)動(dòng)),以避免出現(xiàn)多個(gè)信號(hào)同行多次賦值(簡(jiǎn)稱(chēng)多重驅(qū)動(dòng)),以避免出現(xiàn)多個(gè)信號(hào)同時(shí)驅(qū)動(dòng)一個(gè)輸出變量的情況。時(shí)驅(qū)動(dòng)一個(gè)輸出變量的情況。BLAC圖圖3.1.23.1.2多重驅(qū)動(dòng)示意圖多重驅(qū)動(dòng)示意圖o 例如,例如,A、B、C三個(gè)內(nèi)部信號(hào)同時(shí)三個(gè)內(nèi)部信號(hào)同時(shí)接到(驅(qū)動(dòng))一個(gè)輸出端接到(驅(qū)動(dòng))一個(gè)輸出端L。 或者說(shuō),輸出或者說(shuō),輸出L同時(shí)被三個(gè)內(nèi)部信同時(shí)被三個(gè)內(nèi)部信號(hào)所驅(qū)動(dòng)。號(hào)所驅(qū)動(dòng)。 此時(shí)此時(shí)L的邏輯值可能無(wú)法確定。

13、的邏輯值可能無(wú)法確定。142021/3/9153.1.4 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型變量的數(shù)據(jù)類(lèi)型變量的數(shù)據(jù)類(lèi)型寄存器型寄存器型線(xiàn)網(wǎng)型線(xiàn)網(wǎng)型寄存器型變量對(duì)應(yīng)的是具有狀態(tài)保持作用的電路等元件寄存器型變量對(duì)應(yīng)的是具有狀態(tài)保持作用的電路等元件, ,如觸如觸發(fā)器寄存器。寄存器型變量只能在發(fā)器寄存器。寄存器型變量只能在initial或或always內(nèi)部被賦值。內(nèi)部被賦值。152021/3/916寄存器變量類(lèi)型寄存器變量類(lèi)型寄存器類(lèi)型功能說(shuō)明reg常用的寄存器型變量integer32位帶符號(hào)的整數(shù)型變量real/realtime64位帶符號(hào)的實(shí)數(shù)型變量time64位無(wú)符號(hào)的時(shí)間變量表表3.1.5 寄存器變量類(lèi)型及其

14、說(shuō)明寄存器變量類(lèi)型及其說(shuō)明例:例: reg clock; /一個(gè)一個(gè)1位寄存器變量的聲明位寄存器變量的聲明 reg 3:0 counter; /一個(gè)一個(gè)4位位寄存器變量的聲明寄存器變量的聲明抽象描述抽象描述, ,不對(duì)應(yīng)具不對(duì)應(yīng)具體硬件體硬件end162021/3/9173.2 Verilog HDL門(mén)級(jí)建模門(mén)級(jí)建模3.2.1 多輸入門(mén)多輸入門(mén)3.2.4 門(mén)級(jí)建模舉例門(mén)級(jí)建模舉例3.2.2 多輸出門(mén)多輸出門(mén)3.2.3 三態(tài)門(mén)三態(tài)門(mén)172021/3/918基本概念:基本概念:o 結(jié)構(gòu)級(jí)建模結(jié)構(gòu)級(jí)建模: 就是根據(jù)邏輯電路的結(jié)構(gòu)(邏輯就是根據(jù)邏輯電路的結(jié)構(gòu)(邏輯圖),實(shí)例引用圖),實(shí)例引用Verilo

15、g HDL中內(nèi)置的基本門(mén)級(jí)中內(nèi)置的基本門(mén)級(jí)元件或者用戶(hù)定義的元件或其他模塊,來(lái)描述結(jié)元件或者用戶(hù)定義的元件或其他模塊,來(lái)描述結(jié)構(gòu)圖中的元件以及元件之間的連接關(guān)系。構(gòu)圖中的元件以及元件之間的連接關(guān)系。o 門(mén)級(jí)建模門(mén)級(jí)建模: Verilog HDL中內(nèi)置了中內(nèi)置了12個(gè)基本門(mén)級(jí)元個(gè)基本門(mén)級(jí)元件(件(Primitive,有的翻譯為,有的翻譯為“原語(yǔ)原語(yǔ)”)模型,引)模型,引用這些基本門(mén)級(jí)元件對(duì)邏輯圖進(jìn)行描述,也稱(chēng)為用這些基本門(mén)級(jí)元件對(duì)邏輯圖進(jìn)行描述,也稱(chēng)為門(mén)級(jí)建模門(mén)級(jí)建模。 182021/3/919原語(yǔ)原語(yǔ) 多輸入門(mén):多輸入門(mén):and、nand、or、nor、xor、xnor 只有單個(gè)輸出只有單個(gè)輸

16、出,1個(gè)或多個(gè)輸入個(gè)或多個(gè)輸入多輸出門(mén):多輸出門(mén):not、buf 允許有多個(gè)輸出允許有多個(gè)輸出,但只有一個(gè)輸入但只有一個(gè)輸入三態(tài)門(mén):三態(tài)門(mén):bufif0、bufif1、notif0、notif1 有一個(gè)輸出有一個(gè)輸出,一個(gè)數(shù)據(jù)輸入和一個(gè)控制輸入一個(gè)數(shù)據(jù)輸入和一個(gè)控制輸入上拉電阻上拉電阻pullup、下拉電阻、下拉電阻pulldown192021/3/9206.4.1 多輸入門(mén)多輸入門(mén)原語(yǔ)名稱(chēng)原語(yǔ)名稱(chēng)圖形符號(hào)圖形符號(hào)邏輯表達(dá)式邏輯表達(dá)式and(與門(mén))(與門(mén))L = A & Bnand(與非門(mén))(與非門(mén))L = (A & B)or(或門(mén))(或門(mén))L = A | Bnor(或非門(mén))(

17、或非門(mén))L =( A | B)xor(異或門(mén))(異或門(mén))L = A Bxnor(同或門(mén))(同或門(mén))L = A Bp 共共6個(gè):個(gè): and、nand、or、nor、xor、xnorp 特點(diǎn):只有特點(diǎn):只有1個(gè)輸出個(gè)輸出, 有多個(gè)輸入有多個(gè)輸入多輸入門(mén)的一般引用格式為:多輸入門(mén)的一般引用格式為:Gate_ name (OutputA, Input1, Input2, InputN);202021/3/921若同一個(gè)基本門(mén)在當(dāng)前模塊中被調(diào)用多次,可在一條調(diào)若同一個(gè)基本門(mén)在當(dāng)前模塊中被調(diào)用多次,可在一條調(diào)用語(yǔ)句中加以說(shuō)明,用語(yǔ)句中加以說(shuō)明,中間以逗號(hào)相隔中間以逗號(hào)相隔。 and A1(out,in1

18、,in2,in3););xnor NX1(out,in1,in2,in3,in4);); 對(duì)基本門(mén)級(jí)元件,調(diào)用名對(duì)基本門(mén)級(jí)元件,調(diào)用名A1A1、NX1NX1可以省略??梢允÷?。 212021/3/922真值表舉例真值表舉例表表3.2.2 and、nand真值表真值表and輸入輸入1nand輸入輸入101xz01xz輸輸入入200000輸輸入入201111101xx110 xxx0 xxxx1xxxz0 xxxz1xxx222021/3/9233.2.2 多輸出門(mén)多輸出門(mén)允許有多個(gè)輸出,但只有一個(gè)輸入。允許有多個(gè)輸出,但只有一個(gè)輸入。 not N1(out1,out2,in););xx10zx1

19、0輸輸 入入buf輸輸 出出 buf真值表真值表 輸輸 出出xx01zx10輸輸 入入notnot真值表真值表 buf B1(out1,out2,in););out1inout2outN232021/3/9243.2.3 三態(tài)門(mén)三態(tài)門(mén)有一個(gè)輸出、一個(gè)數(shù)據(jù)輸入和一個(gè)輸入控制。有一個(gè)輸出、一個(gè)數(shù)據(jù)輸入和一個(gè)輸入控制。如果輸入控制信號(hào)無(wú)效,則三態(tài)門(mén)的輸出為高阻態(tài)如果輸入控制信號(hào)無(wú)效,則三態(tài)門(mén)的輸出為高阻態(tài)z。 (a)bufif1 (b)notif1 in out ctrl in out ctrl 242021/3/925boutasel/Gate-level descriptionmodule _2

20、to1muxtri (a,b,sel,out); input a,b,sel; output out; tri out; bufif1 (out,b,sel); bufif0 (out,a,sel); endmodule 2選選1數(shù)據(jù)選擇器數(shù)據(jù)選擇器一些一些Verilog原型原型(Primitive)小結(jié):小結(jié):門(mén)級(jí)建模就是列出電路圖結(jié)構(gòu)中的元件,并按網(wǎng)表連接門(mén)級(jí)建模就是列出電路圖結(jié)構(gòu)中的元件,并按網(wǎng)表連接 。3.2.4 門(mén)級(jí)建模舉例門(mén)級(jí)建模舉例252021/3/926module addbit (a, b, ci, sum, co); input a, b, ci; output sum,

21、co; wire a, b, ci, sum, co, n1, n2, n3; xor u0(n1, a, b,), u1(sum, n1, ci); and u2(n2, a, b), u3(n3, n1, ci); or (co, n2, n3); endmodule 1位全加器位全加器3.2.4 門(mén)級(jí)建模舉例門(mén)級(jí)建模舉例262021/3/927門(mén)級(jí)描述小結(jié):門(mén)級(jí)描述小結(jié):1. 1.給電路圖中的每個(gè)輸入輸出引腳給電路圖中的每個(gè)輸入輸出引腳 賦以賦以 端口名端口名. .2. 2.給電路圖中每條給電路圖中每條內(nèi)部連線(xiàn)內(nèi)部連線(xiàn) 取上各自的連線(xiàn)名取上各自的連線(xiàn)名. .3. 3.給電路圖中的每個(gè)邏輯

22、元件取一個(gè)編號(hào)給電路圖中的每個(gè)邏輯元件取一個(gè)編號(hào) ( (即即“調(diào)用名調(diào)用名”). ).4. 4.給所要描述的這個(gè)電路模塊確定一個(gè)給所要描述的這個(gè)電路模塊確定一個(gè)模塊名模塊名. .5. 5.用用modulemodule定義相應(yīng)模塊名的結(jié)構(gòu)描述定義相應(yīng)模塊名的結(jié)構(gòu)描述, ,并將邏輯圖中所有的并將邏輯圖中所有的輸入輸入輸出端口名列入端口名表項(xiàng)輸出端口名列入端口名表項(xiàng)中中, ,再完成對(duì)各端口的再完成對(duì)各端口的輸入輸出類(lèi)型輸入輸出類(lèi)型說(shuō)明說(shuō)明. .6. 6.依照電路圖中的依照電路圖中的連接關(guān)系連接關(guān)系, ,確定各單元之間端口信號(hào)的連接確定各單元之間端口信號(hào)的連接, ,完完成對(duì)電路圖內(nèi)部的結(jié)構(gòu)描述成對(duì)電路

23、圖內(nèi)部的結(jié)構(gòu)描述. .7. 7.最后用最后用endmoduleendmodule結(jié)束模塊描述全過(guò)程結(jié)束模塊描述全過(guò)程. .end272021/3/9283.3 Verilog HDL數(shù)據(jù)流建模與運(yùn)算符數(shù)據(jù)流建模與運(yùn)算符3.3.1 數(shù)據(jù)流建模數(shù)據(jù)流建模3.3.2 運(yùn)算符及其優(yōu)先級(jí)運(yùn)算符及其優(yōu)先級(jí)282021/3/929o 在在數(shù)字電路數(shù)字電路中,信號(hào)經(jīng)過(guò)組合邏輯時(shí)會(huì)類(lèi)似中,信號(hào)經(jīng)過(guò)組合邏輯時(shí)會(huì)類(lèi)似于數(shù)據(jù)流動(dòng),即信號(hào)從輸入流向輸出,并不于數(shù)據(jù)流動(dòng),即信號(hào)從輸入流向輸出,并不會(huì)在其中存儲(chǔ)。當(dāng)輸入發(fā)生變化時(shí),總會(huì)在會(huì)在其中存儲(chǔ)。當(dāng)輸入發(fā)生變化時(shí),總會(huì)在一定時(shí)間以后體現(xiàn)在輸出端。一定時(shí)間以后體現(xiàn)在輸出端

24、。o 同樣,我們可以模擬同樣,我們可以模擬數(shù)字電路數(shù)字電路的這一特性,的這一特性,對(duì)其進(jìn)行建模,這種建模方式通常被稱(chēng)為數(shù)對(duì)其進(jìn)行建模,這種建模方式通常被稱(chēng)為數(shù)據(jù)流建模。據(jù)流建模。3.3 Verilog HDL數(shù)據(jù)流建模與運(yùn)算符數(shù)據(jù)流建模與運(yùn)算符292021/3/9303.3 Verilog HDL數(shù)據(jù)流建模與運(yùn)算符數(shù)據(jù)流建模與運(yùn)算符對(duì)于基本單元邏輯電路,使用對(duì)于基本單元邏輯電路,使用Verilog語(yǔ)言提供的門(mén)級(jí)元件語(yǔ)言提供的門(mén)級(jí)元件模型描述電路非常方便。模型描述電路非常方便。 但隨著電路復(fù)雜性的增加,使用的邏輯門(mén)較多時(shí),使用但隨著電路復(fù)雜性的增加,使用的邏輯門(mén)較多時(shí),使用HDL門(mén)級(jí)描述的工作效

25、率就很低。門(mén)級(jí)描述的工作效率就很低。本節(jié)介紹的本節(jié)介紹的數(shù)據(jù)流建模數(shù)據(jù)流建模能夠在較高的抽象級(jí)別描述電路的邏能夠在較高的抽象級(jí)別描述電路的邏輯功能,并且通過(guò)輯功能,并且通過(guò)邏輯綜合邏輯綜合軟件,能夠自動(dòng)地將數(shù)據(jù)流描述軟件,能夠自動(dòng)地將數(shù)據(jù)流描述轉(zhuǎn)換成為門(mén)級(jí)電路。轉(zhuǎn)換成為門(mén)級(jí)電路。 數(shù)據(jù)流建模主要使用邏輯表達(dá)式,所以要了解各種運(yùn)算符和數(shù)據(jù)流建模主要使用邏輯表達(dá)式,所以要了解各種運(yùn)算符和表達(dá)式。表達(dá)式。302021/3/9313.3.1 數(shù)據(jù)流建模數(shù)據(jù)流建模p 數(shù)據(jù)流建模使用的連續(xù)賦值語(yǔ)句,由關(guān)鍵詞數(shù)據(jù)流建模使用的連續(xù)賦值語(yǔ)句,由關(guān)鍵詞assign開(kāi)始,后面跟著由開(kāi)始,后面跟著由操作數(shù)操作數(shù)和和運(yùn)

26、算符運(yùn)算符等組成的等組成的邏輯表達(dá)邏輯表達(dá)式式。p一般用法如下:一般用法如下: wire 位寬說(shuō)明位寬說(shuō)明 變量名變量名1,變量名,變量名2,變量名,變量名n; assign 變量名表達(dá)式;變量名表達(dá)式;p注意,注意,assign 語(yǔ)句只能對(duì)語(yǔ)句只能對(duì)wire型變量進(jìn)行賦值,所以等號(hào)型變量進(jìn)行賦值,所以等號(hào)左邊變量名的數(shù)據(jù)類(lèi)型必須是左邊變量名的數(shù)據(jù)類(lèi)型必須是wire型。型。312021/3/9323.3.1 數(shù)據(jù)流建模數(shù)據(jù)流建模p 數(shù)據(jù)流建模使用的連續(xù)賦值語(yǔ)句,由關(guān)鍵詞數(shù)據(jù)流建模使用的連續(xù)賦值語(yǔ)句,由關(guān)鍵詞assign開(kāi)始,后面跟著由開(kāi)始,后面跟著由操作數(shù)操作數(shù)和和運(yùn)算符運(yùn)算符等組成的等組成的

27、邏輯表達(dá)邏輯表達(dá)式式。p一般用法如下:一般用法如下: wire 位寬說(shuō)明位寬說(shuō)明 變量名變量名1,變量名,變量名2,變量名,變量名n; assign 變量名表達(dá)式;變量名表達(dá)式;p連續(xù)賦值語(yǔ)句的執(zhí)行過(guò)程是:只要邏輯表達(dá)式右邊變量的連續(xù)賦值語(yǔ)句的執(zhí)行過(guò)程是:只要邏輯表達(dá)式右邊變量的邏輯值發(fā)生變化,則等式左邊的值立即被計(jì)算出來(lái)并賦給左邏輯值發(fā)生變化,則等式左邊的值立即被計(jì)算出來(lái)并賦給左邊的變量。邊的變量。322021/3/933module mux2to1_dataflow(D0, D1, S, Y ); input D0, D1, S; output Y; wire Y ; /下面是邏輯功能描述

28、下面是邏輯功能描述 assign Y = (S & D0) | (S & D1); /表達(dá)式左邊表達(dá)式左邊Y必須是必須是wire型型endmodule 端口類(lèi)型說(shuō)明端口類(lèi)型說(shuō)明電路結(jié)構(gòu)描述電路結(jié)構(gòu)描述數(shù)據(jù)類(lèi)型說(shuō)明數(shù)據(jù)類(lèi)型說(shuō)明例例 用數(shù)據(jù)流描述方式建立模型用數(shù)據(jù)流描述方式建立模型SDSDY10332021/3/934module mux2x1_df (D0,D1,S,L); input D0,D1,S; output L; assign L = S ? D1 : D0;endmodule 例:用條件運(yùn)算符描述了一個(gè)例:用條件運(yùn)算符描述了一個(gè)2選選1的數(shù)據(jù)選擇器。的數(shù)據(jù)選擇器。條件

29、運(yùn)算符:如果條件運(yùn)算符:如果S1,則輸出,則輸出LD1;否則否則LD0。342021/3/935 Y2 A1 A0 Y1 Y0 Y3 E 例:用數(shù)據(jù)流建模方法對(duì)例:用數(shù)據(jù)流建模方法對(duì)2線(xiàn)線(xiàn)-4線(xiàn)譯碼器的行為進(jìn)行描述。線(xiàn)譯碼器的行為進(jìn)行描述。 213012011010 , , AAEYAAEYAAEYAAEYnnnn352021/3/936module decoder_df (A1,A0,E,Y); input A1,A0,E; output 3:0 Y; assign Y0 = (A1 & A0 & E); assign Y1 = (A1 & A0 & E);

30、assign Y2 = (A1 & A0 & E); assign Y3 = (A1 & A0 & E);endmodule Y2 A1 A0 Y1 Y0 Y3 E 例:用數(shù)據(jù)流建模方法對(duì)例:用數(shù)據(jù)流建模方法對(duì)2線(xiàn)線(xiàn)-4線(xiàn)譯碼器的行為進(jìn)行描述。線(xiàn)譯碼器的行為進(jìn)行描述。 362021/3/937例:用數(shù)據(jù)流描述風(fēng)格對(duì)一個(gè)例:用數(shù)據(jù)流描述風(fēng)格對(duì)一個(gè)4位二進(jìn)制數(shù)的加法器建模。位二進(jìn)制數(shù)的加法器建模。 module adder4(Cout,Sum,A,B,Cin); parameter width=4; outputwidth-1:0 Sum; output Cout;

31、 inputwidth-1:0 A,B; input Cin; assign Cout,Sum=A+B+Cin;endmodule372021/3/9383.3.1 數(shù)據(jù)流建模數(shù)據(jù)流建模數(shù)據(jù)流建模提供了用邏輯表達(dá)式描述電路的一數(shù)據(jù)流建模提供了用邏輯表達(dá)式描述電路的一種方式。不必考慮電路的組成以及元件之間的種方式。不必考慮電路的組成以及元件之間的連接,是描述組合邏輯電路常用的一種方式。連接,是描述組合邏輯電路常用的一種方式。382021/3/9393.3.2 表達(dá)式與操作數(shù)表達(dá)式與操作數(shù)表達(dá)式由運(yùn)算符合操作數(shù)構(gòu)成,其目的是根據(jù)運(yùn)算符的含義表達(dá)式由運(yùn)算符合操作數(shù)構(gòu)成,其目的是根據(jù)運(yùn)算符的含義計(jì)算出

32、一個(gè)結(jié)果值。計(jì)算出一個(gè)結(jié)果值。AB;Add131:20+Add231:20操作數(shù)可以是常數(shù)、整數(shù)、實(shí)數(shù)、線(xiàn)網(wǎng)、寄存器、時(shí)間操作數(shù)可以是常數(shù)、整數(shù)、實(shí)數(shù)、線(xiàn)網(wǎng)、寄存器、時(shí)間等任何數(shù)據(jù)類(lèi)型。等任何數(shù)據(jù)類(lèi)型。392021/3/940o運(yùn)算符按運(yùn)算符按功能功能分為分為9 9類(lèi)類(lèi):n 算術(shù)算術(shù)運(yùn)算符n 邏輯邏輯運(yùn)算符n 關(guān)系關(guān)系運(yùn)算符n 等式等式運(yùn)算符n 縮減縮減運(yùn)算符n 條件條件運(yùn)算符n 位位運(yùn)算符n 移位移位運(yùn)算符n 位拼接位拼接運(yùn)算符 運(yùn)算符按運(yùn)算符按操作數(shù)的個(gè)數(shù)操作數(shù)的個(gè)數(shù)分為分為3 3類(lèi)類(lèi):?jiǎn)文繂文窟\(yùn)算符帶一個(gè)操作數(shù) 邏輯非!,按位取反,縮減運(yùn)算符,移位運(yùn)算符雙目雙目運(yùn)算符帶兩個(gè)操作數(shù) 算術(shù)、

33、關(guān)系、等式運(yùn)算符,邏輯、位運(yùn)算符的大部分三目三目運(yùn)算符帶三個(gè)操作數(shù) 條件運(yùn)算符3.3.3 運(yùn)算符及其優(yōu)先級(jí)運(yùn)算符及其優(yōu)先級(jí)402021/3/9413.3.3 運(yùn)算符及其優(yōu)先級(jí)運(yùn)算符及其優(yōu)先級(jí)1.運(yùn)算符運(yùn)算符 (9類(lèi)類(lèi))?:條件運(yùn)算符條件運(yùn)算符 連接運(yùn)算符連接運(yùn)算符邏輯移位運(yùn)算符邏輯移位運(yùn)算符=, !=, =, !=相等與全等運(yùn)算符相等與全等運(yùn)算符, =關(guān)系運(yùn)算符(雙目)關(guān)系運(yùn)算符(雙目)!, &, |邏輯運(yùn)算符邏輯運(yùn)算符&, &, |,|, , or 縮位運(yùn)算符縮位運(yùn)算符(單目單目),&,|,or位運(yùn)算符位運(yùn)算符+, -, *, /, %算術(shù)運(yùn)算符算術(shù)運(yùn)算符所含

34、運(yùn)算符所含運(yùn)算符運(yùn)算符分類(lèi)運(yùn)算符分類(lèi)412021/3/942一、算術(shù)運(yùn)算符一、算術(shù)運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符說(shuō)明說(shuō)明 */%加減乘除求模雙雙目運(yùn)算符 進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值略去小數(shù)部分,只取整數(shù)部分!進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值略去小數(shù)部分,只取整數(shù)部分! % %稱(chēng)為稱(chēng)為求模求模(或(或求余求余)運(yùn)算符,要求)運(yùn)算符,要求% %兩側(cè)均為兩側(cè)均為整型整型數(shù)據(jù);數(shù)據(jù); 求模運(yùn)算結(jié)果值的符號(hào)位取第一個(gè)操作數(shù)的符號(hào)位!求模運(yùn)算結(jié)果值的符號(hào)位取第一個(gè)操作數(shù)的符號(hào)位! 例例 -11%3 -11%3 結(jié)果為結(jié)果為-2-2 進(jìn)行算術(shù)運(yùn)算時(shí),若某操作數(shù)為不定值進(jìn)行算術(shù)運(yùn)算時(shí),若某操作數(shù)為不定值x x,則整個(gè)結(jié)

35、果也為,則整個(gè)結(jié)果也為x x。 MAX + PLUS IIMAX + PLUS II不支持不支持“/ /” 和和“%”運(yùn)算!運(yùn)算!Quartus IIQuartus II都支持!都支持!422021/3/943o 例例 除法和求模運(yùn)算的區(qū)別除法和求模運(yùn)算的區(qū)別注意注意/ /和和% %的區(qū)別!的區(qū)別!432021/3/9449/4 = 29%4 =1arithmetic.vwfarithmetic.vwf442021/3/945二、關(guān)系運(yùn)算符二、關(guān)系運(yùn)算符關(guān)系運(yùn)算符關(guān)系運(yùn)算符說(shuō)明說(shuō)明= 小于小于或等于大于大于或等于雙雙目運(yùn)算符括號(hào)內(nèi)先運(yùn)算!括號(hào)內(nèi)先運(yùn)算!算術(shù)運(yùn)算先運(yùn)算!算術(shù)運(yùn)算先運(yùn)算! 運(yùn)算結(jié)果

36、為運(yùn)算結(jié)果為1 1位的邏輯值位的邏輯值1 1或或0 0或或x x。關(guān)系運(yùn)算時(shí),若關(guān)系為關(guān)系運(yùn)算時(shí),若關(guān)系為真真,則返回值為則返回值為1 1;若聲明的關(guān)系為;若聲明的關(guān)系為假假,則返回值為,則返回值為0 0;若某操作數(shù)為;若某操作數(shù)為不不定值定值x x,則返回值為,則返回值為x x。所有的關(guān)系運(yùn)算符優(yōu)先級(jí)別相同。所有的關(guān)系運(yùn)算符優(yōu)先級(jí)別相同。關(guān)系運(yùn)算符的優(yōu)先級(jí)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于低于算術(shù)運(yùn)算符。算術(shù)運(yùn)算符。 例 asize - 1等同于: a(size - 1) size -(1a)不等同于: size-1b)&(bc) 可簡(jiǎn)寫(xiě)為: ab & bc (a= =b)|(x= =

37、y) 可簡(jiǎn)寫(xiě)為: a= =b|x= = y (!a)|(ab)可簡(jiǎn)寫(xiě)為: !a|ab為提高程序的可讀性,明確表達(dá)各運(yùn)算符之間為提高程序的可讀性,明確表達(dá)各運(yùn)算符之間的優(yōu)先關(guān)系,建議使用的優(yōu)先關(guān)系,建議使用括號(hào)括號(hào)!502021/3/951五、位運(yùn)算符五、位運(yùn)算符位運(yùn)算符位運(yùn)算符說(shuō)明說(shuō)明 &|,按位取反按位與按位或按位異或按位同或雙雙目運(yùn)算符單單目運(yùn)算符 位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位運(yùn)算符中的雙目位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位運(yùn)算符中的雙目運(yùn)算符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位運(yùn)算符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位逐位逐位進(jìn)行運(yùn)算。進(jìn)行運(yùn)算。 兩個(gè)不同長(zhǎng)度的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按兩個(gè)不同長(zhǎng)度

38、的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按右右端端對(duì)齊對(duì)齊,位數(shù)少的操作數(shù)會(huì)在高位用,位數(shù)少的操作數(shù)會(huì)在高位用0 0補(bǔ)齊。補(bǔ)齊。 例 若A = 5b11001,B = 3b101, 則A & B = (5b11001)&(5b0000101)= 5b00001 512021/3/952六、縮減運(yùn)算符六、縮減運(yùn)算符縮減運(yùn)算符縮減運(yùn)算符說(shuō)明說(shuō)明& &| |,與與非或或非異或同或單單目運(yùn)算符 運(yùn)算法則與位運(yùn)算符類(lèi)似,但運(yùn)算過(guò)程不同!運(yùn)算法則與位運(yùn)算符類(lèi)似,但運(yùn)算過(guò)程不同! 對(duì)對(duì)單單個(gè)操作數(shù)進(jìn)行個(gè)操作數(shù)進(jìn)行遞推遞推運(yùn)算運(yùn)算, ,即先將操作數(shù)的最低位與第即先將操作數(shù)的最低位與第二位進(jìn)

39、行與、或、非運(yùn)算,再將運(yùn)算結(jié)果與第三位進(jìn)行二位進(jìn)行與、或、非運(yùn)算,再將運(yùn)算結(jié)果與第三位進(jìn)行相同的運(yùn)算,依次類(lèi)推,直至最高位相同的運(yùn)算,依次類(lèi)推,直至最高位 。 運(yùn)算結(jié)果縮減為運(yùn)算結(jié)果縮減為1 1位二進(jìn)制數(shù)。位二進(jìn)制數(shù)。 例例reg3:0 a; b=|a; /等效于 b =( (a0 | a1) | a(2) | a3注意注意縮減運(yùn)算符縮減運(yùn)算符和和位運(yùn)算符位運(yùn)算符的區(qū)別!的區(qū)別!522021/3/953位運(yùn)算符與縮位運(yùn)算的比較位運(yùn)算符與縮位運(yùn)算的比較 A:4b1010 、B:4b1111,AB= 1010 AB= 0101A|B= 1111 A&B= 1010A = 0101B = 0

40、000 位運(yùn)算位運(yùn)算A=1B=1A=0B=0|A=1|B=0&A=1&B=1&A=1&0&1&0=0 縮位運(yùn)算縮位運(yùn)算532021/3/954七、移位運(yùn)算符七、移位運(yùn)算符移位運(yùn)算符移位運(yùn)算符說(shuō)明說(shuō)明 n An 或或 An A3 = 4b0001; 4b10014 = 4b0000 4b10011 = 5b10010; 4b10012 = 6b100100; 1 關(guān)系關(guān)系 =等于等于= !=縮位縮位& & | |邏輯邏輯&|條件條件?:end為提高程序的可讀性,為提高程序的可讀性,建議使用建議使用括號(hào)括號(hào)來(lái)控制來(lái)控制運(yùn)算的優(yōu)

41、先級(jí)!運(yùn)算的優(yōu)先級(jí)!例(ab)&(bc) (a= =b)|(x= = y) (!a)|(ab)572021/3/9583.4 組合電路的行為級(jí)建模組合電路的行為級(jí)建模p行為建模是行為建模是Verilog HDLVerilog HDL行為建模的主要方法,也是行為建模的主要方法,也是Verilog HDLVerilog HDL最能體現(xiàn)其高級(jí)編程語(yǔ)言之處,如果學(xué)過(guò)其他最能體現(xiàn)其高級(jí)編程語(yǔ)言之處,如果學(xué)過(guò)其他高級(jí)變成語(yǔ)言(如高級(jí)變成語(yǔ)言(如C C語(yǔ)言),就會(huì)對(duì)本節(jié)介紹的諸如語(yǔ)言),就會(huì)對(duì)本節(jié)介紹的諸如if-if-elseelse、forfor循環(huán)之類(lèi)的語(yǔ)法結(jié)構(gòu)非常熟悉。循環(huán)之類(lèi)的語(yǔ)法結(jié)構(gòu)非常熟

42、悉。p此外,本節(jié)還將介紹過(guò)程賦值的特點(diǎn)和用法。就像連續(xù)賦此外,本節(jié)還將介紹過(guò)程賦值的特點(diǎn)和用法。就像連續(xù)賦值用于數(shù)據(jù)流行為建模一樣,過(guò)程賦值用于順序行為建模。值用于數(shù)據(jù)流行為建模一樣,過(guò)程賦值用于順序行為建模。2021/3/9593.4 Verilog HDL行為級(jí)建模行為級(jí)建模行為級(jí)建模就是描述數(shù)字邏輯電路的行為級(jí)建模就是描述數(shù)字邏輯電路的功能和算法功能和算法。在在Verilog中,行為級(jí)描述主要使用由關(guān)鍵詞中,行為級(jí)描述主要使用由關(guān)鍵詞initial或或always定定義的兩種結(jié)構(gòu)類(lèi)型的語(yǔ)句。一個(gè)模塊的內(nèi)部可以包含多個(gè)義的兩種結(jié)構(gòu)類(lèi)型的語(yǔ)句。一個(gè)模塊的內(nèi)部可以包含多個(gè)initial或或al

43、ways語(yǔ)句語(yǔ)句。 initial語(yǔ)句是一條初始化語(yǔ)句,僅執(zhí)行一次,經(jīng)常用于測(cè)試模語(yǔ)句是一條初始化語(yǔ)句,僅執(zhí)行一次,經(jīng)常用于測(cè)試模塊中,對(duì)激勵(lì)信號(hào)進(jìn)行描述,在硬件電路的行為描述中,有塊中,對(duì)激勵(lì)信號(hào)進(jìn)行描述,在硬件電路的行為描述中,有時(shí)為了仿真的需要,也用時(shí)為了仿真的需要,也用initial語(yǔ)句給寄存器變量賦初值。語(yǔ)句給寄存器變量賦初值。initial語(yǔ)句主要是一條面向語(yǔ)句主要是一條面向仿真仿真的過(guò)程語(yǔ)句,不能用于邏輯的過(guò)程語(yǔ)句,不能用于邏輯綜合綜合 。在在always結(jié)構(gòu)型語(yǔ)句內(nèi)部有一系列過(guò)程性賦值語(yǔ)句,用來(lái)描結(jié)構(gòu)型語(yǔ)句內(nèi)部有一系列過(guò)程性賦值語(yǔ)句,用來(lái)描述電路的功能(行為)。述電路的功能(行

44、為)。592021/3/9603.5 Verilog HDL行為級(jí)建模行為級(jí)建模o 在詳細(xì)解釋二者的使用方法之前,可以?xún)H從在詳細(xì)解釋二者的使用方法之前,可以?xún)H從其英文單詞的字面意思來(lái)了解一下它們的作其英文單詞的字面意思來(lái)了解一下它們的作用:用:initialinitial用于做用于做 “ “初始化初始化”操作,操作,alwaysalways則則“始終始終”在執(zhí)行某些操作。在執(zhí)行某些操作。o 作為順序行為建模的兩條基本語(yǔ)句,作為順序行為建模的兩條基本語(yǔ)句,initialinitial和和alwaysalways存在一些共同的特點(diǎn):存在一些共同的特點(diǎn):602021/3/961o 所有的所有的ini

45、tialinitial和和alwaysalways語(yǔ)句都是在時(shí)刻語(yǔ)句都是在時(shí)刻0 0(仿(仿真剛開(kāi)始)開(kāi)始執(zhí)行;真剛開(kāi)始)開(kāi)始執(zhí)行;o initialinitial和和alwaysalways之后都跟隨著一段程序,這段之后都跟隨著一段程序,這段程序會(huì)被封裝成一個(gè)程序會(huì)被封裝成一個(gè)“程序塊程序塊”,可以用,可以用begin-endbegin-end(順序語(yǔ)句塊)封裝,也可以用(順序語(yǔ)句塊)封裝,也可以用fork-joinfork-join(并行語(yǔ)句塊)封裝。如果這段程序(并行語(yǔ)句塊)封裝。如果這段程序只有只有1 1條語(yǔ)句,可以不用封裝;條語(yǔ)句,可以不用封裝;o 一個(gè)模塊中可以包含任意多個(gè)一個(gè)模塊

46、中可以包含任意多個(gè)initialinitial或或alwaysalways語(yǔ)句,這些語(yǔ)句,這些initialinitial語(yǔ)句和語(yǔ)句和alwaysalways語(yǔ)句彼此之間語(yǔ)句彼此之間都是并行執(zhí)行的,即這些語(yǔ)句的執(zhí)行順序與其都是并行執(zhí)行的,即這些語(yǔ)句的執(zhí)行順序與其在模塊中書(shū)寫(xiě)的順序無(wú)關(guān)。在模塊中書(shū)寫(xiě)的順序無(wú)關(guān)。612021/3/9623.4.1 行為級(jí)建模基礎(chǔ)行為級(jí)建?;A(chǔ)下面介紹行為級(jí)建模中經(jīng)常使用的語(yǔ)句:下面介紹行為級(jí)建模中經(jīng)常使用的語(yǔ)句:1.initial語(yǔ)句結(jié)構(gòu)及過(guò)程賦值語(yǔ)句語(yǔ)句結(jié)構(gòu)及過(guò)程賦值語(yǔ)句2. always語(yǔ)句結(jié)構(gòu)及過(guò)程賦值語(yǔ)句語(yǔ)句結(jié)構(gòu)及過(guò)程賦值語(yǔ)句3. 條件語(yǔ)句(條件語(yǔ)句(if

47、-else)4. 多路分支語(yǔ)句(多路分支語(yǔ)句(case-endcase)5. for循環(huán)語(yǔ)句(例如循環(huán)語(yǔ)句(例如 for等)等)622021/3/9631. initial語(yǔ)句的一般用法:語(yǔ)句的一般用法:所有在所有在initialinitial語(yǔ)句內(nèi)的語(yǔ)句構(gòu)成了一個(gè)語(yǔ)句內(nèi)的語(yǔ)句構(gòu)成了一個(gè)initialinitial塊。塊。initialinitial塊從仿真塊從仿真0 0時(shí)刻開(kāi)始執(zhí)行,在整個(gè)仿真過(guò)程中時(shí)刻開(kāi)始執(zhí)行,在整個(gè)仿真過(guò)程中只執(zhí)行一次。只執(zhí)行一次。如果一個(gè)模塊中包括了若干個(gè)如果一個(gè)模塊中包括了若干個(gè)initialinitial塊,則這些塊,則這些initialinitial塊從仿真塊從仿

48、真0 0時(shí)刻開(kāi)始并發(fā)執(zhí)行,且每個(gè)塊的執(zhí)時(shí)刻開(kāi)始并發(fā)執(zhí)行,且每個(gè)塊的執(zhí)行是各自獨(dú)立的。行是各自獨(dú)立的。如果在塊內(nèi)包含了多條行為語(yǔ)句,那么需要將這些語(yǔ)如果在塊內(nèi)包含了多條行為語(yǔ)句,那么需要將這些語(yǔ)句組成一組,一般是使用關(guān)鍵字句組成一組,一般是使用關(guān)鍵字beginbegin和和endend將它們組將它們組合為一個(gè)塊語(yǔ)句;如果塊內(nèi)只有一條語(yǔ)句,則不必使合為一個(gè)塊語(yǔ)句;如果塊內(nèi)只有一條語(yǔ)句,則不必使用用beginbegin和和endend。由于由于initialinitial塊語(yǔ)句在整個(gè)仿真期間只能執(zhí)行一次,因塊語(yǔ)句在整個(gè)仿真期間只能執(zhí)行一次,因此它一般被用于初始化、信號(hào)監(jiān)視、生成仿真波形等此它一般被用

49、于初始化、信號(hào)監(jiān)視、生成仿真波形等目的。目的。632021/3/964642021/3/965o 可以發(fā)現(xiàn),可以發(fā)現(xiàn),initial語(yǔ)句執(zhí)行時(shí)可以通過(guò)指定時(shí)語(yǔ)句執(zhí)行時(shí)可以通過(guò)指定時(shí)延而控制某個(gè)信號(hào)的值不斷變化。延而控制某個(gè)信號(hào)的值不斷變化。o 如果這個(gè)變化是很有規(guī)律的,而且所有時(shí)延如果這個(gè)變化是很有規(guī)律的,而且所有時(shí)延值都相同,并且值只在值都相同,并且值只在0和和1之間交替變換,之間交替變換,就可以在這個(gè)信號(hào)上形成一個(gè)時(shí)鐘波形。就可以在這個(gè)信號(hào)上形成一個(gè)時(shí)鐘波形。o 通過(guò)改變時(shí)延值和不同的變化值,可以生成通過(guò)改變時(shí)延值和不同的變化值,可以生成任意的波形信號(hào)??梢?jiàn)任意的波形信號(hào)。可見(jiàn)initia

50、l語(yǔ)句主要用于初語(yǔ)句主要用于初始化和波形生成。始化和波形生成。652021/3/966o alwaysalways語(yǔ)句包括的所有行為語(yǔ)句構(gòu)成了一個(gè)語(yǔ)句包括的所有行為語(yǔ)句構(gòu)成了一個(gè)alwaysalways語(yǔ)句塊。該語(yǔ)句塊。該alwaysalways語(yǔ)句塊從仿真語(yǔ)句塊從仿真0 0時(shí)時(shí)刻開(kāi)始順序執(zhí)行其中的行為語(yǔ)句;在最后一刻開(kāi)始順序執(zhí)行其中的行為語(yǔ)句;在最后一條執(zhí)行完成后,再次開(kāi)始執(zhí)行其中的第一條條執(zhí)行完成后,再次開(kāi)始執(zhí)行其中的第一條語(yǔ)句,如此循環(huán)往復(fù),直至整個(gè)仿真結(jié)束。語(yǔ)句,如此循環(huán)往復(fù),直至整個(gè)仿真結(jié)束。o alwaysalways語(yǔ)句通常用于對(duì)數(shù)字電路中一組反復(fù)語(yǔ)句通常用于對(duì)數(shù)字電路中一組反復(fù)

51、執(zhí)行的活動(dòng)進(jìn)行建模。例如時(shí)鐘信號(hào)發(fā)生器執(zhí)行的活動(dòng)進(jìn)行建模。例如時(shí)鐘信號(hào)發(fā)生器,每半個(gè)時(shí)鐘周期時(shí)鐘信號(hào)翻轉(zhuǎn)一次。在現(xiàn),每半個(gè)時(shí)鐘周期時(shí)鐘信號(hào)翻轉(zhuǎn)一次。在現(xiàn)實(shí)電路中只要電源接通,時(shí)鐘信號(hào)發(fā)生器從實(shí)電路中只要電源接通,時(shí)鐘信號(hào)發(fā)生器從時(shí)刻時(shí)刻0 0就有效,一直工作下去。就有效,一直工作下去。2. always語(yǔ)句的一般用法:語(yǔ)句的一般用法:662021/3/9672. always語(yǔ)句的一般用法:語(yǔ)句的一般用法:always (事件控制表達(dá)式事件控制表達(dá)式)begin:塊名:塊名 塊內(nèi)局部變量的定義;塊內(nèi)局部變量的定義; 過(guò)程賦值語(yǔ)句過(guò)程賦值語(yǔ)句(包括高級(jí)語(yǔ)句)(包括高級(jí)語(yǔ)句);endbeginen

52、d 之間只有一條語(yǔ)句時(shí),關(guān)鍵詞可以省略;之間只有一條語(yǔ)句時(shí),關(guān)鍵詞可以省略;beginend 之間的多條語(yǔ)句被稱(chēng)為之間的多條語(yǔ)句被稱(chēng)為順序語(yǔ)句塊。順序語(yǔ)句塊??梢越o可以給語(yǔ)句語(yǔ)句塊塊取一個(gè)名字,稱(chēng)為取一個(gè)名字,稱(chēng)為有名塊有名塊。 “”稱(chēng)為事件控制運(yùn)算符,稱(chēng)為事件控制運(yùn)算符,用于掛起某個(gè)動(dòng)作,直到事件用于掛起某個(gè)動(dòng)作,直到事件發(fā)生發(fā)生。“事件控制表達(dá)式事件控制表達(dá)式”也稱(chēng)為敏感事件表也稱(chēng)為敏感事件表,它是后面,它是后面begin和和end之間的語(yǔ)句執(zhí)行的條件。當(dāng)事件發(fā)生或某一特定之間的語(yǔ)句執(zhí)行的條件。當(dāng)事件發(fā)生或某一特定的條件變?yōu)榈臈l件變?yōu)椤罢嬲妗睍r(shí),后面的過(guò)程賦值語(yǔ)句就會(huì)被執(zhí)行。時(shí),后面的過(guò)程

53、賦值語(yǔ)句就會(huì)被執(zhí)行。672021/3/968o 時(shí)延控制時(shí)延控制“#10”,always語(yǔ)句從時(shí)刻語(yǔ)句從時(shí)刻0開(kāi)始,每隔開(kāi)始,每隔10個(gè)單個(gè)單位時(shí)間就把位時(shí)間就把Clk上的值翻轉(zhuǎn)一次,這樣就在上的值翻轉(zhuǎn)一次,這樣就在Clk上得到了一上得到了一個(gè)周期為個(gè)周期為20的波形信號(hào)。的波形信號(hào)。o always中的時(shí)序控制可以是上例中的時(shí)延控制,也可以是中的時(shí)序控制可以是上例中的時(shí)延控制,也可以是事件控制。事件控制就是等待某一事件發(fā)生,該事件的事件控制。事件控制就是等待某一事件發(fā)生,該事件的發(fā)生將執(zhí)行發(fā)生將執(zhí)行always語(yǔ)句。語(yǔ)句。682021/3/969o例例用符號(hào)用符號(hào)“”定義了事件控制的定義了事

54、件控制的always語(yǔ)句。語(yǔ)句。reg 0:5 InstrReg;reg 3:0 Accum;wire ExecuteCycle;always (EcecuteCycle) /always語(yǔ)句開(kāi)始執(zhí)行的條件是事件語(yǔ)句開(kāi)始執(zhí)行的條件是事件EcecuteCycle的發(fā)生的發(fā)生begin /順序語(yǔ)句塊開(kāi)始順序語(yǔ)句塊開(kāi)始case(InstrReg 0 : 1 ) /順序語(yǔ)句塊內(nèi)的順序語(yǔ)句塊內(nèi)的case開(kāi)始開(kāi)始 2b00: Store (Accum, InstrReg2:5 ) ; /Store是用戶(hù)在別處自定義的是用戶(hù)在別處自定義的任務(wù)任務(wù) 2b11: Load (Accum, InstrReg2:5

55、 ) ; /Load是用戶(hù)在別處自定義的是用戶(hù)在別處自定義的任務(wù)任務(wù) 2b01: Jump (InstrReg2:5 ) ; /Jump是用戶(hù)在別處自定義的任是用戶(hù)在別處自定義的任務(wù)務(wù) 2b10 : ; /不做任何操作不做任何操作 endcase /順序語(yǔ)句塊內(nèi)的順序語(yǔ)句塊內(nèi)的case結(jié)構(gòu)開(kāi)始結(jié)構(gòu)開(kāi)始end /順序語(yǔ)句塊結(jié)束順序語(yǔ)句塊結(jié)束692021/3/970o 這個(gè)這個(gè)always語(yǔ)句用到了符號(hào)語(yǔ)句用到了符號(hào),意思是只要,意思是只要ExecuteCycle上有事件發(fā)生(值的變化),上有事件發(fā)生(值的變化),就執(zhí)行順序語(yǔ)句塊中的語(yǔ)句。就執(zhí)行順序語(yǔ)句塊中的語(yǔ)句。o 符號(hào)符號(hào)“”定義的是觸發(fā)事件

56、,一旦檢測(cè)到定義的是觸發(fā)事件,一旦檢測(cè)到ExecuteCycle上的電平跳變時(shí)的邊沿,就執(zhí)上的電平跳變時(shí)的邊沿,就執(zhí)行行always語(yǔ)句。語(yǔ)句。o 事件控制事件控制”缺省為缺省為“電平敏感事件電平敏感事件”,若使用關(guān)鍵詞若使用關(guān)鍵詞“posedge”和和“negedge”定定義邊沿觸發(fā)。義邊沿觸發(fā)。702021/3/971module DFF(Clk, D, Set, Q, Qbar ) ;input Clk, D, Set;output Q, Qbar;reg Q, Qbar;always (negedge Clk) begin if (Set!= 1) begin #5 Q = D; #1

57、 Qbar =Q; end else begin #3 Q = 1; #2 Qbar = 0; end endendmodule 例例 一個(gè)邊沿敏感事件控制的一個(gè)邊沿敏感事件控制的alwaysalways語(yǔ)句語(yǔ)句712021/3/972beginbegin 語(yǔ)句語(yǔ)句1 1; 語(yǔ)句語(yǔ)句2 2; 語(yǔ)句語(yǔ)句n n;endendbeginbegin:塊名:塊名 塊內(nèi)聲明語(yǔ)句;塊內(nèi)聲明語(yǔ)句; 語(yǔ)句語(yǔ)句1 1; 語(yǔ)句語(yǔ)句2 2; 語(yǔ)句語(yǔ)句n n;endend注:塊內(nèi)聲明語(yǔ)句可以是注:塊內(nèi)聲明語(yǔ)句可以是參數(shù)參數(shù)聲明、聲明、regreg型型變量聲明變量聲明、integerinteger型型變量聲明、變量聲明、

58、realreal型型變量聲明語(yǔ)句。變量聲明語(yǔ)句?;蚧?22021/3/973 例例1 1 例例2 #10注注:這里標(biāo)識(shí)符:這里標(biāo)識(shí)符“# #”表示延遲;表示延遲; 在模塊調(diào)用中在模塊調(diào)用中“# #”表示參數(shù)的傳遞表示參數(shù)的傳遞732021/3/974 例例 使用行為描述風(fēng)格對(duì)下圖所示的使用行為描述風(fēng)格對(duì)下圖所示的2 2線(xiàn)線(xiàn)4 4線(xiàn)譯碼器進(jìn)行建模線(xiàn)譯碼器進(jìn)行建模 Y2 A1 A0 Y1 Y0 Y3 E 213012011010 , , AAEYAAEYAAEYAAEYnnnn742021/3/975752021/3/9764 4、 條件語(yǔ)句條件語(yǔ)句一、一、if-else語(yǔ)句語(yǔ)句o 判定所給條件是

59、否滿(mǎn)足,根據(jù)判定的結(jié)果(真或假)判定所給條件是否滿(mǎn)足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。決定執(zhí)行給出的兩種操作之一。o if-elseif-else語(yǔ)句有語(yǔ)句有3 3種形式種形式n 其中其中“表達(dá)式表達(dá)式”為為邏輯邏輯表達(dá)式或表達(dá)式或關(guān)系關(guān)系表達(dá)式,或表達(dá)式,或一一位位的的變量變量。n 若表達(dá)式的值為若表達(dá)式的值為0 0、x x或或z z,則判定的結(jié)果為,則判定的結(jié)果為“假假”;若為若為1 1,則結(jié)果為,則結(jié)果為“真真”。n 語(yǔ)句可為單句,也可為多句;多句時(shí)一定要用語(yǔ)句可為單句,也可為多句;多句時(shí)一定要用“begin_endbegin_end”語(yǔ)句括起來(lái),形成一個(gè)復(fù)合塊語(yǔ)句。

60、語(yǔ)句括起來(lái),形成一個(gè)復(fù)合塊語(yǔ)句。對(duì)于每個(gè)判定對(duì)于每個(gè)判定只有只有兩兩個(gè)分支個(gè)分支 條件語(yǔ)句分為兩種:條件語(yǔ)句分為兩種:if-elseif-else語(yǔ)句和語(yǔ)句和casecase語(yǔ)句;語(yǔ)句; 它們都是順序語(yǔ)句,應(yīng)放在它們都是順序語(yǔ)句,應(yīng)放在“alwaysalways”塊內(nèi)!塊內(nèi)!762021/3/9774 4、 條件語(yǔ)句條件語(yǔ)句o 允許一定形式的表達(dá)式簡(jiǎn)寫(xiě)方式,如:允許一定形式的表達(dá)式簡(jiǎn)寫(xiě)方式,如:n if(expression) if(expression) 等同于等同于if(expression = = 1) if(expression = = 1) n if(if(!expression) expression) 等同于等同于if(expression if(expression != 1) = 1) ifif(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句1 1;ifif(表達(dá)式(表達(dá)式1 1) 語(yǔ)句語(yǔ)句1 1;elseelse 語(yǔ)句語(yǔ)句2 2;ifif

溫馨提示

  • 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)論