a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > EDA/PCB > 設計應用 > Verilog HDL基礎教程之:數據類型和運算符

Verilog HDL基礎教程之:數據類型和運算符

作者: 時間:2013-08-23 來源:網絡 收藏

常用

本文引用地址:http://www.j9360.com/article/189525.htm

中總共有19種是用來表示數字電路硬件中的數據儲存和傳送元素的。在本書中,我們先只介紹4個最基本的數據類型,它們分別是:reg型,wire型,integer型和parameter型。

其他數據類型在后面的章節里逐步介紹,讀者也可以查閱附錄中 語法參考書的有關章節逐步掌握。其他的類型如下:large型、medium型、scalared型、time型、small型、tri型、trio型、tri1型、triand型、trior型、trireg型、vectored型、wand型和wor型。

這些數據類型除time型外都與基本邏輯單元建庫有關,與系統設計沒有很大的關系。在一般電路設計自動化的環境下,仿真用的基本部件庫是由半導體廠家和EDA工具廠家共同提供的。系統設計工程師不必過多地關心門級和開關級的 語法現象。Verilog HDL語言中也有常量和變量之分,它們分別屬于以上這些類型。下面對最常用的幾種進行介紹。

常量

常量是在程序運行過程中其值不能被改變的量。下面首先對在Verilog HDL語言中使用的數字及其表示方式進行介紹。

1.數字

(1)整數。

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

① 二進制整數(b或B)。

② 十進制整數(d或D)。

③ 十六進制整數(h或H)。

④ 八進制整數(o或O)。

數字表達方式有以下3種。

① 位寬>進制>數字>,這是一種全面的描述方式。

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

③ 數字>,在這種描述方式中,采用缺省進制十進制。

在表達式中,位寬指明了數字的精確位數。例如:一個4位二進制數數字的位寬為4,一個4位十六進制數數字的位寬為16(因為每單個十六進制數要用4位二進制數來表示),如下例所示:

8'b10101100 //位寬為8的數的二進制表示,'b表示二進制

8'ha2 //位寬為8的數的十六進制,'h表示十六進制。

(2)x和z值。

在數字電路中,x代表不定值,z代表高阻值。一個x可以用來定義十六/八/二進制數的四/三/一位二進制數的狀態。z的表示方式同x類似。z還有一種表達方式是可以寫作?。在使用case表達式時建議使用這種寫法,以提高程序的可讀性,如下例所示:

4'b10x0 //位寬為4的二進制數從低位數起第二位為不定值

4'b101z //位寬為4的二進制數從低位數起第一位為高阻值

12'dz //位寬為12的十進制數其值為高阻值(第一種表達方式)

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

8'h4x //位寬為8的十六進制數其低四位值為不定值

(3)負數。

一個數字可以被定義為負數,只需在位寬表達式前加一個減號,并且減號必須寫在數字定義表達式的最前面。注意減號不可以放在位寬和進制之間,也不可以放在進制和具體的數之間,如下例所示:

-8'd5 //這個表達式代表5的補數(用8位二進制數表示)

8'd-5 //非法格式

(4)下劃線(underscore_)。

下劃線可以用來分隔數字的表達以提高程序可讀性。但不可以用在位寬和進制處,只能用在具體的數字之間,例如:

16'b1010_1011_1111_1010 //合法格式

8'b_0011_1010 //非法格式

當常量不聲明位數時,默認值是32位,每個字母用8位的ASCII值表示,例如:

10=32'd10=32'b1010 //十進制和二進制

1=32'd1=32'b1 //十進制和二進制

-1=-32'd1=32'hFFFFFFFF //十進制和十六進制

'BX=32'BX=32'BXXXXXXX…X //默認聲明為32位

AB=16'B01000001_01000010 //每個字母用8位表示

2.參數(Parameter)

在Verilog HDL中用parameter來定義常量,即用parameter來定義一個標識符代表一個常量,稱為符號常量,即標識符形式的常量。采用標識符代表一個常量可提高程序的可讀性和可維護性。parameter型數據是一種常數型的數據,其說明格式如下:

Parameter 參數名1=表達式,參數名2=表達式, …, 參數名n=表達式;

parameter是參數型數據的確認符,確認符后跟著一個用逗號分隔開的賦值語句表。在每一個賦值語句的右邊必須是一個常數表達式。也就是說,該表達式只能包含數字或先前已定義過的參數,例如:

parameter msb=7; //定義參數msb為常量7

parameter e=25, f=29; //定義兩個常數參數

parameter r=5.7; //聲明r為一個實型參數

parameter byte_size=8, byte_msb=byte_size-1; //用常數表達式賦值

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

參數型常數經常用于定義延遲時間和變量寬度。在模塊或實例引用時可通過參數傳遞改變在被引用模塊或實例中已定義的參數。下面將通過一個例子進一步說明在層次調用的電路中改變參數常用的一些用法。

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

parameter Width=1, Polarity=1; //參數聲明

……………

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); //模塊引用,并傳遞參數(4,0)

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

endmodule

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

變量

變量是在程序運行過程中,其值可以改變的量。在Verilog HDL中變量類型有很多種,這里只對常用的幾種變量進行介紹。

1.網絡類型變量

網絡類型表示結構實體(例如門)之間的物理連接。網絡類型的變量不能儲存值,而且它必需受到驅動器(例如門或連續賦值語句,assign)的驅動。如果沒有驅動器連接到網絡類型的變量上,則該變量就是高阻的,即其值為z。

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

wire型變量通常是用來表示單個門驅動或連續賦值語句驅動的網絡型數據,tri型變量則用來表示多驅動器驅動的網絡型數據。如果wire型或tri型變量沒有定義邏輯強度(logic strength),在多驅動源的情況下,邏輯值會發生沖突,從而產生不確定值。

表1所示為在同等驅動強度下,兩個驅動源驅動的wire型和tri型變量的真值表。

表1 wire/tri型變量真值表

wire/tri型變量雙驅動源運算結果

驅動源1

驅動源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型變量常用來表示用于以assign關鍵字指定的組合邏輯信號。Verilog程序模塊中輸入/輸出信號類型缺省時自動定義為wire型。wire型變量可以用作任何方程式的輸入,也可以用作“assign”語句或實例元件的輸出。wire型變量的聲明格式如下:

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

也可以如下表示:

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

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

wire a; //定義了一個一位的wire型變量

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

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


上一頁 1 2 3 4 下一頁

評論


相關推薦

技術專區

關閉