本節(jié)主要講解了 Verilog 的基礎(chǔ)知識(shí),包括 7 個(gè)小節(jié),下面我們分別給大家介紹這 7 個(gè)小節(jié)的內(nèi)容。
1.Verilog 的邏輯值
我們先看下邏輯電路中有四種值,即四種狀態(tài):
邏輯 0:表示低電平,也就是對(duì)應(yīng)我們電路的 GND;
邏輯 1:表示高電平,也就是對(duì)應(yīng)我們電路的 VCC;
邏輯 X:表示未知,有可能是高電平,也有可能是低電平;
邏輯 Z:表示高阻態(tài),外部沒有激勵(lì)信號(hào)是一個(gè)懸空狀態(tài)。
如下圖所示:
2.Verilog 的標(biāo)識(shí)符
定義 :
標(biāo)識(shí)符(identifier)用于定義模塊名、端口名和信號(hào)名等。Verilog 的標(biāo)識(shí)符可以是任意一組字母、數(shù)字、$和_(下劃線)符號(hào)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是字母或者下劃線。另外,標(biāo)識(shí)符是區(qū)分大小寫的。以下是標(biāo)識(shí)符的幾個(gè)例子:
Count,COUNT //與 Count 不同,R56_68,F(xiàn)IVE$;
雖然標(biāo)識(shí)符寫法很多,但是要簡(jiǎn)潔、清晰、易懂,推薦寫法如下:
Count,fifo_wr
不建議大小寫混合使用,普通內(nèi)部信號(hào)建議全部小寫,參數(shù)定義建議大寫,另外信號(hào)命名最好體現(xiàn)信 號(hào)的含義。
規(guī)范建議 :
以下是一些書寫規(guī)范的要求:
2、用下劃線區(qū)分詞語(yǔ)組合,如 cpu_addr。
3、采用一些前綴或后綴,比如:時(shí)鐘采用 clk 前綴:clk_50m,clk_cpu;低電平采用_n 后綴:enable_n;
4、統(tǒng)一縮寫,如全局復(fù)位信號(hào) rst。
5、同一信號(hào)在不同層次保持一致性,如同一時(shí)鐘信號(hào)必須在各模塊保持一致。
6、自定義的標(biāo)識(shí)符不能與保留字(關(guān)鍵詞)同名。
7、參數(shù)統(tǒng)一采用大寫,如定義參數(shù)使用SIZE。
3.Verilog 的數(shù)字進(jìn)制格式
Verilog 數(shù)字進(jìn)制格式包括二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制,一般常用的為二進(jìn)制、十進(jìn)制和十六 進(jìn)制。
二進(jìn)制表示如下:4’b0101 表示 4 位二進(jìn)制數(shù)字 0101;十進(jìn)制表示如下:4’d2 表示 4 位十進(jìn)制數(shù)字 2(二進(jìn)制 0010);十六進(jìn)制表示如下:4’ha 表示 4 位十六進(jìn)制數(shù)字 a(二進(jìn)制 1010),十六進(jìn)制的計(jì)數(shù)方式為 0,1,2…9,a,b,c,d,e,f,最大計(jì)數(shù)為 f(f:十進(jìn)制表示為 15)。當(dāng)代碼中沒有指定數(shù)字的位寬與進(jìn)制時(shí),默認(rèn)為 32 位的十進(jìn)制,比如 100,實(shí)際上表示的值為 32’d100。
4.Verilog 的數(shù)據(jù)類型
在 Verilog 語(yǔ)法中,主要有三大類數(shù)據(jù)類型,即寄存器類型、線網(wǎng)類型和參數(shù)類型。從名稱中,我們可 以看出,真正在數(shù)字電路中起作用的數(shù)據(jù)類型應(yīng)該是寄存器類型和線網(wǎng)類型。
1) 寄存器類型
寄存器類型表示一個(gè)抽象的數(shù)據(jù)存儲(chǔ)單元,它只能在 always 語(yǔ)句和 initial 語(yǔ)句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值過(guò)程中被保存下來(lái)。如果該過(guò)程語(yǔ)句描述的是時(shí)序邏輯,即 always 語(yǔ)句帶有時(shí)鐘信號(hào),則該寄存器變量對(duì)應(yīng)為寄存器;如果該過(guò)程語(yǔ)句描述的是組合邏輯,即 always 語(yǔ)句不帶有時(shí)鐘信號(hào),則該寄存器變量對(duì)應(yīng)為硬件連線;寄存器類型的缺省值是 x(未知狀態(tài))。寄存器數(shù)據(jù)類型有很多種,如 reg、integer、real 等,其中最常用的就是 reg 類型,它的使用方法如下:
//reg define reg [31:0] delay_cnt; //延時(shí)計(jì)數(shù)器 reg key_flag ; //按鍵標(biāo)志 |
2) 線網(wǎng)類型
線網(wǎng)表示 Verilog 結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動(dòng)元件的值決定,例如連續(xù)賦值或門的輸出。如果沒有驅(qū)動(dòng)元件連接到線網(wǎng),線網(wǎng)的缺省值為 z(高阻態(tài))。線網(wǎng)類型同寄存器類型一樣也是有很多種,如 tri 和 wire 等,其中最常用的就是 wire 類型,它的使用方法如下:
//wire define wire data_en; //數(shù)據(jù)使能信號(hào) wire [7:0] data ; //數(shù)據(jù) |
3) 參數(shù)類型
我們?cè)賮?lái)看下參數(shù)類型,參數(shù)其實(shí)就是一個(gè)常量,常被用于定義狀態(tài)機(jī)的狀態(tài)、數(shù)據(jù)位寬和延遲大小等,由于它可以在編譯時(shí)修改參數(shù)的值,因此它又常被用于一些參數(shù)可調(diào)的模塊中,使用戶在實(shí)例化模塊時(shí),可以根據(jù)需要配置參數(shù)。在定義參數(shù)時(shí),我們可以一次定義多個(gè)參數(shù),參數(shù)與參數(shù)之間需要用逗號(hào)隔開。這里我們需要注意的是參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。它的使用方法如下:
//parameter define parameter DATA_WIDTH =8; //數(shù)據(jù)位寬為8位 |
5.Verilog 的運(yùn)算符
大家看完了 Verilog 的數(shù)據(jù)類型,我們?cè)賮?lái)介紹下 Verilog 的運(yùn)算符。Verilog 中的運(yùn)算符按照功能可以分為下述類型:1、算術(shù)運(yùn)算符、 2、關(guān)系運(yùn)算符、3、邏輯運(yùn)算符、 4、條件運(yùn)算符、 5、位運(yùn)算符、 6、移位運(yùn)算符、 7、拼接運(yùn)算符。下面我們分別對(duì)這些運(yùn)算符進(jìn)行介紹。
1) 算術(shù)運(yùn)算符
算術(shù)運(yùn)算符,簡(jiǎn)單來(lái)說(shuō),就是數(shù)學(xué)運(yùn)算里面的加減乘除,數(shù)字邏輯處理有時(shí)候也需要進(jìn)行數(shù)字運(yùn)算,所以需要算術(shù)運(yùn)算符。常用的算術(shù)運(yùn)算符主要包括加減乘除和模除(模除運(yùn)算也叫取余運(yùn)算)如下表所示:
大家要注意下,Verilog 實(shí)現(xiàn)乘除比較浪費(fèi)組合邏輯資源,尤其是除法。一般 2 的指數(shù)次冪的乘除法使用移位運(yùn)算來(lái)完成運(yùn)算,詳情可以看移位運(yùn)算符章節(jié)。非 2 的指數(shù)次冪的乘除法一般是調(diào)用現(xiàn)成的 IP, QUARTUS/ISE 等工具軟件會(huì)有提供,不過(guò)這些工具軟件提供的 IP 也是由最底層的組合邏輯(與或非門等)搭建而成的。
2) 關(guān)系運(yùn)算符
關(guān)系運(yùn)算符主要是用來(lái)做一些條件判斷用的,在進(jìn)行關(guān)系運(yùn)算符時(shí),如果聲明的關(guān)系是假的,則返回值是 0,如果聲明的關(guān)系是真的,則返回值是 1;所有的關(guān)系運(yùn)算符有著相同的優(yōu)先級(jí)別,關(guān)系運(yùn)算符的優(yōu)先級(jí)別低于算術(shù)運(yùn)算符的優(yōu)先級(jí)別如下表所示。
3) 邏輯運(yùn)算符
邏輯運(yùn)算符是連接多個(gè)關(guān)系表達(dá)式用的,可實(shí)現(xiàn)更加復(fù)雜的判斷,一般不單獨(dú)使用,都需要配合具體語(yǔ)句來(lái)實(shí)現(xiàn)完整的意思,如下表所示。
4) 條件運(yùn)算符
條件操作符一般來(lái)構(gòu)建從兩個(gè)輸入中選擇一個(gè)作為輸出的條件選擇結(jié)構(gòu),功能等同于 always 中的 if-else 語(yǔ)句,如下表所示。
5) 位運(yùn)算符
位運(yùn)算符是一類最基本的運(yùn)算符,可以認(rèn)為它們直接對(duì)應(yīng)數(shù)字邏輯中的與、或、非門等邏輯門。常用 的位運(yùn)算符如下表所示。
位運(yùn)算符的與、或、非與邏輯運(yùn)算符邏輯與、邏輯或、邏輯非使用時(shí)候容易混淆,邏輯運(yùn)算符一在條件判斷上,位運(yùn)算符一般用在信號(hào)賦值上。
6) 移位運(yùn)算符
移位運(yùn)算符包括左移位運(yùn)算符和右移位運(yùn)算符,這兩種移位運(yùn)算符都用 0 來(lái)填補(bǔ)移出的空位。如下表所示。
假設(shè) a 有 8bit 數(shù)據(jù)位寬,那么 a<<2,表示 a 左移 2bit,a 還是 8bit 數(shù)據(jù)位寬,a 的最高 2bit 數(shù)據(jù)被移位丟棄了,最低 2bit 數(shù)據(jù)固定補(bǔ) 0。如果 a 是 3(二進(jìn)制:00000011),那么 3 左移 2bit,3<<2,就是 12(二進(jìn)制:00001100)。一般使用左移位運(yùn)算代替乘法,右移位運(yùn)算代替除法,但是這種也只能表示 2 的指數(shù)次冪的乘除法。
7) 拼接運(yùn)算符
Verilog 中有一個(gè)特殊的運(yùn)算符是 C 語(yǔ)言中沒有的,就是位拼接運(yùn)算符。用這個(gè)運(yùn)算符可以把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來(lái)進(jìn)行運(yùn)算操作。如下表所示。
8) 運(yùn)算符的優(yōu)先級(jí)
介紹完了這么多運(yùn)算符,大家可能會(huì)想到究竟哪個(gè)運(yùn)算符高,哪個(gè)運(yùn)算符低。為了便于大家查看這些 運(yùn)算符的優(yōu)先級(jí),我們將它們制作成了表格,如下表所示。
6.注釋
Verilog HDL 中有兩種注釋的方式,一種是以“/*”符號(hào)開始,“*/”結(jié)束,在兩個(gè)符號(hào)之間的語(yǔ)句都是注釋語(yǔ)句,因此可擴(kuò)展到多行。如:
/*statement1 ,
statement2,
......
statementn */
以上 n 個(gè)語(yǔ)句都是注釋語(yǔ)句。
另一種是以//開頭的語(yǔ)句,它表示以//開始到本行結(jié)束都屬于注釋語(yǔ)句。如:
//statement1
建議的寫法:使用//作為注釋。
7.關(guān)鍵字
Verilog 和 C 語(yǔ)言類似,都因編寫需要定義了一系列保留字,叫做關(guān)鍵字(或關(guān)鍵詞)。這些保留字是識(shí)別語(yǔ)法的關(guān)鍵。我們給大家列出了 Verilog 中的關(guān)鍵字,如下表所示。
雖然上表列了很多,但是實(shí)際經(jīng)常使用的不是很多,實(shí)際經(jīng)常使用的主要如下表所示。
注意只有小寫的關(guān)鍵字才是保留字。例如,標(biāo)識(shí)符 always(這是個(gè)關(guān)鍵詞)與標(biāo)識(shí)符 ALWAYS(非關(guān)鍵詞)是不同的。
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110392 -
標(biāo)識(shí)符
+關(guān)注
關(guān)注
0文章
12瀏覽量
7392 -
GND
+關(guān)注
關(guān)注
2文章
540瀏覽量
38900
原文標(biāo)題:七步來(lái)學(xué)習(xí)掌握Verilog 基礎(chǔ)知識(shí)
文章出處:【微信號(hào):IC學(xué)習(xí),微信公眾號(hào):IC學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論