新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Verilog HDL基礎(chǔ)教程之:數(shù)據(jù)類(lèi)型和運(yùn)算符

Verilog HDL基礎(chǔ)教程之:數(shù)據(jù)類(lèi)型和運(yùn)算符

作者: 時(shí)間:2013-08-23 來(lái)源:網(wǎng)絡(luò) 收藏

常用

本文引用地址:http://2s4d.com/article/189525.htm

中總共有19種,是用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)儲(chǔ)存和傳送元素的。在本書(shū)中,我們先只介紹4個(gè)最基本的數(shù)據(jù)類(lèi)型,它們分別是:reg型,wire型,integer型和parameter型。

其他數(shù)據(jù)類(lèi)型在后面的章節(jié)里逐步介紹,讀者也可以查閱附錄中 語(yǔ)法參考書(shū)的有關(guān)章節(jié)逐步掌握。其他的類(lèi)型如下:large型、medium型、scalared型、time型、small型、tri型、trio型、tri1型、triand型、trior型、trireg型、vectored型、wand型和wor型。

這些數(shù)據(jù)類(lèi)型除time型外都與基本邏輯單元建庫(kù)有關(guān),與系統(tǒng)設(shè)計(jì)沒(méi)有很大的關(guān)系。在一般電路設(shè)計(jì)自動(dòng)化的環(huán)境下,仿真用的基本部件庫(kù)是由半導(dǎo)體廠家和EDA工具廠家共同提供的。系統(tǒng)設(shè)計(jì)工程師不必過(guò)多地關(guān)心門(mén)級(jí)和開(kāi)關(guān)級(jí)的 語(yǔ)法現(xiàn)象。Verilog HDL語(yǔ)言中也有常量和變量之分,它們分別屬于以上這些類(lèi)型。下面對(duì)最常用的幾種進(jìn)行介紹。

常量

常量是在程序運(yùn)行過(guò)程中其值不能被改變的量。下面首先對(duì)在Verilog HDL語(yǔ)言中使用的數(shù)字及其表示方式進(jìn)行介紹。

1.數(shù)字

(1)整數(shù)。

在Verilog HDL中,整型常量有以下4種進(jìn)制表示形式。

① 二進(jìn)制整數(shù)(b或B)。

② 十進(jìn)制整數(shù)(d或D)。

③ 十六進(jìn)制整數(shù)(h或H)。

④ 八進(jìn)制整數(shù)(o或O)。

數(shù)字表達(dá)方式有以下3種。

① 位寬>進(jìn)制>數(shù)字>,這是一種全面的描述方式。

② 進(jìn)制>數(shù)字>,在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機(jī)器系統(tǒng)決定,但至少32位)。

③ 數(shù)字>,在這種描述方式中,采用缺省進(jìn)制十進(jìn)制。

在表達(dá)式中,位寬指明了數(shù)字的精確位數(shù)。例如:一個(gè)4位二進(jìn)制數(shù)數(shù)字的位寬為4,一個(gè)4位十六進(jìn)制數(shù)數(shù)字的位寬為16(因?yàn)槊繂蝹€(gè)十六進(jìn)制數(shù)要用4位二進(jìn)制數(shù)來(lái)表示),如下例所示:

8'b10101100 //位寬為8的數(shù)的二進(jìn)制表示,'b表示二進(jìn)制

8'ha2 //位寬為8的數(shù)的十六進(jìn)制,'h表示十六進(jìn)制。

(2)x和z值。

在數(shù)字電路中,x代表不定值,z代表高阻值。一個(gè)x可以用來(lái)定義十六/八/二進(jìn)制數(shù)的四/三/一位二進(jìn)制數(shù)的狀態(tài)。z的表示方式同x類(lèi)似。z還有一種表達(dá)方式是可以寫(xiě)作?。在使用case表達(dá)式時(shí)建議使用這種寫(xiě)法,以提高程序的可讀性,如下例所示:

4'b10x0 //位寬為4的二進(jìn)制數(shù)從低位數(shù)起第二位為不定值

4'b101z //位寬為4的二進(jìn)制數(shù)從低位數(shù)起第一位為高阻值

12'dz //位寬為12的十進(jìn)制數(shù)其值為高阻值(第一種表達(dá)方式)

12'd? //位寬為12的十進(jìn)制數(shù)其值為高阻值(第二種表達(dá)方式)

8'h4x //位寬為8的十六進(jìn)制數(shù)其低四位值為不定值

(3)負(fù)數(shù)。

一個(gè)數(shù)字可以被定義為負(fù)數(shù),只需在位寬表達(dá)式前加一個(gè)減號(hào),并且減號(hào)必須寫(xiě)在數(shù)字定義表達(dá)式的最前面。注意減號(hào)不可以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具體的數(shù)之間,如下例所示:

-8'd5 //這個(gè)表達(dá)式代表5的補(bǔ)數(shù)(用8位二進(jìn)制數(shù)表示)

8'd-5 //非法格式

(4)下劃線(underscore_)。

下劃線可以用來(lái)分隔數(shù)字的表達(dá)以提高程序可讀性。但不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間,例如:

16'b1010_1011_1111_1010 //合法格式

8'b_0011_1010 //非法格式

當(dāng)常量不聲明位數(shù)時(shí),默認(rèn)值是32位,每個(gè)字母用8位的ASCII值表示,例如:

10=32'd10=32'b1010 //十進(jìn)制和二進(jìn)制

1=32'd1=32'b1 //十進(jìn)制和二進(jìn)制

-1=-32'd1=32'hFFFFFFFF //十進(jìn)制和十六進(jìn)制

'BX=32'BX=32'BXXXXXXX…X //默認(rèn)聲明為32位

AB=16'B01000001_01000010 //每個(gè)字母用8位表示

2.參數(shù)(Parameter)

在Verilog HDL中用parameter來(lái)定義常量,即用parameter來(lái)定義一個(gè)標(biāo)識(shí)符代表一個(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á)式;

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=7; //定義參數(shù)msb為常量7

parameter e=25, f=29; //定義兩個(gè)常數(shù)參數(shù)

parameter r=5.7; //聲明r為一個(gè)實(shí)型參數(shù)

parameter byte_size=8, byte_msb=byte_size-1; //用常數(shù)表達(dá)式賦值

parameter average_delay = (r+f)/2; //用常數(shù)表達(dá)式賦值

參數(shù)型常數(shù)經(jīng)常用于定義延遲時(shí)間和變量寬度。在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞改變?cè)诒灰媚K或?qū)嵗幸讯x的參數(shù)。下面將通過(guò)一個(gè)例子進(jìn)一步說(shuō)明在層次調(diào)用的電路中改變參數(shù)常用的一些用法。

module Decode(A,F); //模塊聲明

parameter Width=1, Polarity=1; //參數(shù)聲明

……………

endmodule

module Top;

wire[3:0] A4; //連線資源聲明

wire[4:0] A5;

wire[15:0] F16;

wire[31:0] F32;

Decode #(4,0) D1(A4,F16); //模塊引用,并傳遞參數(shù)(4,0)

Decode #(5) D2(A5,F32); //模塊引用,并傳遞參數(shù)(5)

endmodule

在引用Decode實(shí)例時(shí),D1和D2的Width將采用不同的值,分別為4和5,且D1的Polarity將為0。可用例子中所用的方法來(lái)改變參數(shù),即用“#(4,0)”向D1中傳遞“Width=4,Polarity=0”,用“#(5)”向D2中傳遞“Width=5,Polarit=1”。

變量

變量是在程序運(yùn)行過(guò)程中,其值可以改變的量。在Verilog HDL中變量類(lèi)型有很多種,這里只對(duì)常用的幾種變量進(jìn)行介紹。

1.網(wǎng)絡(luò)類(lèi)型變量

網(wǎng)絡(luò)類(lèi)型表示結(jié)構(gòu)實(shí)體(例如門(mén))之間的物理連接。網(wǎng)絡(luò)類(lèi)型的變量不能儲(chǔ)存值,而且它必需受到驅(qū)動(dòng)器(例如門(mén)或連續(xù)賦值語(yǔ)句,assign)的驅(qū)動(dòng)。如果沒(méi)有驅(qū)動(dòng)器連接到網(wǎng)絡(luò)類(lèi)型的變量上,則該變量就是高阻的,即其值為z。

常用的網(wǎng)絡(luò)類(lèi)型變量包括wire型和tri型。這兩種變量都是用于連接器件單元,它們具有相同的語(yǔ)法格式和功能。之所以提供這兩種名字來(lái)表達(dá)相同的概念是為了與模型中所使用的變量的實(shí)際情況相一致。

wire型變量通常是用來(lái)表示單個(gè)門(mén)驅(qū)動(dòng)或連續(xù)賦值語(yǔ)句驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù),tri型變量則用來(lái)表示多驅(qū)動(dòng)器驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù)。如果wire型或tri型變量沒(méi)有定義邏輯強(qiáng)度(logic strength),在多驅(qū)動(dòng)源的情況下,邏輯值會(huì)發(fā)生沖突,從而產(chǎn)生不確定值。

表1所示為在同等驅(qū)動(dòng)強(qiáng)度下,兩個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)的wire型和tri型變量的真值表。

表1 wire/tri型變量真值表

wire/tri型變量雙驅(qū)動(dòng)源運(yùn)算結(jié)果

驅(qū)動(dòng)源1

驅(qū)動(dòng)源2

0

1

x

z

0

0

x

x

0

1

1

x

1

x

x

x

x

x

z

0

1

x

z

wire型變量常用來(lái)表示用于以assign關(guān)鍵字指定的組合邏輯信號(hào)。Verilog程序模塊中輸入/輸出信號(hào)類(lèi)型缺省時(shí)自動(dòng)定義為wire型。wire型變量可以用作任何方程式的輸入,也可以用作“assign”語(yǔ)句或?qū)嵗妮敵?。wire型變量的聲明格式如下:

wire [n-1:0] 變量名1,變量名2,…,變量名i; //共有i條總線,每條總線內(nèi)有n條線路

也可以如下表示:

wire [n:1] 變量名1,變量名2,…,變量名i; //共有i條總線,每條總線內(nèi)有n條線路

其中,wire是wire型變量的確認(rèn)符,[n-1:0]和[n:1]代表該變量的位寬,即該變量有幾位,最后跟著的是變量的名字。如果一次定義多個(gè)變量,變量名之間用逗號(hào)隔開(kāi)。聲明語(yǔ)句的最后要用分號(hào)表示語(yǔ)句結(jié)束。如下所示:

wire a; //定義了一個(gè)一位的wire型變量

wire [7:0] b; //定義了一個(gè)八位的wire型變量

wire [4:1] c, d; //定義了兩個(gè)四位的wire型變量


上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉