計算機系統(tǒng)綜合課程設計2-Verilog HDL語言初步_第1頁
計算機系統(tǒng)綜合課程設計2-Verilog HDL語言初步_第2頁
計算機系統(tǒng)綜合課程設計2-Verilog HDL語言初步_第3頁
計算機系統(tǒng)綜合課程設計2-Verilog HDL語言初步_第4頁
計算機系統(tǒng)綜合課程設計2-Verilog HDL語言初步_第5頁
已閱讀5頁,還剩231頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、P.1 P.2 硬件描述語言是一種用文本形式來描述和硬件描述語言是一種用文本形式來描述和 設計電路的語言。是硬件設計人員和電子設計設計電路的語言。是硬件設計人員和電子設計 自動化(自動化(EDAEDA)工具之間的界面。)工具之間的界面。 P.3 功能:功能: 1 1)編寫設計文件;)編寫設計文件; 2 2)建立電子系統(tǒng)行為級的仿真模型;)建立電子系統(tǒng)行為級的仿真模型; 3 3)自動綜合以生成符合要求且在電路結(jié)構(gòu)上)自動綜合以生成符合要求且在電路結(jié)構(gòu)上 可以實現(xiàn)的數(shù)字邏輯網(wǎng)表(可以實現(xiàn)的數(shù)字邏輯網(wǎng)表(NetlistNetlist);); 4 4)寫入到)寫入到CPLDCPLD和和FPGAFPGA

2、器件中。器件中。 P.4 1 1、電路設計的規(guī)模越來越大,復雜度越來越高。、電路設計的規(guī)模越來越大,復雜度越來越高。 2 2、電子領(lǐng)域的競爭越來越激烈,開發(fā)周期要短。、電子領(lǐng)域的競爭越來越激烈,開發(fā)周期要短。 3 3、調(diào)試電路速度快。不必修改電路原理圖原型,、調(diào)試電路速度快。不必修改電路原理圖原型, 只需要對只需要對HDLHDL進行修改。進行修改。 4 4、易于理解,易于維護。、易于理解,易于維護。 5 5、有許多易于掌握的仿真、綜合和布局布線工具。、有許多易于掌握的仿真、綜合和布局布線工具。 P.5 1. Bottom Up的設計方法的設計方法 1.1.由基本門構(gòu)成各由基本門構(gòu)成各 個組合與

3、時序邏輯個組合與時序邏輯 2.2.由邏輯單元組成各由邏輯單元組成各 個獨立的功能模塊個獨立的功能模塊 3.3.由各個功能模塊由各個功能模塊 連成一個完整系統(tǒng)連成一個完整系統(tǒng) 4.4.完成整個系統(tǒng)測完成整個系統(tǒng)測 試與性能分析試與性能分析 REGISTERPC RAMALU ; 2. 2. 采用通用邏輯元器件采用通用邏輯元器件- -通常采用通常采用7474系列和系列和CMOS4000CMOS4000 系列的產(chǎn)品進行設計;系列的產(chǎn)品進行設計; 3.3.在系統(tǒng)硬件設計的后期進行調(diào)試和仿真在系統(tǒng)硬件設計的后期進行調(diào)試和仿真 ; 只有在部分或全部硬件電路連接完畢,才可以進行只有在部分或全部硬件電路連接完

4、畢,才可以進行 電路調(diào)試,一旦考慮不周到,系統(tǒng)設計存在較大缺陷,電路調(diào)試,一旦考慮不周到,系統(tǒng)設計存在較大缺陷, 則要重新設計,使設計周期延長。則要重新設計,使設計周期延長。 4.4.設計結(jié)果是一張電路圖設計結(jié)果是一張電路圖 ; 當設計調(diào)試完畢后,形成電原理圖,該圖包括元器件當設計調(diào)試完畢后,形成電原理圖,該圖包括元器件 型號和信號之間的互連關(guān)系等等型號和信號之間的互連關(guān)系等等 P.7 優(yōu)點:優(yōu)點: 1.1.設計人員對于用這種方法進行設計比較熟悉;設計人員對于用這種方法進行設計比較熟悉; 2.2.實現(xiàn)各個子塊電路所需的時間短。實現(xiàn)各個子塊電路所需的時間短。 缺點:缺點: 1.1.一般來講,對系

5、統(tǒng)的整體功能把握不足;一般來講,對系統(tǒng)的整體功能把握不足; 2.2.實現(xiàn)整個系統(tǒng)的功能所需的時間長,因為必須先實現(xiàn)整個系統(tǒng)的功能所需的時間長,因為必須先 將各個小模塊完成,使用這種方法對設計人員之將各個小模塊完成,使用這種方法對設計人員之 間相互進行協(xié)作有比較高的要求。間相互進行協(xié)作有比較高的要求。 P.8 2. Top down 的設計方法的設計方法 4.4.工藝庫映射工藝庫映射 3.3.各個功能模塊系各個功能模塊系 統(tǒng)級聯(lián)合驗證統(tǒng)級聯(lián)合驗證 2.2.各個功能模塊劃各個功能模塊劃 分,設計和驗證分,設計和驗證 1. 1. 系統(tǒng)層:頂層模塊,系統(tǒng)層:頂層模塊, 行為級描述,功能模行為級描述,功

6、能模 擬和性能評估擬和性能評估 REGISTERPC RAMALU input a,b,cin; output sum,cout; assign cout,sum = a+b+cin; endmodule module add4(sum,cout,a,b,cin); output 3:0 sum; output cout; input 3:0 a,b; input cin; P.22 wire cin1,cin2,cin3; full_add f0 (a0,b0,cin,sum0,cin1); full_add f1 (a1,b1,cin1,sum1,cin2); full_add f2 (.

7、a(a2),.b(b2),.cin(cin2), .sum(sum2),.cout(cin3); full_add f3 (.cin(cin3),.a(a3),.b(b3), .cout(cout),.sum(sum3); endmodule P.23 例:例: always (posedge clk) begin if(reset) out=0; else out=out+1; end P.24 在在Verilog模塊中,所有的過程塊(如模塊中,所有的過程塊(如initial、 always)、持續(xù)賦值語句、實例引用之間都)、持續(xù)賦值語句、實例引用之間都 是并行的;是并行的; 它們表示的是一

8、種通過變量名互相連接的關(guān)它們表示的是一種通過變量名互相連接的關(guān) 系;系; 在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān) 系;系; 只有持續(xù)賦值語句只有持續(xù)賦值語句assign和實例引用語句可和實例引用語句可 以獨立于過程塊而存在于模塊的功能定義部以獨立于過程塊而存在于模塊的功能定義部 分。分。 P.25 內(nèi)容簡介內(nèi)容簡介 v 詞法詞法 v 數(shù)據(jù)類型數(shù)據(jù)類型 v 寄存器和存儲器寄存器和存儲器 v 運算符運算符 P.26 空白符(間隔符)空白符(間隔符) 包括:空格包括:空格(b)、tab(t)(制表符制表符)、換行符、換行符 (n)及換頁符。及換頁符。 空白符使代

9、碼錯落有致、閱讀方便。綜合空白符使代碼錯落有致、閱讀方便。綜合 時,空白符被忽略。但是在字符串中空白和時,空白符被忽略。但是在字符串中空白和 制表符會被認為是有意義的字符。制表符會被認為是有意義的字符。 P.27 Verilog程序可以不分行:程序可以不分行: initial begin ina=3b001;inb=3b011; end 也可以加入空白符采用多行編寫:也可以加入空白符采用多行編寫: initial begin ina=3b001; inb=3b011; end P.28 注釋注釋 有兩種注釋形式:有兩種注釋形式: 單行注釋:以單行注釋:以/開始到本行結(jié)束。開始到本行結(jié)束。 多行

10、注釋:以多行注釋:以/ /* *開始到開始到* */ /結(jié)束。結(jié)束。 /*舉例說明舉例說明*/ module addbit(a,b,ci,sum,co); /輸入端口輸入端口 input a; input b;. P.29 3. . 數(shù)字與字符串數(shù)字與字符串 Verilog HDL有下面有下面4種基本邏輯狀態(tài):種基本邏輯狀態(tài): 0低電平、邏輯低電平、邏輯0或或“假假” 1高電平、邏輯高電平、邏輯1或或“真真” X未知狀態(tài)未知狀態(tài) Z高阻態(tài)高阻態(tài) X、Z不分不分 大小寫大小寫 P.30 1)整數(shù)整數(shù) 有有4種進制表示形式:種進制表示形式: 二進制整數(shù)(二進制整數(shù)(b或或B) 十進制整數(shù)(十進制整

11、數(shù)(d或或D) 十六進制整數(shù)(十六進制整數(shù)(h或或H) 八進制整數(shù)(八進制整數(shù)(o或或O) 常數(shù)按照其數(shù)值類型可以劃分為整數(shù)常數(shù)按照其數(shù)值類型可以劃分為整數(shù) 和實數(shù)兩種和實數(shù)兩種 P.31 數(shù)字表達方式有以下數(shù)字表達方式有以下3種:種: 舉例:舉例: 8b11000101 /位寬為位寬為8位的二進制數(shù)位的二進制數(shù) 8hd5 /位寬為位寬為8位的十六進制數(shù)位的十六進制數(shù)d5H 5o27 /位寬為位寬為5位的八進制數(shù)位的八進制數(shù)27O P.32 4B1X_01/4位二進制數(shù)位二進制數(shù)1X01 5HX/5位十六進制數(shù)位十六進制數(shù)XX 4hz/4位十六進制數(shù)位十六進制數(shù)z 8h 2 A/位寬與字符間允

12、許有空格位寬與字符間允許有空格 -8D5/8位二進制數(shù),位二進制數(shù),-5的補碼的補碼 X可以用來定義十六進制數(shù)的可以用來定義十六進制數(shù)的4位二進制狀態(tài),位二進制狀態(tài), 八進制數(shù)的八進制數(shù)的3位,二進制數(shù)的位,二進制數(shù)的1位。位。Z的表示方的表示方 法同法同X類似。類似。 P.33 數(shù)值常量中的下劃線數(shù)值常量中的下劃線“_”是為了增加可讀是為了增加可讀 性,可以忽略。如性,可以忽略。如8b1100_0110表示表示8位二進制位二進制 數(shù)。數(shù)。 數(shù)值常量中的數(shù)值常量中的“?”表示高阻狀態(tài)。表示高阻狀態(tài)。 例:例:2B1?表示?表示2位的二進制數(shù)其中的一位是高位的二進制數(shù)其中的一位是高 阻狀態(tài)。阻狀

13、態(tài)。 P.34 如果沒有定義一個整數(shù)型的長度,數(shù)的如果沒有定義一個整數(shù)型的長度,數(shù)的 長度為相應值中定義的位數(shù)。下面是兩個例子:長度為相應值中定義的位數(shù)。下面是兩個例子: o721 /9位位2進制位寬的八進制數(shù)進制位寬的八進制數(shù) hAF /8位位2進制位寬的十六進制數(shù)進制位寬的十六進制數(shù) 如果定義的長度比為常量指定的長度長,如果定義的長度比為常量指定的長度長, 通常在左邊填通常在左邊填0補位。但是如果數(shù)最左邊一位補位。但是如果數(shù)最左邊一位 為為x或或z,就相應地用,就相應地用x或或z在左邊補位。例如:在左邊補位。例如: 10b10 左邊添左邊添0占位占位, 0000000010 10bx0 x

14、1 左邊添左邊添x占位占位,xxxxxxx0 x1 P.35 如果定義的位寬比實際的位數(shù)小,那么最如果定義的位寬比實際的位數(shù)小,那么最 左邊的位相應地被截斷:左邊的位相應地被截斷: 3b1001_0011 /與與3b011相等相等 5h0FFF /與與5h1F相等相等 P.36 2)實數(shù))實數(shù) 有兩種表示方法:有兩種表示方法: 十進制表示方法十進制表示方法 2.0 5.67 2. /非法:小數(shù)點兩側(cè)必須有數(shù)字非法:小數(shù)點兩側(cè)必須有數(shù)字 科學計數(shù)法科學計數(shù)法 43_5.1e2/43510.0(下劃線忽略)(下劃線忽略) 9.6E2/960.0 5E-4/0.0005 P.37 下面的幾個例子是無

15、效的格式:下面的幾個例子是無效的格式: .25 3. 7.E3 .8e-2 實數(shù)可以轉(zhuǎn)化為整數(shù),根據(jù)實數(shù)可以轉(zhuǎn)化為整數(shù),根據(jù) 四舍五入的原則,而不是截四舍五入的原則,而不是截 斷原則,當將實數(shù)賦給一個斷原則,當將實數(shù)賦給一個 整數(shù)時,這種轉(zhuǎn)化會自行發(fā)整數(shù)時,這種轉(zhuǎn)化會自行發(fā) 生,例如:在轉(zhuǎn)化成整數(shù)時,生,例如:在轉(zhuǎn)化成整數(shù)時, 實數(shù)實數(shù)25.5和和25.8都變成都變成26,而,而 25.2則變成則變成25。 P.38 3)字符串字符串 字符串是雙引號內(nèi)的字符序列,不能分成字符串是雙引號內(nèi)的字符序列,不能分成 多行書寫。若字符串用做多行書寫。若字符串用做Verilog HDL表達式或表達式或 賦

16、值語句中的操作數(shù),則字符串被看作賦值語句中的操作數(shù),則字符串被看作8位似的位似的 ASCII值序列,每一個字符對應值序列,每一個字符對應8位位ASCII值。值。 P.39 例例1:字符串變量聲明:字符串變量聲明 reg 8*12:1 stringvar; initial begin stringvar=“hello world!”; end P.40 轉(zhuǎn)意符:轉(zhuǎn)意符: 特殊字符表示特殊字符表示意義意義 n換行符換行符 tTab鍵鍵 符號符號 *符號符號* ddd3位八進制表示的位八進制表示的 ASCII值值 %符號符號% P.41 Verilog HDL中的標識符可以是任意一中的標識符可以是任

17、意一 組字母、數(shù)字以及符號組字母、數(shù)字以及符號“$”和和“_ ”(下劃線)(下劃線) 的組合,但是標識符的第一個字符必須是字的組合,但是標識符的第一個字符必須是字 母或下劃線。標識符是區(qū)分大小寫的。母或下劃線。標識符是區(qū)分大小寫的。 count_A1_d2 COUNTR56_68 30 count/標識符不允許以數(shù)字開頭標識符不允許以數(shù)字開頭 out */標識符中不允許包含標識符中不允許包含* * P.42 Verilog HDL內(nèi)部已經(jīng)使用的詞稱為內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵關(guān)鍵 字或保留字。字或保留字。這些關(guān)鍵字用戶不能隨便使用。這些關(guān)鍵字用戶不能隨便使用。 在編寫程序時,變量的定義不要與這些

18、關(guān)鍵詞在編寫程序時,變量的定義不要與這些關(guān)鍵詞 沖突。沖突。 所有的關(guān)鍵字都是小寫所有的關(guān)鍵字都是小寫 P.43 Verilog HDL中共有中共有19種數(shù)據(jù)類型。種數(shù)據(jù)類型。 這里主要介紹這里主要介紹4種最基本的數(shù)據(jù)類型。種最基本的數(shù)據(jù)類型。 net type 相當于硬件電路中的各種物理連線。相當于硬件電路中的各種物理連線。 P.44 Net Type的變量不能存儲值,而且必須受到驅(qū)的變量不能存儲值,而且必須受到驅(qū) 動器的驅(qū)動。動器的驅(qū)動。 兩種驅(qū)動方式:兩種驅(qū)動方式: 1)在結(jié)構(gòu)描述中將它連接到一個邏輯門或模塊)在結(jié)構(gòu)描述中將它連接到一個邏輯門或模塊 的輸出端。的輸出端。 2)用持續(xù)賦值語

19、句)用持續(xù)賦值語句assign對其進行賦值。對其進行賦值。 特點:特點:輸出的值緊跟輸入值的變化而變化。輸出的值緊跟輸入值的變化而變化。 當沒有驅(qū)動源對其驅(qū)動時,它將保持高阻態(tài)。當沒有驅(qū)動源對其驅(qū)動時,它將保持高阻態(tài)。 P.45 為了能夠精確地反映硬件電路中各種可為了能夠精確地反映硬件電路中各種可 能的物理信號連接特性,能的物理信號連接特性, Verilog HDL提供了提供了 多種連線型數(shù)據(jù)。常用的有多種連線型數(shù)據(jù)。常用的有wire型和型和tri型。這型。這 兩種變量都用于連接器件單元,它們具有相同兩種變量都用于連接器件單元,它們具有相同 的語法格式和功能。的語法格式和功能。 wire型變量

20、:通常用來表示單個門驅(qū)動或連續(xù)型變量:通常用來表示單個門驅(qū)動或連續(xù) 賦值語句驅(qū)動的連線型數(shù)據(jù)。賦值語句驅(qū)動的連線型數(shù)據(jù)。 tri型變量:通常用來表示多驅(qū)動器驅(qū)動的連線型變量:通常用來表示多驅(qū)動器驅(qū)動的連線 型數(shù)據(jù)。型數(shù)據(jù)。 P.46 wire型變量的格式:型變量的格式: wire n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名,數(shù)據(jù)名2,數(shù)據(jù)名,數(shù)據(jù)名n; wirewire型數(shù)據(jù)確認符;型數(shù)據(jù)確認符; n-1:0代表該數(shù)據(jù)的位寬。缺省狀態(tài),位寬代表該數(shù)據(jù)的位寬。缺省狀態(tài),位寬 默認值為默認值為1。這里的位是二進制的位。這里的位是二進制的位。 數(shù)據(jù)名數(shù)據(jù)名若一次定義多個數(shù)據(jù),數(shù)據(jù)名之間若一次定義多個數(shù)據(jù),數(shù)

21、據(jù)名之間 用逗號隔開。用逗號隔開。 聲明語句的最后用分號表示語句的結(jié)束。聲明語句的最后用分號表示語句的結(jié)束。 P.47 例例1. 定義數(shù)據(jù)總線寬定義數(shù)據(jù)總線寬8位,地址總線寬位,地址總線寬20位。位。 wire7:0 databus;/ databus寬寬8位位 wire19:0 addrbus;/ addrbus寬寬20位位 或:或: wire8:1 databus; wire20:1 addrbus; P.48 例例2. 多位多位wire 型數(shù)據(jù)可按下面方法使用型數(shù)據(jù)可按下面方法使用 wire7:0 in, out;/定義兩個定義兩個8位位wire型向量型向量 assign out=in;

22、/ assign 就是持續(xù)賦值語句就是持續(xù)賦值語句 例例3. 可只使用多位數(shù)據(jù)中的幾位,但要注意可只使用多位數(shù)據(jù)中的幾位,但要注意 位寬。位寬。 wire7:0 out; wire3:0 in; assign out5:2=in; P.49 說明:說明: 1) wire 型變量常用來表示以型變量常用來表示以assign語句賦值語句賦值 的的組合邏輯組合邏輯信號。信號。 2)輸入)輸入/輸出信號缺省時自動定義為輸出信號缺省時自動定義為wire 型。型。 3)對綜合器而言,)對綜合器而言, wire 型信號的每一位可以型信號的每一位可以 取取0,1,X或或Z中的任意值。中的任意值。 P.50 寄存

23、器是數(shù)據(jù)存儲單元的抽象。寄存器型寄存器是數(shù)據(jù)存儲單元的抽象。寄存器型 數(shù)據(jù)對應的是具有狀態(tài)保持作用的硬件電路,數(shù)據(jù)對應的是具有狀態(tài)保持作用的硬件電路, 如觸發(fā)器、鎖存器等。如觸發(fā)器、鎖存器等。 寄存器型數(shù)據(jù)和連線型數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)和連線型數(shù)據(jù)的區(qū)別: 寄存器型數(shù)據(jù)保持最后一次的賦值。而寄存器型數(shù)據(jù)保持最后一次的賦值。而 連線型數(shù)據(jù)需有持續(xù)的驅(qū)動。連線型數(shù)據(jù)需有持續(xù)的驅(qū)動。 P.51 reg 常用的寄存器型變量常用的寄存器型變量 reg型數(shù)據(jù)的格式:型數(shù)據(jù)的格式: reg n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名,數(shù)據(jù)名2,數(shù)據(jù)名數(shù)據(jù)名n; 例例1. reg a, b; /定義了兩個定義了兩個

24、reg型變量型變量 reg 7:0 qout; /定義定義qout為為8位寬的位寬的reg 型變量型變量 P.52 說明:說明: 1) reg型數(shù)據(jù)常用來表示型數(shù)據(jù)常用來表示“always”模塊內(nèi)的指模塊內(nèi)的指 定信號,常代表觸發(fā)器。定信號,常代表觸發(fā)器。在在“always”模塊內(nèi)被模塊內(nèi)被 賦值的每一個信號都必須定義成賦值的每一個信號都必須定義成reg型型。 2)對于)對于reg型數(shù)據(jù),其賦值語句的作用就如同型數(shù)據(jù),其賦值語句的作用就如同 改變一組觸發(fā)器的存儲單元的值。改變一組觸發(fā)器的存儲單元的值。 3)若)若reg型數(shù)據(jù)未初始化(即缺?。瑒t初始型數(shù)據(jù)未初始化(即缺?。?,則初始 值為不定狀

25、態(tài)。值為不定狀態(tài)。 P.53 在在Verilog HDL中,用中,用parameter來定義來定義 常量,即用它來定義變量的位寬及延時等。常量,即用它來定義變量的位寬及延時等。 格式:格式: ; parameter常用來定義延遲時間和變量寬度。常用來定義延遲時間和變量寬度。 P.54 例:例: parameter e=2,f=9;/定義兩個常數(shù)參數(shù)定義兩個常數(shù)參數(shù) parameter r=5.7; /定義定義r為一個實型參數(shù)為一個實型參數(shù) parameter a_delay=(r+f)/2; /用常數(shù)表達式賦值用常數(shù)表達式賦值 P.55 用用reg類型變量可構(gòu)成寄存器和存儲器類型變量可構(gòu)成寄存

26、器和存儲器 寄存器寄存器 reg 7:0 mybyte; A= mybyte6;/將將mybyte的第的第6位賦值給位賦值給A B= mybyte5:2;/將將mybyte的第的第5,4,3,2 位賦值給位賦值給B P.56 例:例: reg 7:0 a,b; reg 3:0 c; reg d; d=a7 例例2. 存儲器與寄存器的區(qū)別存儲器與寄存器的區(qū)別 reg n-1:0 rega;/一個一個n位的寄存器位的寄存器 reg meman-1:0; /n個一位寄存器組成的存?zhèn)€一位寄存器組成的存 儲器組儲器組 reg 3:0 Amem63:0; P.60 說明:說明: 1)數(shù)組的維數(shù)不能大于)數(shù)

27、組的維數(shù)不能大于2。 2)存儲器屬于寄存器數(shù)組類型。連線數(shù)據(jù)類)存儲器屬于寄存器數(shù)組類型。連線數(shù)據(jù)類 型沒有相應的存儲器類型。型沒有相應的存儲器類型。 3)單個寄存器說明既能夠用于說明寄存器類)單個寄存器說明既能夠用于說明寄存器類 型,也可以用于說明存儲器類型。型,也可以用于說明存儲器類型。 P.61 例:例: parameter ADDR_SIZE = 16 , WORD_SIZE = 8; reg WORD_SIZE:1 RamPar ADDR_SIZE- 1 : 0,DataReg; RamPar存儲器,是存儲器,是16個個8位寄存器數(shù)組;位寄存器數(shù)組; DataReg8位寄存器。位寄存

28、器。 P.62 4)在賦值語句中需要注意如下區(qū)別:)在賦值語句中需要注意如下區(qū)別: 因此在存儲器被賦值時,需要定因此在存儲器被賦值時,需要定 義一個索引。下例說明它們之間的不同。義一個索引。下例說明它們之間的不同。 reg 5:1 Dig; / Dig為為5位寄存器。位寄存器。 . . . Dig = 5b11011; reg BOg5:1; / Bog為為5個個1位寄存器組成的的存儲器組位寄存器組成的的存儲器組 . . . Bog = 5b11011; P.63 有一種存儲器賦值的方法是分別對存儲器中有一種存儲器賦值的方法是分別對存儲器中 的每個字賦值。例如:的每個字賦值。例如: reg 3

29、:0 Xrom 4:1; Xrom1 = 4hA; Xrom2 = 4h8; Xrom3 = 4hF; Xrom4 = 4h2; P.64 Verilog語言參考了語言參考了C語言中大多數(shù)運算語言中大多數(shù)運算 符的語義和句法。但符的語義和句法。但Verilog中沒有增中沒有增1(i+) 和減和減1 (i )運算符。運算符。 1. 算術(shù)運算符算術(shù)運算符 +(一元加和二元加)(一元加和二元加) (一元減和二元減)(一元減和二元減) *(乘)(乘) /(除)(除) %(取模)(取模) P.65 說明說明: 1)兩個整數(shù)相除,結(jié)果值要略去小數(shù)部分,只)兩個整數(shù)相除,結(jié)果值要略去小數(shù)部分,只 取整數(shù)部分

30、;取整數(shù)部分; 2)取模運算時,結(jié)果的符號位采用模運算式里)取模運算時,結(jié)果的符號位采用模運算式里 第一個操作數(shù)的符號位;第一個操作數(shù)的符號位; 模運算表達式模運算表達式 結(jié)果結(jié)果說明說明 10 % 42余數(shù)為余數(shù)為2 12 % 30整數(shù)整數(shù) -11 % 5-1余數(shù)為余數(shù)為-1 P.66 3)在進行算術(shù)運算操作時,如果某個操作數(shù))在進行算術(shù)運算操作時,如果某個操作數(shù) 有不確定的值有不確定的值X或或Z,那么整個結(jié)果為,那么整個結(jié)果為X。 例:例: b10 x1 + b01111 結(jié)果為不確定數(shù)結(jié)果為不確定數(shù)bxxxxx 4)無符號數(shù)和有符號數(shù))無符號數(shù)和有符號數(shù) 若操作數(shù)為寄存器型或連線型,或基

31、數(shù)若操作數(shù)為寄存器型或連線型,或基數(shù) 格式表示形式的整數(shù)則為無符號數(shù);格式表示形式的整數(shù)則為無符號數(shù); 若為整型或?qū)嵭停瑒t可以是有符號數(shù)。若為整型或?qū)嵭?,則可以是有符號數(shù)。 P.67 例:例: reg 5:0 Bar; integer Tab; . . . Bar = -6d12;/寄存器變量寄存器變量Bar的十進制數(shù)為的十進制數(shù)為 52,向量值為,向量值為110100。 Tab = -6d12;/整數(shù)整數(shù)Tab的十進制數(shù)為的十進制數(shù)為-12,位,位 形式為形式為110100。 P.68 5)算術(shù)操作結(jié)果的長度)算術(shù)操作結(jié)果的長度 算術(shù)表達式結(jié)果的長度由最長的操作數(shù)決算術(shù)表達式結(jié)果的長度由最長

32、的操作數(shù)決 定。在賦值語句下,算術(shù)操作結(jié)果的長度由操定。在賦值語句下,算術(shù)操作結(jié)果的長度由操 作符左端目標長度決定。作符左端目標長度決定。 reg 3:0 Arc, Bar, Crt; reg 5:0 Frx; . . . Arc = Bar + Crt; Frx = Bar + Crt; P.69 例:算術(shù)運算符應用的一個例子。例:算術(shù)運算符應用的一個例子。 module arithmetic (a,b,out1,out2,out3, out4,out5) input 2:0 a ,b; output 3:0 out1 ; output 4:0 out3 ; output 2:0 out2

33、, out4,out5 ; reg 3:0 out1 ; reg 4:0 out3 ; reg 2:0 out2 , out4,out5 ; P.70 always (a or b) begin out1=a+b ; out2=a-b ; out3=a*b ; out4=a/b ; out5=a%b ; end endmodule P.71 邏輯運算符有邏輯運算符有3種種: b= reg3:0 start, result; initial bigin start=1; result= (start2); end endmodule P.86 ? : 條件運算符,有三個操作數(shù),與條件運算符,有三

34、個操作數(shù),與C 語言相同。語言相同。 格式:格式: 信號信號=條件條件 ? 表達式表達式1 : 表達式表達式2; 當條件成立時,信號取表達式當條件成立時,信號取表達式1的值,反的值,反 之取表達式之取表達式2的值。的值。 P.87 module add_or_sub(a,b,op,result); parameter ADD=1b0; input 7:0 a,b; input op; output 7:0 result; assign result=(op= ADD)?a+b:a-b; endmodule P.88 這是一個特殊的運算符,這一運算符可以將兩這是一個特殊的運算符,這一運算符可以將

35、兩 個或更多個信號的某些位并接起來進行運算操個或更多個信號的某些位并接起來進行運算操 作。其使用方法是把某些信號的某些位詳細地作。其使用方法是把某些信號的某些位詳細地 列出來,中間用逗號分開,最后用大括號括起列出來,中間用逗號分開,最后用大括號括起 來表示一個整體信號。來表示一個整體信號。 P.89 例:例:wire 7:0 Dbus; wire 11:0 Abus; assign Dbus 7:4 = Dbus 0, Dbus 1, Dbus2, Dbus3;/以反轉(zhuǎn)的順序?qū)⒌投艘苑崔D(zhuǎn)的順序?qū)⒌投?位賦位賦 給高端給高端4位。位。 assign Dbus = Dbus 3:0, Dbus 7

36、:4; /高高4位與低位與低4位交換。位交換。 P.90 由于非定長常數(shù)的長度未知由于非定長常數(shù)的長度未知, 不允許連接不允許連接 非定長常數(shù)。非定長常數(shù)。 例如例如, 下列式子非法:下列式子非法: Dbus,5 /不允許連接操作非定長常數(shù)。不允許連接操作非定長常數(shù)。 P.91 運算符優(yōu)先級排序:運算符優(yōu)先級排序: ! * / % + - = = != = != out=in; /應改為應改為if (!clear) P.102 3)用)用過程塊實現(xiàn)過程塊實現(xiàn)功能功能 v 敏感信號表達式內(nèi)不能包含敏感信號表達式內(nèi)不能包含posedge 與與 negedge 關(guān)鍵字關(guān)鍵字 v 組合邏輯的所有輸入信

37、號都要作為組合邏輯的所有輸入信號都要作為“信號名信號名” 出現(xiàn)在敏感信號表達式中。出現(xiàn)在敏感信號表達式中。 P.103 three_and(f,a,b,c); f; a,b,c ; f; (a or b) f=a /應改為應改為 (a or b or c) P.104 4)用)用過程塊實現(xiàn)過程塊實現(xiàn)功能功能 v 敏感信號表達式內(nèi)可以有敏感信號表達式內(nèi)可以有posedge 與與 negedge 關(guān)鍵字,也可以只有信號名;關(guān)鍵字,也可以只有信號名; v 不要求所有輸入信號都出現(xiàn)在敏感信號列表不要求所有輸入信號都出現(xiàn)在敏感信號列表 的的“信號名信號名”中。中。 P.105 module D_FF(Q

38、,D,CLK); output Q; input D,CLK; reg Q; always (negedge CLK) begin Q = D; end endmodule 例:時鐘下降沿觸發(fā)的例:時鐘下降沿觸發(fā)的D觸發(fā)器觸發(fā)器 P.106 說明:說明: 1)過程語句后面可以是一個敏感事件列過程語句后面可以是一個敏感事件列 表表,該敏感事件列表的作用是用來激活該敏感事件列表的作用是用來激活 過程語句的執(zhí)行;過程語句的執(zhí)行; 2)如果)如果過程塊中的敏感事件列表缺省,過程塊中的敏感事件列表缺省, 則認為觸發(fā)條件始終被滿足,則認為觸發(fā)條件始終被滿足, 過程塊過程塊 將無條件地循環(huán)執(zhí)行下去,直到遇到

39、將無條件地循環(huán)執(zhí)行下去,直到遇到 或或系統(tǒng)任務為止;系統(tǒng)任務為止; 3)進行仿真時,)進行仿真時, 過程塊是從模擬過程塊是從模擬0開始開始 執(zhí)行的,且執(zhí)行的,且語句在仿真過程中是不斷語句在仿真過程中是不斷 重復執(zhí)行的;重復執(zhí)行的; P.107 4)敏感事件列表由一個或多個)敏感事件列表由一個或多個“事件表達式事件表達式” 構(gòu)成,事件表達式說明了啟動塊內(nèi)語句執(zhí)行構(gòu)成,事件表達式說明了啟動塊內(nèi)語句執(zhí)行 時的觸發(fā)條件,時的觸發(fā)條件, 。 Verilog規(guī)定:只要這些事件表達式所代表的規(guī)定:只要這些事件表達式所代表的 多個觸發(fā)條件中有一個成立,就啟動塊內(nèi)語多個觸發(fā)條件中有一個成立,就啟動塊內(nèi)語 句的執(zhí)

40、行。句的執(zhí)行。 5)。 6)過程塊和過程塊和過程塊都不能嵌套使過程塊都不能嵌套使 用。用。 P.108 例:不恰當使用例:不恰當使用always語句而產(chǎn)生仿真死鎖的語句而產(chǎn)生仿真死鎖的 情況。情況。 always begin clk=clk; end always begin #50 clk=clk; end 加上時延控制加上時延控制“#50” 產(chǎn)生一個周期為產(chǎn)生一個周期為100的的 方波信號方波信號 當敏感信號列表缺省當敏感信號列表缺省 時,語句塊將一直執(zhí)時,語句塊將一直執(zhí) 行下去,這就可能在行下去,這就可能在 仿真時產(chǎn)生仿真死鎖仿真時產(chǎn)生仿真死鎖 情況情況 2. initial過程塊過程塊

41、 P.109 過程塊過程塊 P.110 說明:說明: 1) initial語句后面沒有語句后面沒有“敏感信號列表敏感信號列表”; 2) initial過程塊中的語句是從模擬過程塊中的語句是從模擬0開始執(zhí)開始執(zhí) 行,它行,它中只執(zhí)行一次,在執(zhí)行中只執(zhí)行一次,在執(zhí)行 完后,該完后,該initial過程塊就被掛起,不再執(zhí)過程塊就被掛起,不再執(zhí) 行;行; 3) initial過程塊的使用主要是面向功能模擬過程塊的使用主要是面向功能模擬 的,通常的,通常。 P.111 例例1:用:用initial過程語句對測試變量過程語句對測試變量A、B、C 賦值。賦值。 timescale 1ns/100ps mod

42、ule test; reg A,B,C; initial begin A=0;B=1;C=0; #50 A=1;B=0; P.112 #50 A= 0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; end endmodule P.113 例例2:initial過程塊用于對變量和存儲器進行初過程塊用于對變量和存儲器進行初 始化。始化。 module register_initialize(memory); inout areg; inout memory; parameter size=1024, bytesize=8; reg bytesize-1:0 mem

43、ory size-1:0; P.114 initial begin:SEQ-BLK-A integer: index ; for(index=0; indexsize; index=index+1) memoryindex=0; areg=0; end endmodule P.115 module tese reg sa,sb,ze; initial begin sa=0; sb=0; #5 sb=1 #5 sa=1; #5 sb=0; end always (sa or sb) ze=sasb; endmodule P.116 在在Verilog HDL中有兩類語句塊:中有兩類語句塊: 1.

44、 串行塊(串行塊(begin-end) 格式:格式: begin: 塊內(nèi)局部變量說明;塊內(nèi)局部變量說明; 時間控制時間控制1行為語句行為語句1; 時間控制時間控制n行為語句行為語句n; end P.117 說明:說明: 1)串行塊內(nèi)的語句)串行塊內(nèi)的語句執(zhí)行;執(zhí)行; 2)每條語句中的時延值與其前一條語句執(zhí)行的)每條語句中的時延值與其前一條語句執(zhí)行的 仿真時間有關(guān);仿真時間有關(guān); 3)一旦順序語句塊執(zhí)行結(jié)束,跟隨順序語句塊)一旦順序語句塊執(zhí)行結(jié)束,跟隨順序語句塊 過程的下一條語句繼續(xù)執(zhí)行。過程的下一條語句繼續(xù)執(zhí)行。 P.118 例:用例:用begin-end串行塊產(chǎn)生信號波形串行塊產(chǎn)生信號波形

45、timescale 10ns/1ns module wave1; reg wave ; parameter cycle=10 ; initial begin wave=0 ; #(cycle/2) wave=1 ; #(cycle/2) wave=0 ; P.119 #(cycle/2) wave=1 ; #(cycle/2) wave=0 ; #(cycle/2) wave=1 ; #(cycle/2) $finish ; end initial $monitor($time, “wave=%b”, wave); endmodule P.120 2. 并行塊并行塊(fork-join) 格式

46、:格式: fork: 塊內(nèi)局部變量說明;塊內(nèi)局部變量說明; 時間控制時間控制1行為語句行為語句1; 時間控制時間控制n行為語句行為語句n; join P.121 說明:說明: 1)的,即程序流程控制的,即程序流程控制 一進入到該并行塊,塊內(nèi)語句則開始同時一進入到該并行塊,塊內(nèi)語句則開始同時 并行執(zhí)行。并行執(zhí)行。 2)塊內(nèi)每條語句的延遲時間是相對于程序流)塊內(nèi)每條語句的延遲時間是相對于程序流 程控制進入到塊內(nèi)的仿真時間的。程控制進入到塊內(nèi)的仿真時間的。 3)延遲時間用來給賦值語句提供執(zhí)行時序。)延遲時間用來給賦值語句提供執(zhí)行時序。 4)當按時間時序排序在最后的語句執(zhí)行完后,)當按時間時序排序在最

47、后的語句執(zhí)行完后, 程序流程控制跳出該程序塊。程序流程控制跳出該程序塊。 P.122 例:用例:用fork-join并行塊產(chǎn)生信號波形并行塊產(chǎn)生信號波形 timescale 10ns/1ns module wave2; reg wave ; parameter cycle=5 ; initial fork wave=0 ; #(cycle) wave=1 ;/ 5*10ns延遲延遲 #(2*cycle) wave=0 ;/2*5*10ns延遲延遲 P.123 #(3*cycle) wave=1 ; /3*5*10ns延遲延遲 #(4*cycle) wave=0 ; #(5*cycle) wav

48、e=1 ; #(6*cycle) $finish ; join initial $monitor($time, “wave=%b”, wave); endmodule 1. 持續(xù)賦值語句持續(xù)賦值語句(不能出現(xiàn)在過程塊中)(不能出現(xiàn)在過程塊中) P.124 持續(xù)賦值語句只能對連線型變量持續(xù)賦值語句只能對連線型變量wire進進 行賦值,不能對寄存器型變量進行賦值。行賦值,不能對寄存器型變量進行賦值。 格式:格式: 連線型變量類型連線型變量類型 連線型變量位寬連線型變量位寬 連線型變量名連線型變量名 assign #(延時量)(延時量) 連線型變量名連線型變量名=賦值表達式賦值表達式 P.125 的

49、基本格式:的基本格式: #(delay1, delay2, delay3) delay1上升延時;上升延時; delay2下降延時;下降延時; delay3轉(zhuǎn)移到高阻態(tài)延時。轉(zhuǎn)移到高阻態(tài)延時。 如果如果“延時量延時量”這項缺省,默認為這項缺省,默認為0延時。延時。 P.126 例:例: module and_cont_assignment(z,x,y); input 3:0 x,y; output 3:0z; wire 3:0z,x,y; assign #(1.5,1.0,2.0) z=x endmodule P.127 1)標量連線型)標量連線型 wire a,b; assign a=b;

50、2)向量連線型)向量連線型 wire 7:0 a,b; assign a=b; 3)向量連線型變量中的某一位)向量連線型變量中的某一位 wire 7:0 a,b; assign a3=b3; P.128 4)向量連線型變量中的某幾位)向量連線型變量中的某幾位 wire 7:0 a,b; assign a3:2=b1:0; 5)上面幾種類型的任意拼接運算)上面幾種類型的任意拼接運算 wire a, c; wire1:0 b; assign a,c=b; P.129 說明:說明: 1)持續(xù)賦值用來描述組合邏輯。)持續(xù)賦值用來描述組合邏輯。 2)持續(xù)賦值語句驅(qū)動連線型變量,輸入操作)持續(xù)賦值語句驅(qū)動

51、連線型變量,輸入操作 數(shù)的值一發(fā)生變化,就重新計算并更新它數(shù)的值一發(fā)生變化,就重新計算并更新它 所驅(qū)動的變量。所驅(qū)動的變量。 3)連線型變量沒有數(shù)據(jù)保持能力。)連線型變量沒有數(shù)據(jù)保持能力。 4)若一個連線型變量沒有得到任何連續(xù)驅(qū)動,)若一個連線型變量沒有得到任何連續(xù)驅(qū)動, 則它的取值將為不定態(tài)則它的取值將為不定態(tài)“x”。 P.130 5)在仿真時,只要右端賦值表達式內(nèi)的任一)在仿真時,只要右端賦值表達式內(nèi)的任一 操作數(shù)發(fā)生變化,就會立即觸發(fā)對被賦值操作數(shù)發(fā)生變化,就會立即觸發(fā)對被賦值 連線型變量的更新操作。連線型變量的更新操作。 6)如果持續(xù)賦值語句帶有延時,則在仿真時只)如果持續(xù)賦值語句帶有

52、延時,則在仿真時只 要右端賦值表達式中的任一信號發(fā)生變化,要右端賦值表達式中的任一信號發(fā)生變化, 都將立即對賦值表達式進行重新計算,然后都將立即對賦值表達式進行重新計算,然后 進入延時等待狀態(tài),待指定延時過去后再進進入延時等待狀態(tài),待指定延時過去后再進 行賦值。行賦值。 P.131 例:用持續(xù)賦值語句實現(xiàn)例:用持續(xù)賦值語句實現(xiàn)4位全加器。位全加器。 adder_4(a,b,ci,sum,co); 3:0 a,b; ci; 3:0 sum; co; co,sum=a+b+ci; 2. 過程賦值語句過程賦值語句 P.132 過程賦值是在過程賦值是在always和和initial語句內(nèi)的賦值,語句內(nèi)

53、的賦值, 。 過程賦值語句的分類過程賦值語句的分類 阻塞型賦值阻塞型賦值 非阻塞型賦值非阻塞型賦值 P.133 格式:格式: = 阻塞型賦值阻塞型賦值 = 非阻塞型賦值非阻塞型賦值 P.134 1)非阻塞型賦值方式(如)非阻塞型賦值方式(如b=a;) 非阻塞賦值在整個過程塊結(jié)束時才完成賦值操非阻塞賦值在整個過程塊結(jié)束時才完成賦值操 作,即作,即b的值并不是立即就改變的。的值并不是立即就改變的。 P.135 non_block(c,b,a,clk); c,b; clk,a; c,b; ( clk) b=a; c=b; 例例1:非阻塞賦值:非阻塞賦值 P.136 P.137 2)阻塞賦值方式(如)

54、阻塞賦值方式(如b=a;) 阻塞賦值在該語句結(jié)束時就立即完成賦值阻塞賦值在該語句結(jié)束時就立即完成賦值 操作,即操作,即b的值在該條語句結(jié)束后立即改變,如的值在該條語句結(jié)束后立即改變,如 果在一個語句塊中有多條阻塞賦值語句,則前果在一個語句塊中有多條阻塞賦值語句,則前 面賦值語句沒有完成之前,后面賦值語句不能面賦值語句沒有完成之前,后面賦值語句不能 被執(zhí)行,仿佛被阻塞一樣。被執(zhí)行,仿佛被阻塞一樣。 P.138 block(c,b,a,clk); c,b; clk,a; c,b; ( clk) b=a; c=b; 例例2:阻塞賦值:阻塞賦值 P.139 P.14 0 高級程序語句高級程序語句 條件

55、分支語句條件分支語句 循環(huán)控制語句循環(huán)控制語句 if-else條件分支條件分支 case條件分支條件分支 forever repeat while for 1. if-else P.141 Verilog HDL語言提供了語言提供了3種形式的種形式的if語句:語句: 1) if(表達式)(表達式) 語句語句1; 2) if(表達式)(表達式) 語句語句1; else 語句語句2; 3)if(表達式(表達式1) 語句語句1; else if(表達式(表達式2) 語句語句2; else if(表達式(表達式3) 語句語句3; else if(表達式(表達式n) 語句語句n; else 語句語句n+

56、1; P.142 說明:說明: 1)3種形式的種形式的if語句在語句在if后面都有后面都有“表達式表達式”, 一般為邏輯表達式或關(guān)系表達式。系統(tǒng)對表一般為邏輯表達式或關(guān)系表達式。系統(tǒng)對表 達式的值進行判斷,達式的值進行判斷, ;若為;若為1,按,按“真真”處理,執(zhí)行指定語處理,執(zhí)行指定語 句。句。 2)在)在if和和else后面可以包含單個或多個語句,后面可以包含單個或多個語句, 多句時用多句時用“begin-end”塊語句括起來。塊語句括起來。 3)在)在if語句嵌套使用時,要注意語句嵌套使用時,要注意if與與else的配對的配對 關(guān)系。關(guān)系。 P.143 例例1:module sel-fr

57、om-three(q,sela,selb,a,b,c); input sela,selb,a,b,c; output q; reg q; always (sela or selb or a or b or c); begin if(sela) q=a; else if(selb) q=b; else q=c; end endmodule P.144 例例2: module count60(qout,cout,data,load,cin, reset,clk); input 7:0 data; input load,cin, reset, clk; output 7:0 qout; output

58、 cout; reg 7:0 qout; always (posedge clk); begin if (reset) qout=0; else if (load) qout=data; P.145 else if (cin) begin if (qout3:0=9) begin qout3:0=0; if (qout7:4=5) qout7:4=0; else qout7:4=qout7:4+1; end else qout3:0200) FOREVER_PART; #25 clk=clk; 2. repeat語句語句 P.161 功能:該循環(huán)語句內(nèi)的循環(huán)體部分被重復執(zhí)行功能:該循環(huán)語句內(nèi)的

59、循環(huán)體部分被重復執(zhí)行 指定的次數(shù)。指定的次數(shù)。 例例1 1:用:用repeat循環(huán)語句來實現(xiàn)循環(huán)移位循環(huán)語句來實現(xiàn)循環(huán)移位 P.162 drift (data, num, ctrl); 16: 1 data; 4: 1 num; ctrl; 16: 1 data; tmp; (ctrl) (ctrl=1) P.163 (num) tmp=data16; data=data15:0, tmp; 例例2:用:用repeat實現(xiàn)實現(xiàn)8位二進制數(shù)的乘法位二進制數(shù)的乘法 P.164 mult_repeat(outcome,a,b); size=8; size:1 a,b; 2*size:1 outcom

60、e; 2*size:1 temp_a,outcome; size:1 temp_b; (a or b) outcome=0; P.165 temp_a=a; temp_b=b; (size)/ size為循環(huán)次數(shù)為循環(huán)次數(shù) (temp_b1) outcome=outcome+temp_a; temp_a=temp_a1;/操作數(shù)操作數(shù)b右移一位右移一位 3. while語句語句 P.166 功能:條件循環(huán)。功能:條件循環(huán)。 4. for語句語句 P.167 功能:條件循環(huán)。只有在指定的條件表達式成立功能:條件循環(huán)。只有在指定的條件表達式成立 時才進行循環(huán)。時才進行循環(huán)。 進程進程 任務任務 函

溫馨提示

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

評論

0/150

提交評論