華東理工大學(xué)VerilogHDL-EDA3_第1頁
華東理工大學(xué)VerilogHDL-EDA3_第2頁
華東理工大學(xué)VerilogHDL-EDA3_第3頁
華東理工大學(xué)VerilogHDL-EDA3_第4頁
華東理工大學(xué)VerilogHDL-EDA3_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三講第三講 常用常用Verilog 語法之一語法之一 Verilog的基本設(shè)計(jì)單元是“模塊”(block) 。一個(gè)模塊是由兩部分組成的,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。 module block1(a, b, c, d); input a, b; output c, d; assign c = a | b; assign d = a & b; endmoduleabcd華東理工大學(xué)East China University of Science And Technology module 模塊名模塊名(端口名端口名1,端口名,端口名2,端口名,端口名

2、3,.);端口類型說明(端口類型說明(input,output,inout);參數(shù)定義(可選);參數(shù)定義(可選); 數(shù)據(jù)類型定義(數(shù)據(jù)類型定義(wire,reg等);等); 實(shí)例化低層模塊和基本門級元件;實(shí)例化低層模塊和基本門級元件; 連續(xù)賦值語句(連續(xù)賦值語句(assign);); 過程塊結(jié)構(gòu)(過程塊結(jié)構(gòu)(initial和和always) 行為描述語句;行為描述語句; Endmodule Verilog 模塊的結(jié)構(gòu)由在module和endmodule 關(guān)鍵詞之間的四個(gè)主要部分組成: module block1(a, b, c, d ); input a, b, c ; output d ;

3、wire x; assign d = a | x ; assign x = ( b & c ); endmodule 3.1.1 模塊的端口定義 模塊的端口聲明了模塊的輸入輸出口。其格式如下: module 模塊名(口1,口2,口3,口4, );3.1.2 模塊內(nèi)容 模塊的內(nèi)容包括I/O說明、內(nèi)部信號聲明、功能定義。 輸入口:輸入口: input input信號位寬信號位寬1 1:0 0 端口名端口名1 1; input input信號位寬信號位寬1 1:0 0 端口名端口名2 2; input input信號位寬信號位寬1 1:0 0 端口名端口名i i; /(/(共有共有i i個(gè)輸

4、入口個(gè)輸入口) )輸出口 output信號位寬1:0 端口名1; output信號位寬1:0 端口名2; output信號位寬1:0 端口名j; /(共有j個(gè)輸出口)輸入/輸出口: inout信號位寬1:0 端口名1; inout信號位寬1:0 端口名2; inout信號位寬1:0 端口名k; /(共有k個(gè)雙向總線端口) I/O說明也可以寫在端口聲明語句里。其格式如下: module module_name(input port1,input port2, output port1,output port2 ); 在模塊內(nèi)用到的和與端口有關(guān)的wire 和 reg 變量的聲明。 如: reg w

5、idth-1 : 0 R變量1,R變量2 ; wire width-1 : 0 W變量1,W變量2 ; 模塊中最重要的部分是邏輯功能定義部分。有三種方法可在模塊中產(chǎn)生邏輯。 assign a = b & c ; and2 and_inst ( q, a, b); always (posedge clk or posedge clr) begin if (clr) q= 0; else if (en) q= d; end如在模塊中邏輯功能由下面三個(gè)語句塊組成 : assign cs = ( a0 & a1 & a2 ) ; / -1 and2 and_inst ( qou

6、t, a, b); / -2 always (posedge clk or posedge clr) /-3 begin if (clr) q= 0; else if (en) q= d; end三條語句是并行的,它們產(chǎn)生獨(dú)立的邏輯電路;而在 always 塊中: begin 與 end 之間是順序執(zhí)行的。 在Verilog HDL中,整型常量即整常數(shù)有以下四種進(jìn)制表示形式:1) 二進(jìn)制整數(shù)(b或B)2) 十進(jìn)制整數(shù)(d或D)3) 十六進(jìn)制整數(shù)(h或H)4) 八進(jìn)制整數(shù)(o或O) 數(shù)字表達(dá)方式有以下三種:1) 這是一種全面的描述方式。2) 在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機(jī)

7、器系統(tǒng)決定,但至少32位)。3) 在這種描述方式中,采用缺省進(jìn)制十進(jìn)制。3.1.2 數(shù)值1. Verilog HDL中的數(shù)值可取下面的四類值:Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù) 下劃線符號下劃線符號“_”_”除了不能放于數(shù)值的首位以外,除了不能放于數(shù)值的首位以外,可以隨意用在整型數(shù)與實(shí)型數(shù)中,他們對數(shù)值的大小沒可以隨意用在整型數(shù)與實(shí)型數(shù)中,他們對數(shù)值的大小沒有任何改變,只是為了提高可讀性。有任何改變,只是為了提高可讀性。 1 1)整型數(shù)及其表示)整型數(shù)及其表示 Verilog HDLVerilog HDL的整數(shù)可以使二進(jìn)制的整數(shù)可以使二進(jìn)制(b(b或或B)B)、十進(jìn)、十進(jìn)制

8、制(d(d或或D)D)、十六進(jìn)制、十六進(jìn)制(h(h或或H)H)與八進(jìn)制與八進(jìn)制(o(o或或O)O),有下面三,有下面三種書寫形式種書寫形式(1 1)簡單的十進(jìn)制格式;)簡單的十進(jìn)制格式;(2 2)缺省位寬的基數(shù)格式;)缺省位寬的基數(shù)格式;(3 3)指定位寬的基數(shù)格式。)指定位寬的基數(shù)格式。Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)()簡單的十進(jìn)制格式:()簡單的十進(jìn)制格式:用的數(shù)字串組成的十進(jìn)制數(shù),可以用符號用的數(shù)字串組成的十進(jìn)制數(shù),可以用符號“”或或“”來表示數(shù)的來表示數(shù)的正負(fù)正負(fù)()缺省位寬的基數(shù)格式;()缺省位寬的基數(shù)格式; 表示形式為:表示形式為:符號符號“”為基數(shù)格式表示

9、的固有字符,該字符不能省略,否則為非法表示形為基數(shù)格式表示的固有字符,該字符不能省略,否則為非法表示形式;參數(shù)式;參數(shù)用于說明數(shù)值采用的進(jìn)制格式;參數(shù)用于說明數(shù)值采用的進(jìn)制格式;參數(shù)為為相應(yīng)進(jìn)制格式下的一串?dāng)?shù)字這種格式未指定位寬,其缺省值至少為位相應(yīng)進(jìn)制格式下的一串?dāng)?shù)字這種格式未指定位寬,其缺省值至少為位()指定位寬的基數(shù)格式:()指定位寬的基數(shù)格式: 表示形式為:表示形式為:sizebase_formatnumber參數(shù)參數(shù)size用來指定所表示數(shù)字的位寬當(dāng)位寬小于數(shù)值的實(shí)際大小時(shí),用來指定所表示數(shù)字的位寬當(dāng)位寬小于數(shù)值的實(shí)際大小時(shí),相應(yīng)的高位部分被忽略;當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),且數(shù)值的最

10、高位是或相應(yīng)的高位部分被忽略;當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),且數(shù)值的最高位是或時(shí),相應(yīng)的高位部分補(bǔ);而當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),但數(shù)值的最高位是時(shí),相應(yīng)的高位部分補(bǔ);而當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),但數(shù)值的最高位是x或或z時(shí),相應(yīng)的高位部分補(bǔ)或時(shí),相應(yīng)的高位部分補(bǔ)或Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)基數(shù)符號及其合法的表示值Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)例;三種格式的整數(shù)表示法15(十進(jìn)制15)簡單的十進(jìn)制h15(十進(jìn)制21,十六進(jìn)制15)缺省位寬的十六進(jìn)制5b10011(十進(jìn)制19,二進(jìn)制10011)位的二進(jìn)制12h01F(十進(jìn)制31,十六進(jìn)制01F)位的十

11、六進(jìn)制Syntax: Integer 存為 表示 1 00000000000000000000000000000001 unsized 32bits 8hAA 10101010 sized hex6b10_0011 100011 sized binary hF00000000000000000000000000001111 unsized hex 32 bits 8Hfz 1111zzzzsized hex 1bx Xsized binaryVerilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)Verilog HDL中的實(shí)數(shù)可以用十進(jìn)制與科學(xué)計(jì)數(shù)法兩種格式來表示,如果采用十進(jìn)制格式,小數(shù)點(diǎn)兩邊

12、必須都有數(shù)字,否則為非法的表示形式實(shí)數(shù)表示法的實(shí)例1.8 /十進(jìn)制計(jì)數(shù)法3.8e10 /科學(xué)計(jì)數(shù)法2.1E-9 /科學(xué)計(jì)數(shù)法可用e或E表示,其結(jié)果相同3_2387.3398_3047 /使用下劃線提高可讀性3. /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù).2e6 /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù).12 /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù)實(shí)型數(shù)及其表示Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)l在數(shù)字電路中,x代表不定值,z代表高阻值。一個(gè)x可以用來定義十六進(jìn)制數(shù)的4位二進(jìn)制數(shù)的狀態(tài),八進(jìn)制數(shù)的3位,二進(jìn)制數(shù)的1位。z的表示方式同x類似。z還有一種表達(dá)方式是可以寫作“?”。一個(gè)數(shù)字可以被定義為負(fù)

13、數(shù),只需在位寬表達(dá)式前加一個(gè)減號,減號必須寫在數(shù)字定義表達(dá)式的最前面。注意減號不可以放在位寬和進(jìn)制之間也不可以放在進(jìn)制和具體的數(shù)之間。 -8d5 /這個(gè)表達(dá)式代表5的補(bǔ)數(shù)(用八位二進(jìn)制數(shù)表示) 8d-5 /非法格式。下劃線可以用來分隔開數(shù)的表達(dá)以提高程序可讀性。但不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間。 16b1010_1011_1111_1010 /合法格式 8b_0011_1010 /非法格式 當(dāng)常量不說明位數(shù)時(shí),默認(rèn)值是32位,每個(gè)字母用8位的ASCII值表示。 用參數(shù)聲明一個(gè)可變常量,常用于定義延時(shí)及寬度變量。 參數(shù)定義的語法:parameter ; 可一次定義多個(gè)參數(shù),用逗號

14、隔開。 在使用文字(literal)的地方都可以使用參數(shù)。 參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。 參數(shù)定義可使用以前定義的整數(shù)和實(shí)數(shù)參數(shù)。module mod1( out, in1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16bx, file = / usr1/ jdough/ design/ mem_ file. dat; . . . wire p1: 0 w1; / A wire declaration using parameter .

15、 . .endmodule注意注意:參數(shù):參數(shù)file不是不是string,而是一個(gè)整數(shù),而是一個(gè)整數(shù),其值是所有字母的擴(kuò)展其值是所有字母的擴(kuò)展ASCII值。若值。若file=“AB”,則則file值為值為8h4142。用。用法:法:$fopen(file);$display(“%s”, file);3.2.2 變量 變量即在程序運(yùn)行過程中其值可以改變的量。常變量即在程序運(yùn)行過程中其值可以改變的量。常用的網(wǎng)絡(luò)數(shù)據(jù)類型包括用的網(wǎng)絡(luò)數(shù)據(jù)類型包括wire型和tri型。wirewire型變型變量通常是用來表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值語句驅(qū)量通常是用來表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值語句驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù),動(dòng)的網(wǎng)絡(luò)型

16、數(shù)據(jù),tritri型變量則用來表示多驅(qū)動(dòng)器型變量則用來表示多驅(qū)動(dòng)器驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù)。驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù)。 表表 1.3.1 Wire/tri 變量的真值變量的真值 wire型數(shù)據(jù)常用來表示用于以型數(shù)據(jù)常用來表示用于以assign關(guān)鍵字指定的組合邏輯信號。關(guān)鍵字指定的組合邏輯信號。Verilog程序模塊中輸入輸出信號類型缺程序模塊中輸入輸出信號類型缺省時(shí)自動(dòng)定義為省時(shí)自動(dòng)定義為wire型。其格式型。其格式如下:如下: wire n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名數(shù)據(jù)名2,數(shù)據(jù)名數(shù)據(jù)名i; /共有共有i條總線,每條條總線,每條總線內(nèi)有總線內(nèi)有n條線路,或條線路,或 wire n:1 數(shù)據(jù)名數(shù)據(jù)名1,

17、數(shù)據(jù)名數(shù)據(jù)名2,數(shù)據(jù)名數(shù)據(jù)名i; 寄存器是數(shù)據(jù)儲(chǔ)存單元的抽象。寄存器數(shù)據(jù)類型的關(guān)鍵字是reg。 reg類型數(shù)據(jù)的默認(rèn)初始值為不定值x。 reg型數(shù)據(jù)常用來表示用于“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。在“always”塊內(nèi)被賦值的每一個(gè)信號都必須定義成reg型。 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;module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule m

18、odule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule模塊DUT的邊界輸入口輸出口輸出/入口netnetnet/registernetnet/registernetinout舉例說明數(shù)據(jù)類型的選擇舉例說明數(shù)據(jù)類型的選擇l 輸入口(input)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。l 輸出口 (output)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。l 輸入/輸出口(inout)只可以由網(wǎng)絡(luò)連接驅(qū)動(dòng),它本身也只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。l 如果信號變量是在過程塊 (initial

19、塊 或 always塊)中被賦值的,必須把它聲明為寄存器類型變量 如何選擇正確的數(shù)據(jù)類型?如何選擇正確的數(shù)據(jù)類型?如何選擇正確的數(shù)據(jù)類型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule輸入端口可以由輸入端口可以由net/register驅(qū)動(dòng),但驅(qū)動(dòng),但輸入端口只能是輸入端口只能是net輸出端口可以是輸

20、出端口可以是net/register類型,輸類型,輸出端口只能驅(qū)動(dòng)出端口只能驅(qū)動(dòng)net在過程塊中只能給在過程塊中只能給register類型賦值類型賦值若若Y,A,B說明為說明為reg則會(huì)產(chǎn)生錯(cuò)誤。則會(huì)產(chǎn)生錯(cuò)誤。in1in2OABY雙向端口輸入雙向端口輸入/輸出輸出只能是只能是net類型類型選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤舉例修改前:修改前:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2; reg c, d; reg o2 and u1(o2, c, d); always (a or b) if (a) o1 = b

21、; else o1 = 0;endmodule修改后:修改后:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2;/ reg c, d;/ reg o2 reg o1; and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmoduleexample.v選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤舉例選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤舉例Compiling source file example.vError! Illegal left-hand-side assig

22、nment Verilog-ILHSA example.v, 11: o1 = b;Error! Illegal left-hand-side assignment Verilog-ILHSA example.v, 12: o1 = 0;2 errors第一次編譯信息第一次編譯信息verilog c example.v第二次編譯信息第二次編譯信息Compiling source file example.vError! Incompatible declaration, (c) defined as input at line 2 Verilog-IDDIL example.v, 5: Err

23、or! Incompatible declaration, (d) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Gate (u1) has illegal output specification Verilog-GHIOS example.v, 8: 3 errors Verilog HDL通過對reg型變量建立數(shù)組來對存儲(chǔ)器建模,可以描述RAM型存儲(chǔ)器,ROM存儲(chǔ)器和reg文件。數(shù)組中的每一個(gè)單元通過一個(gè)數(shù)組索引進(jìn)行尋址。在Verilog語言中沒有多維數(shù)組存在。 memory型數(shù)據(jù)是通過擴(kuò)展reg型數(shù)據(jù)的地址范

24、圍來生成的。其格式如下: reg n-1:0 存儲(chǔ)器名m-1:0;或 reg n-1:0 存儲(chǔ)器名m:1; Verilog HDL語言的運(yùn)算符范圍很廣,其運(yùn)算符按其功能可分為以下幾類: 在Verilog HDL語言中運(yùn)算符所帶的操作數(shù)是不同的,按其所帶操作數(shù)的個(gè)數(shù)運(yùn)算符可分為三種:1) 單目運(yùn)算符(unary operator):可以帶一個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的右邊。2) 二目運(yùn)算符(binary operator):可以帶二個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的兩邊。3) 三目運(yùn)算符(ternary operator):可以帶三個(gè)操作,這三個(gè)操作數(shù)用三目運(yùn)算符分隔開。 見下例: clock = c

25、lock; / 是一個(gè)單目取反運(yùn)算符, clock是操作數(shù)。 c = a | b; / 是一個(gè)二目按位或運(yùn)算符, a 和 b是操作數(shù)。 r = s ? t : u; / ?: 是一個(gè)三目條件運(yùn)算符, s,t,u是操作數(shù)。3.3.1.基本的算術(shù)運(yùn)算符 + 加加 - 減減 * 乘乘 / 除除 % 模模 將負(fù)數(shù)賦值給將負(fù)數(shù)賦值給reg或其它無符號變或其它無符號變量使用量使用2的補(bǔ)碼算術(shù)。的補(bǔ)碼算術(shù)。 如果操作數(shù)的某一位是如果操作數(shù)的某一位是x或或z,則,則結(jié)果為結(jié)果為x 在整數(shù)除法中,余數(shù)舍棄在整數(shù)除法中,余數(shù)舍棄 模運(yùn)算中使用第一個(gè)操作數(shù)的符模運(yùn)算中使用第一個(gè)操作數(shù)的符號號module arith

26、ops (); parameter five = 5; integer ans, int; reg 3: 0 rega, regb; reg 3: 0 num; initial begin rega = 3; regb = 4b1010; int = -3; /int = 11111111_1101 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / ans = -1 #40 num = rega + regb; / num = 1

27、101 #50 num = rega + 1; / num = 0100 #60 num = int; / num = 1101 #70 num = regb % rega; / num = 1 #80 $finish;joinendmodule注意integer和reg類型在算術(shù)運(yùn)算時(shí)的差別。integer是有符號數(shù),而reg是無符號數(shù)。3.3.2.位運(yùn)算符 not & and | or xor xnor xnor 按位操作符對矢量中相對應(yīng)位運(yùn)算。按位操作符對矢量中相對應(yīng)位運(yùn)算。regb = 4b1 0 1 0regb = 4b1 0 1 0regc = 4b1 x 1 0regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ;num = regb & regc = 1 0 1 0 ; 位值為位值為x x時(shí)不一定產(chǎn)生時(shí)不一定產(chǎn)生x x結(jié)果。如結(jié)果。如#50#50時(shí)的時(shí)的oror計(jì)算。計(jì)算。module bitwise (); reg 3: 0 rega,

溫馨提示

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

最新文檔

評論

0/150

提交評論