版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 基本結(jié)構(gòu):模塊(基本結(jié)構(gòu):模塊(modulemodule)p復(fù)雜電子電路的構(gòu)建,主要是通過模塊的相互連復(fù)雜電子電路的構(gòu)建,主要是通過模塊的相互連接調(diào)用來實(shí)現(xiàn)的。接調(diào)用來實(shí)現(xiàn)的。pVerilog中的模塊類似中的模塊類似C語言中的函數(shù),它能夠提語言中的函數(shù),它能夠提供輸入、輸出端口,通過例化調(diào)用其他模塊。供輸入、輸出端口,通過例化調(diào)用其他模塊。p該模塊可以被其它模塊例化調(diào)用,模塊中可以包該模塊可以被其它模塊例化調(diào)用,模塊中可以包括組合邏輯部分和時(shí)序邏輯部分。括組合邏輯部分和時(shí)序邏輯部分。Module 模塊名(端口列表)模塊名(端口列表)endmodule端口定義端口定義input 輸入端口輸入端
2、口output 輸出端口輸出端口inout 輸入輸入/輸出端口輸出端口數(shù)據(jù)類型說明數(shù)據(jù)類型說明wirereg parameter邏輯功能定義邏輯功能定義assignalwaysfunctiontask模塊結(jié)構(gòu)的組成模塊結(jié)構(gòu)的組成pmodule 。endmodulep模塊模塊名名 是是模塊唯一的標(biāo)識符模塊唯一的標(biāo)識符。p端口端口列表列表 是由模塊各個(gè)輸入、輸出和雙向端口組成的是由模塊各個(gè)輸入、輸出和雙向端口組成的一個(gè)端口列一個(gè)端口列表。表。p數(shù)據(jù)類型說明數(shù)據(jù)類型說明 用來說明模塊內(nèi)用到的數(shù)據(jù)對象是網(wǎng)絡(luò)類型還是變量類型。用來說明模塊內(nèi)用到的數(shù)據(jù)對象是網(wǎng)絡(luò)類型還是變量類型。p邏輯功能定義邏輯功能定義
3、 通過使用邏輯功能語句實(shí)現(xiàn)具體的邏輯功能。通過使用邏輯功能語句實(shí)現(xiàn)具體的邏輯功能。模塊結(jié)構(gòu)的組成模塊結(jié)構(gòu)的組成 注注 !p Verilog HDL區(qū)分大小寫,也就是說大小寫不同的標(biāo)識區(qū)分大小寫,也就是說大小寫不同的標(biāo)識符是不同的。符是不同的。p Verilog HDL程序的書寫與程序的書寫與C語言類似,一行可以寫多語言類似,一行可以寫多條語句,也可以一條語句分成多行書寫。條語句,也可以一條語句分成多行書寫。p 每條語句以分號結(jié)束,每條語句以分號結(jié)束,endmodule語句后不加分號。語句后不加分號。p 空白空白(新行、制表符和空格)沒有特殊意義。新行、制表符和空格)沒有特殊意義。模塊模塊聲明包
4、括模塊名字,模塊的聲明包括模塊名字,模塊的輸入和輸出端口列表輸入和輸出端口列表。模塊的定義格式。模塊的定義格式如下如下: module (port_name1, , port_namen); . . . endmodule其中:其中:p module_name為模塊名,是該模塊的唯一為模塊名,是該模塊的唯一標(biāo)識。標(biāo)識。p port_name為端口名,這些端口名使用為端口名,這些端口名使用“,”分割。分割。兩種引用方式1)在引用時(shí),嚴(yán)格按照端口定義順序來連接。模塊名(portname1,portname2,);2)用“.”,標(biāo)明原模塊是定義時(shí)規(guī)定的端口名。 模塊名(.portname1(inst
5、1),portname2(inst2);端口端口是模塊與外部其它模塊進(jìn)行信號傳遞的通道是模塊與外部其它模塊進(jìn)行信號傳遞的通道(信號線),模塊端口分為輸入、輸出或雙向端口。(信號線),模塊端口分為輸入、輸出或雙向端口。1輸入端口的定義格式輸入端口的定義格式 input , .;其中:其中:pinput為關(guān)鍵字,用于聲明后面的端口為輸入為關(guān)鍵字,用于聲明后面的端口為輸入端口。端口。pinput_port_name為輸入端口名字為輸入端口名字。pother_inputs為用逗號分割的其它輸入端口的名字。為用逗號分割的其它輸入端口的名字。2輸出端口的定義格式輸出端口的定義格式 output ,.;其中
6、:其中:poutput為關(guān)鍵字,用于聲明后面的端口為輸出端為關(guān)鍵字,用于聲明后面的端口為輸出端口。口。poutput_port_name為輸出端口名字。為輸出端口名字。pother_outputs為逗號分割的其它輸出端口的名字。為逗號分割的其它輸出端口的名字。3輸入輸出端口(雙向端口)的定義格式輸入輸出端口(雙向端口)的定義格式 inout ,.;其中:其中:pinout為關(guān)鍵字,用于聲明后面的端口為輸入輸出為關(guān)鍵字,用于聲明后面的端口為輸入輸出類型類型的端口。的端口。pother_inouts為輸入為輸入/輸出端口的名字。輸出端口的名字。pother_inouts為逗號分割的其它輸入為逗號分
7、割的其它輸入/輸出端口的名字。輸出端口的名字。注注p 在在聲明輸入端口、輸出端口或者輸入輸出端口時(shí),還要聲聲明輸入端口、輸出端口或者輸入輸出端口時(shí),還要聲明其數(shù)據(jù)類型明其數(shù)據(jù)類型。u對于對于端口來說,可用的數(shù)據(jù)類型是端口來說,可用的數(shù)據(jù)類型是網(wǎng)絡(luò)型(網(wǎng)絡(luò)型(net)或者或者寄寄存器(存器(reg)型)型。p當(dāng)當(dāng)沒有明確指定端口類型時(shí)沒有明確指定端口類型時(shí),將端口,將端口默認(rèn)為網(wǎng)絡(luò)類型默認(rèn)為網(wǎng)絡(luò)類型。 p可以將輸出或輸入端口重新聲明為寄存器類型。無論是在可以將輸出或輸入端口重新聲明為寄存器類型。無論是在網(wǎng)絡(luò)類型說明還是在寄存器類型說明中,網(wǎng)絡(luò)類型或寄存網(wǎng)絡(luò)類型說明還是在寄存器類型說明中,網(wǎng)絡(luò)類型
8、或寄存器類型必須與端口說明中指定的寬度相同。器類型必須與端口說明中指定的寬度相同。p不能將輸入和雙向端口指定為寄存器類型。不能將輸入和雙向端口指定為寄存器類型。例:端口聲明實(shí)例例:端口聲明實(shí)例module test(a, b, c, d, e, f, g, h);/ I/O說明的格式說明的格式input 7:0 a; / 沒有明確的說明沒有明確的說明網(wǎng)絡(luò)是無符號的網(wǎng)絡(luò)是無符號的input 7:0 b;input signed 7:0 c;input signed 7:0 d; / 明確明確的網(wǎng)絡(luò)說明的網(wǎng)絡(luò)說明-網(wǎng)絡(luò)是網(wǎng)絡(luò)是有符號的有符號的output 7:0 e; / 沒有明確的說明沒有明確的
9、說明網(wǎng)絡(luò)是無符號的網(wǎng)絡(luò)是無符號的output 7:0 f;output signed 7:0 g;output signed 7:0 h; / 明確明確的網(wǎng)絡(luò)說明的網(wǎng)絡(luò)說明-網(wǎng)絡(luò)是有符號網(wǎng)絡(luò)是有符號的的 /內(nèi)部信號說明內(nèi)部信號說明wire signed 7:0 b; / 從網(wǎng)絡(luò)聲明中,端口從網(wǎng)絡(luò)聲明中,端口b繼承了有符號的繼承了有符號的屬性屬性wire 7:0 c; / 網(wǎng)絡(luò)網(wǎng)絡(luò)c繼承了來自端口的有符號繼承了來自端口的有符號的屬性的屬性reg signed 7:0 f; / 從寄存器聲明中,從寄存器聲明中,端口端口f繼承繼承了了有符號有符號的屬性的屬性reg 7:0 g; / 寄存器寄存器類型
10、類型g繼承來自繼承來自端口的端口的 有有符號的屬性符號的屬性 endmodule例:例: ANSI C ANSI C風(fēng)格的端口說明實(shí)例風(fēng)格的端口說明實(shí)例module test (input 7:0 a,input signed 7:0 b, c, d, / 多個(gè)多個(gè)共享屬性共享屬性的端口,的端口,可以可以一起聲明一起聲明output 7:0 e, /在在每個(gè)端口聲明中,單獨(dú)每個(gè)端口聲明中,單獨(dú) 聲明聲明每個(gè)端口的每個(gè)端口的屬性屬性output reg signed 7:0 f, g,output signed 7:0 h) ; endmodule 邏輯功能定義用于實(shí)現(xiàn)模塊中的具體的功能邏輯功能
11、定義用于實(shí)現(xiàn)模塊中的具體的功能1 1 分配語句分配語句 分配是分配是最簡單的邏輯功能描述,用最簡單的邏輯功能描述,用assignassign分配語句分配語句定義定義:assign F=(A&B)|(C&D);p模塊模塊調(diào)用調(diào)用 所謂模塊的調(diào)用,是指從模塊模板生成實(shí)際的電所謂模塊的調(diào)用,是指從模塊模板生成實(shí)際的電路結(jié)構(gòu)對象的路結(jié)構(gòu)對象的操作。操作。 這樣這樣的電路結(jié)構(gòu)對象被稱為模塊實(shí)例,模塊調(diào)用也的電路結(jié)構(gòu)對象被稱為模塊實(shí)例,模塊調(diào)用也被稱為實(shí)例化。每一個(gè)實(shí)例都有它自己的名字、變量、被稱為實(shí)例化。每一個(gè)實(shí)例都有它自己的名字、變量、參數(shù)和參數(shù)和I/OI/O接口接口。 一一個(gè)個(gè)Ver
12、ilogVerilog模塊可以被任意多個(gè)其他模塊調(diào)用。模塊可以被任意多個(gè)其他模塊調(diào)用。在在Verilog HDLVerilog HDL語言中,模塊不能被嵌套定義,即在一語言中,模塊不能被嵌套定義,即在一個(gè)模塊的定義內(nèi)不能包含另一模塊的定義。但是卻可以個(gè)模塊的定義內(nèi)不能包含另一模塊的定義。但是卻可以包含對其他模塊復(fù)制,即調(diào)用其他模塊的例包含對其他模塊復(fù)制,即調(diào)用其他模塊的例化化 模塊模塊的定義和模塊的例化是兩個(gè)不同的概念,在的定義和模塊的例化是兩個(gè)不同的概念,在一個(gè)設(shè)計(jì)中一個(gè)設(shè)計(jì)中,只有,只有通過模塊調(diào)用(實(shí)例化)才能使用一通過模塊調(diào)用(實(shí)例化)才能使用一個(gè)模塊。個(gè)模塊。例:頂層模塊調(diào)用底層模塊
13、的例子例:頂層模塊調(diào)用底層模塊的例子 module top; reg clk; reg 0:4 in1; reg 0:9 in2; wire 0:4 o1; wire 0:9 o2; vdff m1 (o1, in1, clk); vdff m2 (o2, in2, clk); endmodulep在在always過程賦值過程賦值 alwaysalways塊經(jīng)常用來描述時(shí)序邏輯電路塊經(jīng)常用來描述時(shí)序邏輯電路。always (posedge clk)begin if(reset) out=0; else out=out+1;endp函數(shù)函數(shù)和任務(wù)調(diào)用和任務(wù)調(diào)用 模塊模塊調(diào)用和函數(shù)調(diào)用非常相似,但
14、是在本質(zhì)上又有很大差別。調(diào)用和函數(shù)調(diào)用非常相似,但是在本質(zhì)上又有很大差別。u 一一個(gè)模塊代表擁有特定功能的一個(gè)電路塊,每當(dāng)一個(gè)模塊在個(gè)模塊代表擁有特定功能的一個(gè)電路塊,每當(dāng)一個(gè)模塊在其他模塊內(nèi)被調(diào)用一次,被調(diào)用模塊所表示的電路結(jié)構(gòu)就會在其他模塊內(nèi)被調(diào)用一次,被調(diào)用模塊所表示的電路結(jié)構(gòu)就會在調(diào)用模塊代表的電路內(nèi)部被復(fù)制一次(即生成被調(diào)用模塊的一調(diào)用模塊代表的電路內(nèi)部被復(fù)制一次(即生成被調(diào)用模塊的一個(gè)實(shí)例)個(gè)實(shí)例)。u模塊調(diào)用不能像函數(shù)調(diào)用一樣具有模塊調(diào)用不能像函數(shù)調(diào)用一樣具有“退出調(diào)用退出調(diào)用”的操作,因?yàn)榈牟僮鳎驗(yàn)橛布娐方Y(jié)構(gòu)不會隨著時(shí)間而發(fā)生變化,被復(fù)制的電路塊將一硬件電路結(jié)構(gòu)不會隨著時(shí)間
15、而發(fā)生變化,被復(fù)制的電路塊將一直存在。直存在。 u模塊模塊內(nèi)具體邏輯行為的描述方式又稱為建模方式。內(nèi)具體邏輯行為的描述方式又稱為建模方式。根據(jù)設(shè)計(jì)根據(jù)設(shè)計(jì)的不同要求,的不同要求,每個(gè)模塊內(nèi)部具體的邏輯行每個(gè)模塊內(nèi)部具體的邏輯行為描述為描述方式可以分為四個(gè)不同的抽象方式可以分為四個(gè)不同的抽象級別級別。n對于對于外部來說,看不到邏輯行為的具體實(shí)現(xiàn)方式。因此,外部來說,看不到邏輯行為的具體實(shí)現(xiàn)方式。因此,模塊的內(nèi)部具體邏輯行為描述相對于外部其它模塊來模塊的內(nèi)部具體邏輯行為描述相對于外部其它模塊來說是說是不可見的。不可見的。n改變改變一個(gè)模塊內(nèi)部邏輯行為的描述方式,并不會一個(gè)模塊內(nèi)部邏輯行為的描述方式
16、,并不會影響該模影響該模塊塊與其它模塊的連接關(guān)系。與其它模塊的連接關(guān)系。Verilog HDLVerilog HDL提供了下面四種方式描述具體的邏輯行為:提供了下面四種方式描述具體的邏輯行為:p 行為級行為級描述方式描述方式p 數(shù)據(jù)流數(shù)據(jù)流描述方式描述方式p 結(jié)構(gòu)結(jié)構(gòu)級描述方式級描述方式p 開關(guān)開關(guān)級描述方式級描述方式 Verilog Verilog HDLHDL的行為級描述是最能的行為級描述是最能體現(xiàn)電子設(shè)計(jì)自體現(xiàn)電子設(shè)計(jì)自動(dòng)化風(fēng)格動(dòng)化風(fēng)格的硬件描述的硬件描述方式方式p它它既可以描述簡單的邏輯門,也可以描述復(fù)雜的數(shù)字既可以描述簡單的邏輯門,也可以描述復(fù)雜的數(shù)字系統(tǒng)乃至微處理器。系統(tǒng)乃至微處理
17、器。p既既可以描述組合邏輯電路,也可以描述時(shí)序邏輯電路可以描述組合邏輯電路,也可以描述時(shí)序邏輯電路。因此,它因此,它是是Verilog HDLVerilog HDL最高抽象級別的描述方式最高抽象級別的描述方式。p可以可以按照要求的設(shè)計(jì)算法來實(shí)現(xiàn)一個(gè)模塊,而不用按照要求的設(shè)計(jì)算法來實(shí)現(xiàn)一個(gè)模塊,而不用關(guān)關(guān)心該模塊具體心該模塊具體硬件實(shí)現(xiàn)的細(xì)節(jié)硬件實(shí)現(xiàn)的細(xì)節(jié)。p這種這種抽象級別描述抽象級別描述方式非常方式非常類似類似c c編程。編程。行為級描述只能用于對設(shè)計(jì)進(jìn)行仿真,行為級描述只能用于對設(shè)計(jì)進(jìn)行仿真, 而不能而不能用于對用于對設(shè)計(jì)進(jìn)行綜合設(shè)計(jì)進(jìn)行綜合。p邏輯行為的描述是通過行為描述語句來實(shí)現(xiàn)的邏輯
18、行為的描述是通過行為描述語句來實(shí)現(xiàn)的?????墒故褂孟率鲞^程語句結(jié)構(gòu)用下述過程語句結(jié)構(gòu)描述行為功能。描述行為功能。initialinitial語句語句 該語句該語句只執(zhí)行一次只執(zhí)行一次。alwaysalways語句語句 該該語句語句循環(huán)循環(huán)執(zhí)行若干次。執(zhí)行若干次。在這兩種語句中,只有寄存器類型在這兩種語句中,只有寄存器類型的數(shù)據(jù)能夠被賦值。在被賦新值前,的數(shù)據(jù)能夠被賦值。在被賦新值前,寄存器型數(shù)據(jù)保持原有值不變寄存器型數(shù)據(jù)保持原有值不變。所。所有有的的initialinitial語句和語句和alwaysalways語句在零語句在零時(shí)刻并行執(zhí)行。時(shí)刻并行執(zhí)行。Verilog HDL行為級描述的例子
19、行為級描述的例子 always begin #100 b = b; end endmodule module behave; reg 1:0 a, b; initial begin a = b1; b = b0; end always begin #50 a = a; end 數(shù)據(jù)流數(shù)據(jù)流描述方式,也描述方式,也稱寄存器稱寄存器傳輸傳輸級(級(Register Transfer,RTL)描述方式描述方式。 所謂所謂的數(shù)據(jù)流描述可以這樣理解,即:在一個(gè)復(fù)雜的數(shù)字系的數(shù)據(jù)流描述可以這樣理解,即:在一個(gè)復(fù)雜的數(shù)字系統(tǒng)中,應(yīng)該包含有數(shù)據(jù)流和控制流統(tǒng)中,應(yīng)該包含有數(shù)據(jù)流和控制流。 控制流控制流用于控制數(shù)
20、據(jù)的用于控制數(shù)據(jù)的“流向流向”,即:數(shù)據(jù)將要到達(dá)的地方。,即:數(shù)據(jù)將要到達(dá)的地方。 從從寄存器傳輸級的角度,可以這樣理解,即:在寄存器傳輸級的角度,可以這樣理解,即:在寄存器之間插入組合邏輯電路。寄存器之間插入組合邏輯電路。 在一個(gè)復(fù)雜的數(shù)字系統(tǒng)中,任何數(shù)據(jù)從輸入到在一個(gè)復(fù)雜的數(shù)字系統(tǒng)中,任何數(shù)據(jù)從輸入到輸出,都需要經(jīng)過寄存器輸出,都需要經(jīng)過寄存器,寄存器用于,寄存器用于重定重定序序和記憶。和記憶。 這樣,就能保證這樣,就能保證數(shù)據(jù)從輸入到輸入滿足時(shí)序數(shù)據(jù)從輸入到輸入滿足時(shí)序收斂條收斂條件,不會件,不會出現(xiàn)競爭冒險(xiǎn)和亞出現(xiàn)競爭冒險(xiǎn)和亞穩(wěn)定狀態(tài)。穩(wěn)定狀態(tài)。2:1多路復(fù)用器多路復(fù)用器Verilog
21、 HDL數(shù)據(jù)流描述方式數(shù)據(jù)流描述方式例子例子 always (SEL or A or B) if (SEL) D=A; else D=B;p行為級行為級描述,一般只用于對設(shè)計(jì)進(jìn)行仿真,也就是生成描述,一般只用于對設(shè)計(jì)進(jìn)行仿真,也就是生成對設(shè)計(jì)的測試向量,通過特定的仿真軟件來測試設(shè)計(jì)有無對設(shè)計(jì)的測試向量,通過特定的仿真軟件來測試設(shè)計(jì)有無設(shè)計(jì)設(shè)計(jì)缺陷。但是,不能缺陷。但是,不能轉(zhuǎn)換成轉(zhuǎn)換成FPGAFPGA的具體物理實(shí)現(xiàn)的具體物理實(shí)現(xiàn)。p而而數(shù)據(jù)流描述,用于對設(shè)計(jì)進(jìn)行綜合,最后下載到數(shù)據(jù)流描述,用于對設(shè)計(jì)進(jìn)行綜合,最后下載到FPGAFPGA器件進(jìn)行器件進(jìn)行具體的物理實(shí)現(xiàn)。具體的物理實(shí)現(xiàn)。 結(jié)構(gòu)結(jié)構(gòu)描
22、述就是在設(shè)計(jì)中,通過調(diào)用庫中的元件或者是已描述就是在設(shè)計(jì)中,通過調(diào)用庫中的元件或者是已經(jīng)設(shè)計(jì)好的模塊來完成設(shè)計(jì)實(shí)體功能的描述經(jīng)設(shè)計(jì)好的模塊來完成設(shè)計(jì)實(shí)體功能的描述。 通常通常情況下,在使用層次化設(shè)計(jì)時(shí),一個(gè)高層次模塊會調(diào)用一情況下,在使用層次化設(shè)計(jì)時(shí),一個(gè)高層次模塊會調(diào)用一個(gè)或者多個(gè)低層次模塊。這種模塊的調(diào)用是通過模塊例化語句實(shí)現(xiàn)個(gè)或者多個(gè)低層次模塊。這種模塊的調(diào)用是通過模塊例化語句實(shí)現(xiàn)的。的。 模塊例化語句的基本格式如下:模塊例化語句的基本格式如下: (););其中:其中:pmodule_name是是指被指被調(diào)用模塊指定的模調(diào)用模塊指定的模 塊塊名名。p list_of_variable是可
23、選項(xiàng),它是由一些參數(shù)值是可選項(xiàng),它是由一些參數(shù)值組成的組成的一個(gè)有序列表,將這些參數(shù)值傳遞給被調(diào)用模塊實(shí)例一個(gè)有序列表,將這些參數(shù)值傳遞給被調(diào)用模塊實(shí)例內(nèi)的各個(gè)參數(shù)。內(nèi)的各個(gè)參數(shù)。pmodule_example_name是所是所生成的生成的模塊實(shí)例所命名的模塊實(shí)例所命名的一一個(gè)名字,它個(gè)名字,它是被調(diào)用模塊是被調(diào)用模塊實(shí)例的唯一標(biāo)識實(shí)例的唯一標(biāo)識。p list_of_port是由外部信號信號組成的是由外部信號信號組成的一個(gè)有序一個(gè)有序列表,列表, 這這些些外部信號外部信號端口表示與端口表示與模塊實(shí)例模塊實(shí)例各個(gè)端口的連接。各個(gè)端口的連接。所以,所以,指明了模塊實(shí)例指明了模塊實(shí)例端口端口與外部電
24、路的連接情與外部電路的連接情況況。 注:在注:在Verilog HDL中提供了兩種方法用于端口中提供了兩種方法用于端口信號的信號的連接??梢赃B接??梢园凑斩丝诹斜淼捻樞蜻M(jìn)行端口的映射,也可以按照端口列表的順序進(jìn)行端口的映射,也可以通過端口的名字進(jìn)行映射通過端口的名字進(jìn)行映射。模塊例模塊例化規(guī)則化規(guī)則 p 在某一模塊在某一模塊內(nèi),可以多次內(nèi),可以多次調(diào)用同一調(diào)用同一模塊。但是,每模塊。但是,每次次調(diào)用生成的模塊實(shí)例名不能重復(fù)。調(diào)用生成的模塊實(shí)例名不能重復(fù)。p實(shí)例名和模塊名的區(qū)別是:實(shí)例名和模塊名的區(qū)別是:n模塊名表示不同的模塊,即用來區(qū)分電路單元的不同種類模塊名表示不同的模塊,即用來區(qū)分電路單元
25、的不同種類.n而實(shí)例名則表示不同的模塊實(shí)例,用來區(qū)分電路系統(tǒng)中的而實(shí)例名則表示不同的模塊實(shí)例,用來區(qū)分電路系統(tǒng)中的不同硬件電路單元不同硬件電路單元。Verilog HDL結(jié)構(gòu)化結(jié)構(gòu)化描述例子描述例子 ,采用,采用位置關(guān)聯(lián)端口位置關(guān)聯(lián)端口/ 低層次低層次模塊,一模塊,一個(gè)與非門觸發(fā)電路的模塊個(gè)與非門觸發(fā)電路的模塊描述描述module ffnand (q, qbar, preset, clear);output q, qbar; /聲明兩個(gè)電路輸出聲明兩個(gè)電路輸出網(wǎng)絡(luò)網(wǎng)絡(luò)input preset, clear; /聲明兩個(gè)電路輸入網(wǎng)絡(luò)聲明兩個(gè)電路輸入網(wǎng)絡(luò) /聲明聲明兩個(gè)兩個(gè)nand門,以及它們的互
26、連門,以及它們的互連nand g1 (q, qbar, preset), g2 (qbar, q, clear);endmodule/ 較高層次模塊較高層次模塊/ 用于與非觸發(fā)器的一個(gè)波形描述用于與非觸發(fā)器的一個(gè)波形描述module ffnand_wave;wire out1, out2; /來自電路的輸出來自電路的輸出reg in1, in2; /到輸出的驅(qū)動(dòng)變量到輸出的驅(qū)動(dòng)變量parameter d = 10; /例化電路例化電路ffnand,并將其命名為并將其命名為ff,并且指定端口互聯(lián)并且指定端口互聯(lián) ffnand ff(out1, out2, in1, in2);/定義用于仿真電路的
27、波形定義用于仿真電路的波形initial begin #d in1 = 0; in2 = 1; #d in1 = 1; #d in2 = 0; #d in2 = 1;endendmodule 思考題:請畫出生成的思考題:請畫出生成的ffnand的結(jié)構(gòu)。并分析其測試原理。的結(jié)構(gòu)。并分析其測試原理。Verilog HDL結(jié)構(gòu)化結(jié)構(gòu)化描述,描述,在該例子中采用名字關(guān)聯(lián)端口在該例子中采用名字關(guān)聯(lián)端口/用于測試用于測試ffnand電路的波形描述,沒有輸出端口電路的波形描述,沒有輸出端口module ffnand_wave;reg in1, in2; /驅(qū)動(dòng)電路的兩個(gè)驅(qū)動(dòng)電路的兩個(gè)變量變量paramete
28、r d = 10;/例化例化ffnand模塊兩次模塊兩次/ff1的的qbar沒有連接沒有連接, ff2 的的q沒有連接沒有連接 ffnand ff1(out1, , in1, in2), ff2(.qbar(out2), .clear(in2), .preset(in1), .q();/定義仿真電路的定義仿真電路的波形波形initial begin #d in1 = 0; in2 = 1; #d in1 = 1; #d in2 = 0; #d in2 = 1;endendmodule從從本質(zhì)上來說,開關(guān)級屬于結(jié)構(gòu)化描述方式,但是其本質(zhì)上來說,開關(guān)級屬于結(jié)構(gòu)化描述方式,但是其描述更接近于底層的門
29、級和開關(guān)級電路。描述更接近于底層的門級和開關(guān)級電路。 突出突出說明開關(guān)級描述方式,是為了說明說明開關(guān)級描述方式,是為了說明Verilog HDL對對底層強(qiáng)大底層強(qiáng)大的的描描述述功能。功能。 對于一個(gè)門或者開關(guān)例化來說,對于一個(gè)門或者開關(guān)例化來說,包含下面包含下面的描述:的描述:p關(guān)鍵字關(guān)鍵字命名門或者開關(guān)原語的類型命名門或者開關(guān)原語的類型。p可選的可選的驅(qū)動(dòng)強(qiáng)度。驅(qū)動(dòng)強(qiáng)度。 p可選的可選的傳播延遲傳播延遲。p可選的可選的標(biāo)識符,命名了每個(gè)門或者開關(guān)例化的名字標(biāo)識符,命名了每個(gè)門或者開關(guān)例化的名字。p可選的可選的用于例化陣列的范圍用于例化陣列的范圍。p終端終端連接列表。連接列表。例:例:Veri
30、log HDL開關(guān)級描述例子開關(guān)級描述例子module driver (in, out, en);input 3:0 in;output 3:0 out;input en; bufif0 ar3:0 (out, in, en); / 三態(tài)緩沖器陣列三態(tài)緩沖器陣列endmodulemodule driver_equiv (in, out, en);input 3:0 in;output 3:0 out;input en; bufif0 ar3 (out3, in3, en); / 獨(dú)立聲明每個(gè)獨(dú)立聲明每個(gè)緩沖區(qū)緩沖區(qū) bufif0 ar2 (out2, in2, en); bufif0 ar1
31、(out1, in1, en); bufif0 ar0 (out0, in0, en);endmodulep注釋注釋p間隔符間隔符p標(biāo)標(biāo)識識符符p關(guān)鍵字關(guān)鍵字p系統(tǒng)系統(tǒng)任務(wù)和任務(wù)和函數(shù)函數(shù)p編譯器命令編譯器命令p運(yùn)算符運(yùn)算符p數(shù)字?jǐn)?shù)字p字符串字符串和和屬性屬性 在在Verilog HDL中有兩種形式的注釋。該語法規(guī)中有兩種形式的注釋。該語法規(guī)定和定和C語言一致語言一致。p單行注釋單行注釋起始于雙斜杠起始于雙斜杠“/”,表示該行結(jié)束,以及新的一行開,表示該行結(jié)束,以及新的一行開始。單行注釋符號始。單行注釋符號“/”在塊注釋語句內(nèi)并無特定含義。在塊注釋語句內(nèi)并無特定含義。p多多行行注釋注釋以符號單
32、斜杠星號以符號單斜杠星號“/*”作為開始標(biāo)志,以星號單斜作為開始標(biāo)志,以星號單斜杠杠“/*”作為結(jié)束標(biāo)志。塊注釋不能嵌套。作為結(jié)束標(biāo)志。塊注釋不能嵌套。 間隔符間隔符包括空格字符(包括空格字符(b)、制表符)、制表符(t)、換行符、換行符(n)以及換以及換頁符,這些字符除了起到與其他詞法標(biāo)識符相分隔的作用外,頁符,這些字符除了起到與其他詞法標(biāo)識符相分隔的作用外,可以被忽略??梢员缓雎?。 間隔符間隔符除起到分隔的作用外,在必要的地方插入相應(yīng)的除起到分隔的作用外,在必要的地方插入相應(yīng)的空格或換行符,可以使程序文本易于用戶閱讀與修改。空格或換行符,可以使程序文本易于用戶閱讀與修改。注:在字符串注:在
33、字符串中,將空白中,將空白和和制表符認(rèn)為制表符認(rèn)為是有意義的字符。是有意義的字符。標(biāo)識符標(biāo)識符(identifiers)(identifiers)標(biāo)識符是用戶在描述時(shí)給標(biāo)識符是用戶在描述時(shí)給Verilog對象起的名字對象起的名字標(biāo)識符必須以字母標(biāo)識符必須以字母(a-z, A-Z)或或( _ )開頭,后面可以是開頭,后面可以是字母、數(shù)字、字母、數(shù)字、( $ )或或( _ )。最長可以是最長可以是1023個(gè)字符個(gè)字符標(biāo)識符區(qū)分大小寫,標(biāo)識符區(qū)分大小寫,sel和和SEL是不同的標(biāo)識符是不同的標(biāo)識符模塊、端口和實(shí)例的名字都是標(biāo)識符模塊、端口和實(shí)例的名字都是標(biāo)識符module MUX2_1 (out,
34、a, b, sel);output out;input a, b, sel; not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmoduleVerilogVerilog標(biāo)識符標(biāo)識符標(biāo)識符標(biāo)識符(identifiers)(identifiers)有效標(biāo)識符舉例:有效標(biāo)識符舉例: shift_reg_a busa_index _bus3無效標(biāo)識符舉例:無效標(biāo)識符舉例: 34net / 開頭不是字母或開頭不是字母或“_” a*b_net / 包含了非字母或數(shù)字,包含
35、了非字母或數(shù)字, “$” “_” n238 /包含了非字母或數(shù)字,包含了非字母或數(shù)字, “$” “_”Verilog區(qū)分大小寫,所有區(qū)分大小寫,所有Verilog關(guān)鍵詞使用小寫關(guān)鍵詞使用小寫字母。字母。轉(zhuǎn)義標(biāo)識符轉(zhuǎn)義標(biāo)識符( Escaped identifiers)( Escaped identifiers)轉(zhuǎn)義標(biāo)識符由反斜杠“”開始,空白符結(jié)束可以包含任何可打印字符反斜杠及空白符不是標(biāo)識符的一部分module 2:1MUX (out, a, b, sel);output out;input a, b, sel; not not1(sel ,sel); and and1( a1, a, sel
36、 ); and and2( b1, b, sel); or or1( out, a1, b1);endmodule使用轉(zhuǎn)義符可能會產(chǎn)生一些問題,并且不是所有工具都支持。有時(shí)用轉(zhuǎn)義符完成一些轉(zhuǎn)換,如產(chǎn)生邏輯圖的Verilog網(wǎng)表。綜合工具輸出綜合網(wǎng)表時(shí)也使用轉(zhuǎn)義符。不建議使用轉(zhuǎn)義符。Escaped IdentifiersVerilog HDL語言內(nèi)部所使用的詞稱為關(guān)鍵字或語言內(nèi)部所使用的詞稱為關(guān)鍵字或保留保留字。字。p不能不能隨便使用這些保留字。隨便使用這些保留字。p所有的關(guān)鍵字都使用小寫字母。所有的關(guān)鍵字都使用小寫字母。 注注:如果關(guān)鍵字前面帶有:如果關(guān)鍵字前面帶有轉(zhuǎn)義標(biāo)識符轉(zhuǎn)義標(biāo)識符,則不再
37、作為關(guān)鍵字使用,則不再作為關(guān)鍵字使用。module、endmodule、input、output、wire、reg、and $ $符號指示這是系統(tǒng)任務(wù)和函數(shù)符號指示這是系統(tǒng)任務(wù)和函數(shù)系統(tǒng)函數(shù)有很多,如:系統(tǒng)函數(shù)有很多,如: 返回當(dāng)前仿真時(shí)間返回當(dāng)前仿真時(shí)間$time$time 顯示顯示/ /監(jiān)視信號值監(jiān)視信號值($display, $monitor)($display, $monitor) 停止仿真停止仿真$stop$stop 結(jié)束仿真結(jié)束仿真$finish$finish $monitor($time, “a = %b, b = %h”, a, b); $monitor($time, “a =
38、 %b, b = %h”, a, b); 當(dāng)信號當(dāng)信號a a或或b b的值發(fā)生變化時(shí),系統(tǒng)任務(wù)的值發(fā)生變化時(shí),系統(tǒng)任務(wù)$monitor$monitor顯示當(dāng)前顯示當(dāng)前仿真時(shí)間,信號仿真時(shí)間,信號a a值值( (二進(jìn)制格式二進(jìn)制格式), ), 信號信號b b值(值(1616進(jìn)制格式)。進(jìn)制格式)。p以以 (符號)開始(符號)開始的某些標(biāo)識符是編譯器指令。的某些標(biāo)識符是編譯器指令。p在編譯在編譯Verilog HDL語言時(shí)語言時(shí),特定的編譯器,特定的編譯器指令指令均均有效,即:編譯有效,即:編譯過程可跨越多個(gè)過程可跨越多個(gè)文件,文件,直到遇到直到遇到其其它不同它不同編譯程序編譯程序指令為止。指令為
39、止。( ( ) )重音重音符號符號說明一說明一個(gè)個(gè)編譯器編譯器指令指令這些這些編譯器編譯器指令指令使使仿真編譯器進(jìn)行一些特殊的操作仿真編譯器進(jìn)行一些特殊的操作編譯器指令編譯器指令一直一直保持有效直到被覆蓋或解除保持有效直到被覆蓋或解除resetall resetall 復(fù)位所有復(fù)位所有的的編譯器指令編譯器指令為為缺省值,應(yīng)該在其它編譯指導(dǎo)之缺省值,應(yīng)該在其它編譯指導(dǎo)之前使用前使用一一種簡單的文本替換的功能種簡單的文本替換的功能 define define 在編譯時(shí)在編譯時(shí)替換替換?????商岣呙枋龅目勺x性。提高描述的可讀性。define not_delay #1define and_delay
40、#2define or_delay #1module MUX2_1 (out, a, b, sel);output out;input a, b, sel;not not_delay not1( sel_, sel);and and_delay and1( a1, a, sel_);and and_delay and2( b1, b, sel);or or_delay or1( out, a1, b1);endmodule定義定義not_delaynot_delay使用使用not_delaynot_delay解除定義的宏,使用解除定義的宏,使用 undef macro_nameundef ma
41、cro_name使用使用編譯器命令編譯器命令definedefine,可以,可以 提高描述的可讀性提高描述的可讀性 定義全局設(shè)計(jì)參數(shù),如延時(shí)和矢量的位數(shù)。這些參數(shù)可以定義在同一位置。定義全局設(shè)計(jì)參數(shù),如延時(shí)和矢量的位數(shù)。這些參數(shù)可以定義在同一位置。這樣,當(dāng)要修改設(shè)計(jì)配置時(shí),只需要在一個(gè)地方修改。這樣,當(dāng)要修改設(shè)計(jì)配置時(shí),只需要在一個(gè)地方修改。 定義定義VerilogVerilog命令的簡寫形式命令的簡寫形式 define vectors_file /usr1/chrisz/library/vectors define results_file / usr1/chrisz/library/res
42、ults可以將可以將definedefine放在一個(gè)文件中,與其它文件一起編譯。放在一個(gè)文件中,與其它文件一起編譯。 includeinclude在當(dāng)前內(nèi)容中插入一個(gè)文件在當(dāng)前內(nèi)容中插入一個(gè)文件 格式:格式: include “”include “”如如include global.v include ././library/mux. v”includeinclude可用于:可用于: includeinclude保存在文件中的全局的或經(jīng)常用到的一些定義,如文本宏保存在文件中的全局的或經(jīng)常用到的一些定義,如文本宏 在模塊內(nèi)部在模塊內(nèi)部includeinclude一些任務(wù)(一些任務(wù)(tasks)t
43、asks),提高代碼的可維護(hù)性。,提高代碼的可維護(hù)性。aaa.v bbb.vtimescale timescale 說明時(shí)間單位及精度說明時(shí)間單位及精度格式:格式:timescale / timescale / 如:如:timescale 1 ns / 100 pstimescale 1 ns / 100 ps time_unittime_unit: : 延時(shí)或時(shí)間的測量單位延時(shí)或時(shí)間的測量單位time_precision: time_precision: 延時(shí)值超出精度要先舍入后使用延時(shí)值超出精度要先舍入后使用timescaletimescale必須在模塊之前出現(xiàn)必須在模塊之前出現(xiàn)time_
44、precisiontime_precision不能大于不能大于time_unittime_unitt time_precisionime_precision和和time_unittime_unit的表示方法:的表示方法:integer integer unit_stringunit_string integer : integer : 可以是可以是1 1, 1010, 100100 unit_string: unit_string: 可以是可以是s(second), ms(millisecond), s(second), ms(millisecond), us(microsecond), ns
45、(nanosecond), ps(picosecond), us(microsecond), ns(nanosecond), ps(picosecond), fs(femtosecond)fs(femtosecond)precisionprecision的時(shí)間單位應(yīng)盡量與設(shè)計(jì)的實(shí)際精度相同。的時(shí)間單位應(yīng)盡量與設(shè)計(jì)的實(shí)際精度相同。 precisionprecision是仿真器的仿真時(shí)間步。是仿真器的仿真時(shí)間步。 若若time_unittime_unit與與precision_unitprecision_unit差別很大將嚴(yán)重影響仿真速度。差別很大將嚴(yán)重影響仿真速度。 如說明一個(gè)如說明一個(gè)time
46、scale 1s / 1pstimescale 1s / 1ps,則仿真器在,則仿真器在1 1秒內(nèi)要掃描其秒內(nèi)要掃描其事件序列事件序列10101212次;而次;而timescale 1s/1mstimescale 1s/1ms則只需掃描則只需掃描10103 3次次。這里主要介紹整數(shù)型常量和實(shí)數(shù)型常量。這里主要介紹整數(shù)型常量和實(shí)數(shù)型常量。p整數(shù)型整數(shù)型常量常量 整數(shù)型整數(shù)型常量可以按如下兩種常量可以按如下兩種方式表示:方式表示:簡單簡單的十進(jìn)制格式的十進(jìn)制格式u 這種這種形式的整數(shù)定義為帶有一個(gè)可選的形式的整數(shù)定義為帶有一個(gè)可選的“+”+”(一元)(一元)或或“-”-”(一元)操作符的數(shù)字序列(
47、一元)操作符的數(shù)字序列。u在在常數(shù)前的常數(shù)前的+ +或者或者- -號,是一個(gè)一元的加或者減號,是一個(gè)一元的加或者減操作符。操作符?;鶖?shù)基數(shù)表示法表示法 這種這種形式的整數(shù)格式為形式的整數(shù)格式為:其中:其中:psize 定義定義將將數(shù)字?jǐn)?shù)字(number)(number)轉(zhuǎn)換轉(zhuǎn)換為二進(jìn)制位后為二進(jìn)制位后,得到,得到的位寬。該的位寬。該參數(shù)是一個(gè)非零的無符號十進(jìn)制參數(shù)是一個(gè)非零的無符號十進(jìn)制常常數(shù)數(shù)。p base_format 撇撇號號是指定位寬格式表示法的固有字符,不能省略是指定位寬格式表示法的固有字符,不能省略。 base_format是是用于用于表示表示數(shù)基數(shù)數(shù)基數(shù)格式(進(jìn)格式(進(jìn)制)制)的
48、一個(gè)字的一個(gè)字母,對大小寫不敏感。母,對大小寫不敏感。在撇號后可以添加下面在撇號后可以添加下面的基數(shù)標(biāo)識的基數(shù)標(biāo)識:p字母字母s/S,表示該數(shù)為有符號數(shù)。,表示該數(shù)為有符號數(shù)。p字母字母o/O,表示,表示八進(jìn)制數(shù)。八進(jìn)制數(shù)。p字母字母b/B,表示,表示二進(jìn)制數(shù)。二進(jìn)制數(shù)。p字母字母d/D,表示,表示十進(jìn)制數(shù)。十進(jìn)制數(shù)。p字母字母h/H,表示,表示十六進(jìn)制數(shù)。十六進(jìn)制數(shù)。 注意:注意:撇撇號和基數(shù)標(biāo)識之間號和基數(shù)標(biāo)識之間不能有空格。不能有空格。p 是基于基數(shù)值的無符號數(shù)字是基于基數(shù)值的無符號數(shù)字序列,序列,由基數(shù)格式所對應(yīng)的由基數(shù)格式所對應(yīng)的數(shù)數(shù)字串組成字串組成。數(shù)值。數(shù)值x x和和z z以及十
49、六進(jìn)制中的以及十六進(jìn)制中的a a到到f f不區(qū)分大小寫。不區(qū)分大小寫。每個(gè)數(shù)字之間,可以通過每個(gè)數(shù)字之間,可以通過_符號連接。符號連接。注:注:p對于沒有對于沒有位寬位寬和和基數(shù)的十進(jìn)制數(shù),將其作為有符號數(shù)基數(shù)的十進(jìn)制數(shù),將其作為有符號數(shù)。p如果如果帶有基數(shù)的十進(jìn)制數(shù)包含了帶有基數(shù)的十進(jìn)制數(shù)包含了s s,則認(rèn)為有符號,則認(rèn)為有符號數(shù)。數(shù)。p如果如果只帶有基數(shù),則認(rèn)為是無符號數(shù)只帶有基數(shù),則認(rèn)為是無符號數(shù)。p負(fù)數(shù)應(yīng)該用二進(jìn)制的補(bǔ)碼表示。負(fù)數(shù)應(yīng)該用二進(jìn)制的補(bǔ)碼表示。3非對齊寬度整數(shù)的處理非對齊寬度整數(shù)的處理 對于非對齊寬度整數(shù)的處理,遵循下面的規(guī)則:對于非對齊寬度整數(shù)的處理,遵循下面的規(guī)則:p當(dāng)當(dāng)
50、位寬位寬小于無符號數(shù)的小于無符號數(shù)的實(shí)際位數(shù)時(shí)實(shí)際位數(shù)時(shí),截?cái)嘞鄳?yīng),截?cái)嘞鄳?yīng)的高位的高位部分。部分。p當(dāng)位寬大于當(dāng)位寬大于無無符號數(shù)的實(shí)際位數(shù),且數(shù)值的最高位是符號數(shù)的實(shí)際位數(shù),且數(shù)值的最高位是0或或 1時(shí),時(shí),相應(yīng)的高位部分補(bǔ)相應(yīng)的高位部分補(bǔ)0或或1。p當(dāng)當(dāng)位寬大位寬大于于無無符號數(shù)的符號數(shù)的實(shí)際位數(shù),且數(shù)值的最高位是實(shí)際位數(shù),且數(shù)值的最高位是x或或z時(shí),時(shí),相應(yīng)的高位部分補(bǔ)相應(yīng)的高位部分補(bǔ)x或或z。p如果如果未未指定無符號數(shù)的位指定無符號數(shù)的位寬,那么默認(rèn)的位寬至少為寬,那么默認(rèn)的位寬至少為32位。位。 未未指定指定位寬常數(shù)的例子位寬常數(shù)的例子 659 / 十進(jìn)制數(shù)十進(jìn)制數(shù) h 837FF
51、 / 十六進(jìn)制數(shù)十六進(jìn)制數(shù) o 7460 / 八進(jìn)制數(shù)八進(jìn)制數(shù)指定指定位寬常數(shù)的例子位寬常數(shù)的例子 4b1001 / 四位二進(jìn)制數(shù)四位二進(jìn)制數(shù) 5 D 3 / 五位十進(jìn)制數(shù)五位十進(jìn)制數(shù) 3b01x / 三位數(shù),其最低有效位未知(三位數(shù),其最低有效位未知(x表示不確定)表示不確定) 12hx / 十二位數(shù),其值不確定十二位數(shù),其值不確定 16hz / 十六位數(shù),其值為高阻(十六位數(shù),其值為高阻(z表示高阻狀態(tài)表示高阻狀態(tài))帶符號常數(shù)的例子帶符號常數(shù)的例子 8 d -6 /非法聲明非法聲明 -8 d 6 /定義了定義了6的二進(jìn)制補(bǔ)碼,共的二進(jìn)制補(bǔ)碼,共8位,等效于位,等效于-(8d6) 4 shf
52、 / 定義了定義了4位數(shù),將其理解為位數(shù),將其理解為-1的二進(jìn)制補(bǔ)碼,的二進(jìn)制補(bǔ)碼,等等效效 于于-4h 1 -4 sd15 /這個(gè)等效于這個(gè)等效于-(-4d 1),或者,或者 0001 16sd? /和和16sbz相同相同 注:注:?符號用于替換符號用于替換z。對于。對于十六進(jìn)制,設(shè)置為四位;對于八進(jìn)制,十六進(jìn)制,設(shè)置為四位;對于八進(jìn)制,設(shè)置為三位;對于二進(jìn)制,設(shè)置為設(shè)置為三位;對于二進(jìn)制,設(shè)置為1位。位。自動(dòng)左對齊常數(shù)的例子自動(dòng)左對齊常數(shù)的例子 reg 11:0 a, b, c, d; initial begin a = h x; /生成生成xxx b = h 3x; /生成生成03x c
53、 = h z3; /生成生成zz3 d = h 0z3; /生成生成0z3 end reg 84:0 e, f, g; e = h5; / 生成生成821b0,3b101 f = hx; / 生成生成851hx g = hz; / 生成生成851hz帶下帶下劃線的常數(shù)例子劃線的常數(shù)例子 27_195_000 16b0011_0101_0001_1111 32 h 12ab_f001p實(shí)數(shù)實(shí)數(shù)型常量型常量在在IEEE Std 754-1985IEEE Std 754-1985中,對實(shí)數(shù)中,對實(shí)數(shù)的表示進(jìn)行了的表示進(jìn)行了說明。該說明。該標(biāo)標(biāo)準(zhǔn)用于雙精度浮點(diǎn)數(shù)。實(shí)數(shù)可以用十進(jìn)制計(jì)數(shù)法或者科學(xué)準(zhǔn)用于雙
54、精度浮點(diǎn)數(shù)。實(shí)數(shù)可以用十進(jìn)制計(jì)數(shù)法或者科學(xué)計(jì)數(shù)法表示。計(jì)數(shù)法表示。 注注:十進(jìn)制小數(shù)點(diǎn)兩邊,至少要有一個(gè)數(shù)字:十進(jìn)制小數(shù)點(diǎn)兩邊,至少要有一個(gè)數(shù)字。實(shí)數(shù)實(shí)數(shù)常量有效表示的例子常量有效表示的例子 1.2 0.1 2394.26331 1.2E12 /指數(shù)符號為指數(shù)符號為e或者或者E 1.30e-2 0.1e-0 23E10 29E-2 236.123_763_e-12 /忽略下劃線忽略下劃線實(shí)數(shù)實(shí)數(shù)常量無效表示的例子常量無效表示的例子 .12 9. 4.E3 .2e-7實(shí)數(shù)實(shí)數(shù)到整數(shù)的到整數(shù)的轉(zhuǎn)換轉(zhuǎn)換 Verilog HDL語言規(guī)定,通過語言規(guī)定,通過四舍五入到最近整數(shù)的四舍五入到最近整數(shù)的方法,
55、方法,將實(shí)數(shù)轉(zhuǎn)換為整數(shù)。將實(shí)數(shù)轉(zhuǎn)換為整數(shù)。對對實(shí)數(shù)四舍五入后的表示實(shí)數(shù)四舍五入后的表示p42.446和和42.45轉(zhuǎn)換為整數(shù)轉(zhuǎn)換為整數(shù)42p92.5和和92.699轉(zhuǎn)換為整數(shù)轉(zhuǎn)換為整數(shù)93p-5.62轉(zhuǎn)換為整數(shù)轉(zhuǎn)換為整數(shù)-6p-26.22轉(zhuǎn)換為整數(shù)轉(zhuǎn)換為整數(shù)-26Verilog中,字符串大多用于顯示信息的命令中。Verilog沒有字符串?dāng)?shù)據(jù)類型字符串要在一行中用雙引號括起來,也就是不能跨行。字符串中可以使用一些C語言轉(zhuǎn)義(escape)符,如t n可以使用一些C語言格式符(如%b)在仿真時(shí)產(chǎn)生格式化輸出: “This is a normal string” “This string has a
56、 t tab and ends with a new linen” ”This string formats a value: val = %b”字符串變量的字符串變量的聲明聲明: :寄存器寄存器型變量,它的位寬等于字符個(gè)數(shù)乘以型變量,它的位寬等于字符個(gè)數(shù)乘以8.典型地,存儲典型地,存儲12個(gè)字符的字符串個(gè)字符的字符串“Hello China!”需要需要8*12(即(即96位)寬的寄存器。位)寬的寄存器。 reg 8*12:1 str1; initial begin str =“Hello China!”; end 字符串字符串操作操作對于對于非對齊寬度的情況,采用下面的方式進(jìn)行處理非對齊寬度
57、的情況,采用下面的方式進(jìn)行處理:p如果如果聲明的字符串變量位數(shù)聲明的字符串變量位數(shù)大于大于字符串實(shí)際長度,則字符串實(shí)際長度,則在賦值操作后,字符串變量的左端(即高位)補(bǔ)在賦值操作后,字符串變量的左端(即高位)補(bǔ)0。這。這一點(diǎn)與非字符串值的賦值操作是一致的一點(diǎn)與非字符串值的賦值操作是一致的。p如果聲明的字符串變量位數(shù)小于字符串實(shí)際長度,如果聲明的字符串變量位數(shù)小于字符串實(shí)際長度,那那么截?cái)嘧址唇財(cái)嘧址牡淖蠖俗蠖?,這樣就丟失了高位字符。,這樣就丟失了高位字符。字符串字符串操作的操作的例子例子輸出結(jié)果為:輸出結(jié)果為:Hello world is stored as 00000048656c6
58、c6f20776f726c64Hello world! is stored as 48656c6c6f20776f726c64212121特殊字符特殊字符 在某些字符之前可以加上一個(gè)引導(dǎo)性的字在某些字符之前可以加上一個(gè)引導(dǎo)性的字符(轉(zhuǎn)義字符),這些的字符只能用于字符串中。下表符(轉(zhuǎn)義字符),這些的字符只能用于字符串中。下表列出列出這些特殊字符表示這些特殊字符表示和意義。和意義。特殊字符表示意義n換行符tTab鍵符號”符號”ddd3位八進(jìn)制數(shù)表示的ASCII值(0d7) 隨著工具的擴(kuò)展,除了仿真器使用隨著工具的擴(kuò)展,除了仿真器使用Verilog HDLVerilog HDL作作為其輸入源外,還包
59、含另外一個(gè)機(jī)制,即在為其輸入源外,還包含另外一個(gè)機(jī)制,即在Verilog Verilog HDLHDL源文件中指定對象、描述和描述組的屬性。源文件中指定對象、描述和描述組的屬性。這些屬性可以用于各種工具中,包括:仿真器、控制工具的操作行為。這些屬性可以用于各種工具中,包括:仿真器、控制工具的操作行為。這些屬性稱為這些屬性稱為attribute。指定指定屬性的屬性的格式格式 (* attribute_name = constant_expression *)或者或者 (* attribute_name *)將將屬性添加到屬性添加到casecase描述的描述的Verilog HDLVerilog
60、HDL描述例子。描述例子。 (* full_case, parallel_case *) case (foo) (* full_case=1 *) (* parallel_case=1 *) / 多個(gè)屬性多個(gè)屬性 case (foo) 或者或者 (* full_case, / 沒有分配值沒有分配值 parallel_case=1 *) case (foo) 添加添加full_casefull_case屬性屬性, , 但是沒有但是沒有parallel_caseparallel_case屬性的屬性的Veriog Veriog HDLHDL描述描述 (* full_case *) / parallel_case n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云南建筑安全員C證考試(專職安全員)題庫附答案
- 2025湖南省安全員-C證考試(專職安全員)題庫附答案
- 2025年湖北省安全員B證考試題庫及答案
- 2025江蘇省安全員A證考試題庫及答案
- 貴陽信息科技學(xué)院《環(huán)境工程CAD技術(shù)應(yīng)用實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025安徽省安全員《C證》考試題庫及答案
- 廣州幼兒師范高等??茖W(xué)校《家用電器設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年安徽省安全員知識題庫附答案
- 《d分析方法》課件
- 補(bǔ)條件和問題課件
- 2024年天津市中考語文試卷真題(含答案)
- 2024-2030年中國碳監(jiān)測行業(yè)市場運(yùn)營態(tài)勢及發(fā)展前景研判報(bào)告
- 設(shè)備部年終總結(jié)
- 湘教版七年級上冊地理全冊教案(共30課時(shí))
- 江西省萍鄉(xiāng)市2022-2023學(xué)年高一年級上冊期末考試數(shù)學(xué)試題
- 第二單元自測卷(試題)2023-2024學(xué)年統(tǒng)編版語文四年級下冊
- 山西省呂梁市2023-2024學(xué)年高二上學(xué)期期末數(shù)學(xué)試題
- 如何訓(xùn)練寶寶獨(dú)立就寢
- 血常規(guī)報(bào)告單
- 設(shè)備部年度工作總結(jié)和來年計(jì)劃
- 寶寶大便觀察及護(hù)理課件
評論
0/150
提交評論