第6章Verilog設(shè)計進階_第1頁
第6章Verilog設(shè)計進階_第2頁
第6章Verilog設(shè)計進階_第3頁
第6章Verilog設(shè)計進階_第4頁
第6章Verilog設(shè)計進階_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第6章章 Verilog設(shè)計進階設(shè)計進階 學(xué)習(xí)目標(biāo)及重點學(xué)習(xí)目標(biāo)及重點1 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo) 1)掌握)掌握verilog行為語句的基本格式、執(zhí)行機制;行為語句的基本格式、執(zhí)行機制; 2)掌握使用)掌握使用verilog行為語句編寫簡單組合邏輯電路、行為語句編寫簡單組合邏輯電路、 時序邏輯電路的方法;時序邏輯電路的方法; 3)了解仿真激勵文件的基本寫法)了解仿真激勵文件的基本寫法; 4) 進一步理解程序與硬件之間的關(guān)系。進一步理解程序與硬件之間的關(guān)系。2 學(xué)習(xí)重點學(xué)習(xí)重點 1)算法的基本概念;)算法的基本概念; 2)算法與)算法與verilog語言的結(jié)合使用;語言的結(jié)合使用; 3)可綜合的)可

2、綜合的verilog行為語句;行為語句; 主要內(nèi)容主要內(nèi)容 算法的基本概念算法的基本概念1.什么是算法?什么是算法? 并不是需要計算的場合才有算法。并不是需要計算的場合才有算法。 算法,簡單的說,就是算法,簡單的說,就是2.算法與算法與verilog程序的關(guān)系程序的關(guān)系 3.算法的多樣性算法的多樣性 4.算法的實現(xiàn)算法的實現(xiàn) 1) 算法的設(shè)計不能天馬行空算法的設(shè)計不能天馬行空,要具有可實現(xiàn)性;要具有可實現(xiàn)性; 2) 可實現(xiàn)性的基礎(chǔ):可實現(xiàn)性的基礎(chǔ): 基于何種工具實現(xiàn)算法,那么算法的特征基于何種工具實現(xiàn)算法,那么算法的特征 要與這種工具本身的特征相契合。要與這種工具本身的特征相契合。 我們所使用

3、的工具:我們所使用的工具:verilog編程語言。編程語言。 算法的基本概念算法的基本概念設(shè)計算法設(shè)計算法分析算法的行為特征分析算法的行為特征利用利用verilog語言實現(xiàn)語言實現(xiàn)掌握掌握verilog行為語句的運行機理行為語句的運行機理分析問題分析問題Verilog HDL行為語句行為語句類別類別語句語句可綜合性可綜合性過程語句過程語句initial always塊語句塊語句串行塊串行塊begin-end并行塊并行塊fork-join 賦值語句賦值語句持續(xù)賦值持續(xù)賦值assign過程賦過程賦值值=、=條件語句條件語句if-elsecase 循環(huán)語句循環(huán)語句forrepeat while fo

4、rever 編譯向?qū)дZ句編譯向?qū)дZ句defineincludeifdef, else, endif注意:注意:1.所有的語句都可以用于仿真;所有的語句都可以用于仿真; 2.不同綜合器支持的不同綜合器支持的verilog不同,具體應(yīng)參考軟件的幫助文檔。不同,具體應(yīng)參考軟件的幫助文檔。 6.1 過程語句過程語句 initial 用于仿真用于仿真過程語句過程語句 always 用于綜合及仿真用于綜合及仿真 always過程語句過程語句1. always語句的使用模板語句的使用模板 always () begin /過程賦值過程賦值 /if-else,case,casex,casez選擇語句選擇語句

5、/while,repeat,for循環(huán)循環(huán) /task,function調(diào)用調(diào)用 end 2. 2.always語句的運行機制語句的運行機制 c)若不斷滿足,)若不斷滿足,則塊內(nèi)語句不斷的循環(huán)執(zhí)行;則塊內(nèi)語句不斷的循環(huán)執(zhí)行; d)同一程序模塊()同一程序模塊(module)中可以有多個)中可以有多個always塊,各個塊,各個always塊之間是塊之間是并并 行執(zhí)行行執(zhí)行的關(guān)系。的關(guān)系。 塊內(nèi)語句塊內(nèi)語句 always過程語句過程語句3.3.敏感信號表達式的寫法敏感信號表達式的寫法 1 1的敏感信號表達式的敏感信號表達式 a) a) 寫法寫法 例:例: ( (a) a) / /單信號敏感單信號

6、敏感 ( (a or b or c) /a or b or c) /多個信號敏感,信號間用關(guān)鍵字多個信號敏感,信號間用關(guān)鍵字oror隔開隔開 b) b) 運行機制運行機制 只要表達式中的只要表達式中的發(fā)生變化,則執(zhí)行一次發(fā)生變化,則執(zhí)行一次塊內(nèi)語塊內(nèi)語句。句。 例:例: ( (a) a) / /當(dāng)信號當(dāng)信號a a的值發(fā)生改變,運行塊內(nèi)程序的值發(fā)生改變,運行塊內(nèi)程序 ( (a or b or c) / a a or b or c) / a 、 b b 、 c c中任意一個信號變化,運行中任意一個信號變化,運行 塊內(nèi)程序塊內(nèi)程序 c) c) d d) 注意:注意:敏感信號表達式中應(yīng)列出影響塊內(nèi)取值

7、的敏感信號表達式中應(yīng)列出影響塊內(nèi)取值的。 always過程語句過程語句 2 2) “邊沿敏感邊沿敏感”的敏感信號表達式的敏感信號表達式 a)a)寫法及運行機制寫法及運行機制 ( (posedge clock) /posedge clock) /單信號敏感,單信號敏感,當(dāng)當(dāng)clock clock 的上升沿到來時執(zhí)行塊內(nèi)語的上升沿到來時執(zhí)行塊內(nèi)語句句 ( (negedge clock) /negedge clock) /單信號敏感,單信號敏感,當(dāng)當(dāng)clock clock 的下降沿到來時執(zhí)行塊內(nèi)語的下降沿到來時執(zhí)行塊內(nèi)語句句 ( (posedge clk or negedge reset) /pos

8、edge clk or negedge reset) /多信號敏感,信號間用關(guān)鍵字多信號敏感,信號間用關(guān)鍵字oror隔開隔開 / /當(dāng)當(dāng)clkclk的上升沿到來或的上升沿到來或resetreset信號的下降沿到來,執(zhí)行塊內(nèi)語句信號的下降沿到來,執(zhí)行塊內(nèi)語句 b b)用途)用途 常用于描述時序電路。常用于描述時序電路。 c c)注意)注意 例:例: always always ( posedge clockposedge clock or clror clr) / /不建議這樣使用不建議這樣使用 always過程語句過程語句4 .初識用初識用always語句實現(xiàn)組合電路與時序電路語句實現(xiàn)組合電路

9、與時序電路 1)組合電路組合電路 module adder4(cout,sum,ina,inb,cin); output3:0 sum; output cout; input3:0 ina,inb; input cin; reg3:0 sum; reg cout; always(ina or inb or cin) begin cout,sum=ina+inb+cin; endendmodule在在always塊內(nèi)被賦值的變量必須塊內(nèi)被賦值的變量必須定義為定義為reg型型敏感信號列表,電平敏感,列敏感信號列表,電平敏感,列出所有影響塊內(nèi)輸出的信號出所有影響塊內(nèi)輸出的信號 always過程語句過

10、程語句2)時序邏輯:)時序邏輯:module count4(out,reset,clk);output3:0 out;input reset,clk;reg3:0 out;always (posedge clk)begin if(reset) out=0; /同步復(fù)位同步復(fù)位 else out=out+1; /計數(shù)計數(shù)endendmodule在過程塊內(nèi)被賦值的變量必在過程塊內(nèi)被賦值的變量必須定義為須定義為reg型型敏感信號列表,上升沿敏敏感信號列表,上升沿敏感感always (posedge clk or posedge reset )begin if(reset) out=0; /異步復(fù)位異

11、步復(fù)位 else out=out+1; /計數(shù)計數(shù)endendmodule always過程語句過程語句3)組合邏輯與時序邏輯的綜合結(jié)果類比)組合邏輯與時序邏輯的綜合結(jié)果類比4位全加器位全加器RTL級綜合的結(jié)果級綜合的結(jié)果 4位計數(shù)器位計數(shù)器RTL級綜合的結(jié)果級綜合的結(jié)果 4位計數(shù)器位計數(shù)器RTL級綜合的結(jié)果級綜合的結(jié)果 同步控制信號、異步控制信號的設(shè)計及分析:同步控制信號、異步控制信號的設(shè)計及分析:1)軟件設(shè)計)軟件設(shè)計 信號不出現(xiàn)在敏感信號列表中;信號不出現(xiàn)在敏感信號列表中; always過程語句過程語句 always過程語句過程語句5.進一步認識用進一步認識用always語句設(shè)計組合電路

12、及時序電路語句設(shè)計組合電路及時序電路 module mux4_1(out,sel); output out; input in0,in1,in2,in3; input1:0 sel; reg out; always (in0 or in1 or in2 or in3 or sel) /敏感信號列表敏感信號列表 case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out=in2; 2b11: out=in3; default: out=2bx; endcase endmodule always過程語句過程語句2)時序電路設(shè)計:同步清零、同步置數(shù)的)時序電路

13、設(shè)計:同步清零、同步置數(shù)的8位計數(shù)器位計數(shù)器 module count(out,data,load,reset,clk);output7:0 out;input7:0 data;input load,clk,reset;reg7:0 out;always (posedge clk) /clk上升沿觸發(fā)上升沿觸發(fā) begin if(!reset) out=8h00; /同步清同步清0,低電平有效,低電平有效 else if(load) out=dat; /同步預(yù)置同步預(yù)置,高電平有效高電平有效 else out=out+1; /計數(shù)計數(shù) endendmodule always過程語句過程語句 進

14、階進階-用用always語句實現(xiàn)較復(fù)雜的組合邏輯電路語句實現(xiàn)較復(fù)雜的組合邏輯電路 算術(shù)邏輯單元算術(shù)邏輯單元 1)真值表)真值表 輸入輸入 輸出輸出 opcode2:0 a b out 0 a+b 1 a-b 2 a&b 3 a|b 4 a 其他其他 xxxx always過程語句過程語句 2)代碼)代碼 module alu(out,opcode,a,b); input2:0 opcode; /3位的指令碼位的指令碼 input7:0 a,b; /8位的操作數(shù)位的操作數(shù) output7:0 out; /8位計算機結(jié)果位計算機結(jié)果 reg 7:0 out; always(opcode or a

15、or b)/電平敏感的電平敏感的always塊塊 begin case(opcode) 3d0:out=a+b;/指令碼指令碼00-加操作加操作 3d1:out=a-b; /指令碼指令碼01-減操作減操作 3d2:out=a&b;/指令碼指令碼02-位與位與 3d3:out=a|b; /指令碼指令碼03-位或位或 3d4:out=a; /指令碼指令碼04-按位取反按位取反 default:out=8hxx;/沒有有效指令輸出任意態(tài)沒有有效指令輸出任意態(tài) endcase end endmodule initial過程語句過程語句1.initial語句的格式語句的格式 initial begin

16、語句語句1; 語句語句2; . end2.使用規(guī)則使用規(guī)則 a)只能在仿真文件中使用)只能在仿真文件中使用; b)在)在同一程序模塊(同一程序模塊(module)中,可以有多個)中,可以有多個initial塊,它們都塊,它們都 是并行運行的。是并行運行的。3. 4. 用途用途 a) 仿真文件中對變量賦初值;仿真文件中對變量賦初值; b) 生成電路仿真測試的激勵波形。生成電路仿真測試的激勵波形。 initial過程語句過程語句 例例1:用:用initial語句賦初值語句賦初值 initial begin areg=0; /初始化寄存器初始化寄存器 areg for(index=0; indexs

17、ize; index=index+1 ) memoryindex=0; /初始化一個存儲器初始化一個存儲器 endInterger index;parameter size=64;reg7:0 memorysize:0; initial過程語句過程語句例例2:用:用initial語句生成激勵波形語句生成激勵波形 注意:用注意:用initial語句生成激勵波形只在語句生成激勵波形只在 一段時間內(nèi)有效,不是循環(huán)往復(fù)的一段時間內(nèi)有效,不是循環(huán)往復(fù)的 timescale 1ns/1ns module test; reg A,B,C; (調(diào)用被仿真的程序模塊)(調(diào)用被仿真的程序模塊) initial b

18、egin A=0;B=1;C=0; #50 A=1;B=0; #50 A=0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; end endmodule在過程語句被在過程語句被賦值的變量必賦值的變量必須定義為須定義為reg型型調(diào)用系統(tǒng)函數(shù),顯調(diào)用系統(tǒng)函數(shù),顯示仿真結(jié)果或控制示仿真結(jié)果或控制仿真過程。仿真過程。6.2 塊語句塊語句1.定義定義 塊語句是由塊標(biāo)志符塊語句是由塊標(biāo)志符begin-end或或fork-join界定界定的一組語句,的一組語句,當(dāng)塊語句只包含一條語句時,塊標(biāo)志符當(dāng)塊語句只包含一條語句時,塊標(biāo)志符可以缺省。可以缺省。2.可綜合性可綜合性 beg

19、in-end-可用于綜合以及仿真可用于綜合以及仿真 fork-join-只能用于仿真只能用于仿真3.運行機制運行機制 begin-end-串行方式順序執(zhí)行串行方式順序執(zhí)行 在塊內(nèi)使用非阻塞型賦值語句在塊內(nèi)使用非阻塞型賦值語句 時為例外。時為例外。 fork-join-并行執(zhí)行并行執(zhí)行6.2 塊語句塊語句timescale 1ns/1ns module test; reg A,B,C; initial begin A=0;B=1;C=0 #50 A=1;B=0; #50 A=0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; end end endmoduleti

20、mescale 1ns/1ns module test; reg A,B,C; initial fork A=0;B=1;C=0 #50 A=1;B=0; #100 A=0;C=1; #150 B=1; #200 B=0;C=0; #250 $finish; join end endmodulebegin-end語句與語句與fork-join語句用于仿真時的區(qū)別:語句用于仿真時的區(qū)別:每條語句前面的延時都是相對于前一條語句執(zhí)行結(jié)束的時間。每條語句前面的延時都是相對于前一條語句執(zhí)行結(jié)束的時間。每條語句前面的延時都是相對于該并行塊的起始時間。每條語句前面的延時都是相對于該并行塊的起始時間。所有后續(xù)

21、語句所有后續(xù)語句的起始點的起始點第二句的起始點第二句的起始點第三句的起始點第三句的起始點 6.3 賦值語句賦值語句1、持續(xù)賦值語句、持續(xù)賦值語句-assign 1)運行機制)運行機制 主要用于對主要用于對wire型變量的賦值。型變量的賦值。 例:例:assign c=a&b; 在上面的賦值中,在上面的賦值中,a、b、c三個變量皆為三個變量皆為wire型變量,型變量,a和和b 信號的任何變化,都將隨時反映到信號的任何變化,都將隨時反映到c上來。上來。 2)用途:用以實現(xiàn)較簡單的組合邏輯電路。)用途:用以實現(xiàn)較簡單的組合邏輯電路。賦值語句賦值語句 持續(xù)持續(xù)賦值語句賦值語句assign-可綜合可綜合

22、過程過程賦值語句賦值語句=、=-可綜合可綜合 6.3 賦值語句賦值語句 用用assign語句實現(xiàn)語句實現(xiàn)4選選1的數(shù)據(jù)選擇器:的數(shù)據(jù)選擇器: 真值表:真值表: 輸入信號輸入信號輸出輸出 sel1sel0 in0in1in2in3out 00in0in0 01in1in1 10in2in2 11in3in3assign out=(se1)&(sel0)&in0+(se1)&sel0&in1+ se1&(sel0)&in2+se1&sel0&in3; 2、過程賦值語句、過程賦值語句- =、= 過程賦值語句多用于對過程賦值語句多用于對reg型變量型變量進行賦值(進行賦值(中變量的賦值方式)中變量的賦

23、值方式)。 過程賦值有過程賦值有和和兩種方式。兩種方式。(1)非阻塞()非阻塞(non_blocking)賦值方式賦值方式 賦值符號為賦值符號為“=”, 如:如:b= a; 并行賦值,幾條賦值語句的賦值是在并行賦值,幾條賦值語句的賦值是在完成的。完成的。(2)阻塞()阻塞(blocking)賦值方式賦值方式 賦值符號為賦值符號為“=”, 如:如:b= a; 串行賦值,幾條語句的賦值有先后順序。串行賦值,幾條語句的賦值有先后順序。 如果在一個塊語句中,有多條阻塞賦值語句,那么在前面的賦值語句沒有完如果在一個塊語句中,有多條阻塞賦值語句,那么在前面的賦值語句沒有完成成 之前,后面的語句就不能被執(zhí)行

24、,仿佛被阻塞了(之前,后面的語句就不能被執(zhí)行,仿佛被阻塞了(blocking)一樣,因此稱為阻塞一樣,因此稱為阻塞 賦值方式。賦值方式。 6.3 賦值語句賦值語句阻塞賦值與非阻塞賦值阻塞賦值與非阻塞賦值 非阻塞賦值非阻塞賦值module non_block(c,b,a,clk);output c,b; input clk,a;reg c,b;always (posedge clk) begin b=a; c=b; endendmodule阻塞賦值阻塞賦值module block(c,b,a,clk);output c,b;input clk,a;reg c,b;always (posedge

25、clk) begin b=a; c=b; endendmodule a=0 b=1 b=a 結(jié)果結(jié)果 b=0 c=b 結(jié)果結(jié)果 c=1 a=0 b=1 b=a 結(jié)果結(jié)果 b=0 c=b 結(jié)果結(jié)果 c=0阻塞賦值與非阻塞賦值阻塞賦值與非阻塞賦值非阻塞賦值仿真波形圖非阻塞賦值仿真波形圖 阻塞賦值與非阻塞賦值阻塞賦值與非阻塞賦值非阻塞賦值綜合結(jié)果非阻塞賦值綜合結(jié)果阻塞賦值綜合結(jié)果阻塞賦值綜合結(jié)果6.4 條件語句條件語句1.分類分類 if-else語句語句 條件語句條件語句 case語句語句2)作用)作用 進行多選進行多選1或多選或多選n的操作。的操作。 if-else 、case -多選多選1 ca

26、sex、casez-多選多選n6.4 條件語句條件語句3. if-else語句語句 1)格式)格式(1)if(表達式)表達式) begin 語句語句1; 語句語句2; end (2)if(表達式)表達式) begin 語句語句1; 語句語句2; end else begin 語句語句1; 語句語句2; end(3)if(表達式表達式1) begin 語句語句1; 語句語句2; end else if(表達式表達式2) begin 語句語句1; 語句語句2; end else if(表達式表達式n) begin 語句語句1; 語句語句2; end else begin 語句語句1; 語句語句2;

27、 end 6.4 條件語句條件語句2) 用法用法 a) “表達式表達式”中一般為邏輯表達式或關(guān)系表達式;中一般為邏輯表達式或關(guān)系表達式; 邏輯表達式:邏輯表達式:a&b; 關(guān)系表達式關(guān)系表達式 :a=b; b)“表達式表達式”邏輯判斷:邏輯判斷: 不執(zhí)行后面的語句不執(zhí)行后面的語句 1-“真真” 執(zhí)行后面的語句執(zhí)行后面的語句 c) 允許一定形式的表達式簡寫方式允許一定形式的表達式簡寫方式 if(expression) 等同于等同于 if(expression=1) if(!expression) 等同于等同于if(expression!=1) d) if-else 語句允許嵌套。語句允許嵌套。

28、f ) if-else 各個分支的執(zhí)行和判斷是由先后順序的。前面的各個分支的執(zhí)行和判斷是由先后順序的。前面的 分支滿足了,就執(zhí)行相應(yīng)的操作,后面的分支就不再執(zhí)行分支滿足了,就執(zhí)行相應(yīng)的操作,后面的分支就不再執(zhí)行 了。了。6.4 條件語句條件語句例:模為例:模為60的的8421BCD碼加法計數(shù)器碼加法計數(shù)器,帶同步清零和同步預(yù)置帶同步清零和同步預(yù)置 數(shù)功能數(shù)功能 module count60(qout,cout,data,load,cin,reset,clk); input load,cin,reset,clk; input7:0 data; output7:0 qout; output cou

29、t; reg7:0 qout; always(posedge clk) begin if(reset) qout=0; /同步復(fù)位同步復(fù)位 else if(load) qout=data; /同步置數(shù)同步置數(shù) else if(cin) begin if(qout3:0=9) /低位是否為低位是否為9 begin /低位為低位為9,高位為,高位為5,即計數(shù)到,即計數(shù)到59,則清零,則清零(即計數(shù)值歸零處理即計數(shù)值歸零處理) qout7:0=0; else /低位為低位為9,高位不為,高位不為5,即計數(shù)小于,即計數(shù)小于59,則低位清零,高位加,則低位清零,高位加1 (即進位處理即進位處理) beg

30、in qout3:0=0; qout7:4=qout7:4+1; end end else qout3:0=qout3:0+1; end end assign cout=(qout=8h59)&cin)?1:0; /BCD 碼為碼為59,同時進位位為,同時進位位為1,則產(chǎn)生進位輸出信號,則產(chǎn)生進位輸出信號 endmodule1)格式)格式 case (控制表達式)控制表達式) 分支表達式分支表達式1: begin 語句語句1; 語句語句2; end 分支表達式分支表達式2: begin 語句語句1; 語句語句2; end 分支表達式分支表達式n: begin 語句語句1; 語句語句2; end

31、 default: begin 語句語句1; 語句語句2; end endcase2) 用法用法 a) 控制表達式:表達的是電路的控制條件;控制表達式:表達的是電路的控制條件; 分支表達式:表示的是控制表達式的某個取值的分支表達式:表示的是控制表達式的某個取值的 情況,因此是一個情況,因此是一個 常量,也稱常量,也稱 b) 運行機理運行機理 : 當(dāng)控制表達式的值與某一個常量表達式相同時,當(dāng)控制表達式的值與某一個常量表達式相同時, 執(zhí)行這個常量表達式后面的語句;執(zhí)行這個常量表達式后面的語句; 若一個都不符合,就執(zhí)行若一個都不符合,就執(zhí)行default語句后的語句。語句后的語句。 c) defau

32、lt項可有可無,但一條項可有可無,但一條case語句中只允許語句中只允許 一條一條default語句;語句; 建議:若常量表達式不能包含控制表達式的所建議:若常量表達式不能包含控制表達式的所 有取值的情況,則加上有取值的情況,則加上default語句。語句。 d)每一個分支表達式的值必須互不相同,否則會出)每一個分支表達式的值必須互不相同,否則會出 現(xiàn)問題,也就是說,對于同一種控制條件,會出現(xiàn)問題,也就是說,對于同一種控制條件,會出 現(xiàn)兩種以上的執(zhí)行方案,產(chǎn)生矛盾;現(xiàn)兩種以上的執(zhí)行方案,產(chǎn)生矛盾; 比如比如quartusII,如果后出現(xiàn)的分支條件與前面相,如果后出現(xiàn)的分支條件與前面相 同(同(

33、case結(jié)構(gòu)),則這個分支會被綜合器優(yōu)化掉。結(jié)構(gòu)),則這個分支會被綜合器優(yōu)化掉。 如果后出現(xiàn)的分支條件與前面有重疊(如果后出現(xiàn)的分支條件與前面有重疊(casex、 casez),則綜合成有優(yōu)先級的電路,寫在前面的),則綜合成有優(yōu)先級的電路,寫在前面的 分支優(yōu)先級高。分支優(yōu)先級高。 e)控制表達式和分支表達式之間的比較是一種全等比)控制表達式和分支表達式之間的比較是一種全等比 較,因此,必須每一位都完全相同,才認為相同,較,因此,必須每一位都完全相同,才認為相同, 才能滿足條件去執(zhí)行下面的語句;才能滿足條件去執(zhí)行下面的語句; 即即1位的有效狀態(tài)有四個:位的有效狀態(tài)有四個:0、1、x、zcase語

34、句語句BCD碼碼七段數(shù)碼管顯示譯碼器七段數(shù)碼管顯示譯碼器2)真值表:)真值表: 輸入輸入 輸出輸出 indec3:0 (輸入控制信號)(輸入控制信號) decodeout(七段數(shù)碼管驅(qū)動信號)(七段數(shù)碼管驅(qū)動信號) 0 顯示顯示0 1 顯示顯示1 2 顯示顯示2 3 顯示顯示3 4 顯示顯示4 5 顯示顯示5 6 顯示顯示6 7 顯示顯示7 8 顯示顯示8 9 顯示顯示9 其他其他 xx1)分析:)分析: 最簡單的實現(xiàn)方法?最簡單的實現(xiàn)方法? 為何要用輸入控制信號控制?為何要用輸入控制信號控制? 輸入控制信號如何實現(xiàn)?輸入控制信號如何實現(xiàn)?BCD碼碼七段數(shù)碼管顯示譯碼器七段數(shù)碼管顯示譯碼器mo

35、dule decode4_7(decodeout,indec);output6:0 decodeout;input3:0 indec; /輸入控制信號輸入控制信號10種狀態(tài)需要種狀態(tài)需要4位位reg6:0 decodeout; /從從6-0位分別代表數(shù)碼管的位分別代表數(shù)碼管的a-g(該順序由(該順序由 硬件管腳定義決定)硬件管腳定義決定)always (indec) begin case(indec) /用用case語句進行譯碼語句進行譯碼 4d0:decodeout=7b1111110; 4d1:decodeout=7b0110000; 4d2:decodeout=7b1101101; 4d

36、3:decodeout=7b1111001; 4d4:decodeout=7b0110011; 4d5:decodeout=7b1011011; 4d6:decodeout=7b1011111; 4d7:decodeout=7b1110000; 4d8:decodeout=7b1111111; 4d9:decodeout=7b1111011; default: decodeout=7bx; endcase endendmodule casex 、 casez語句語句1)格式:)格式:casez (控制表達式)控制表達式) 分支表達式分支表達式1: begin 語句語句1; 語句語句2; end

37、 分支表達式分支表達式2: begin 語句語句1; 語句語句2; end 分支表達式分支表達式n: begin 語句語句1; 語句語句 end default: begin 語句語句1; 語句語句2; end endcasecasex (控制表達式)控制表達式) 分支表達式分支表達式1: begin 語句語句1; 語句語句2; end 分支表達式分支表達式2: begin 語句語句1; 語句語句2; end 分支表達式分支表達式n: begin 語句語句1; 語句語句 end default: begin 語句語句1; 語句語句2; end endcase casex 、 casez語句語句

38、2)用法)用法 a)casez: 只要只要某一位或幾位出現(xiàn)某一位或幾位出現(xiàn)Z,則該位不則該位不 參與比較,只考慮其他位比較的結(jié)果;參與比較,只考慮其他位比較的結(jié)果; b)casex: 只要只要某一位或幾位出現(xiàn)某一位或幾位出現(xiàn)X或或Z,則該位則該位 不參與比較,只考慮其他位比較的結(jié)果。不參與比較,只考慮其他位比較的結(jié)果。 例:例:case(a) 2b1x:out=1; /只有只有a=1x,才有,才有out=1 casez(a) 2b1x:out=1; /只有只有a=1x、1z,才有,才有out=1 casex(a) 2b1x:out=1; /只有只有a=11、10、1x、1z,才有,才有out=

39、1 條件語句使用中的隱含鎖存器的問題條件語句使用中的隱含鎖存器的問題 在使用條件語句時,要盡量列出所有的條件分支。在使用條件語句時,要盡量列出所有的條件分支。如果不行,就要加上如果不行,就要加上else或或default語句來處理多余分支語句來處理多余分支的情況。的情況。 否則,編譯器認為條件不滿足時,會引進一個觸發(fā)否則,編譯器認為條件不滿足時,會引進一個觸發(fā)器保持原值。輸出變量位數(shù)越多,生成的隱含觸發(fā)器越器保持原值。輸出變量位數(shù)越多,生成的隱含觸發(fā)器越多,浪費器件資源。多,浪費器件資源。 例:例: always(al or d) begin if(al)q=d; else q=q; end

40、生成隱含鎖存器生成隱含鎖存器6.5 循環(huán)語句循環(huán)語句 在在Verilog中存在四種類型的循環(huán)語句,用來控制語句的執(zhí)中存在四種類型的循環(huán)語句,用來控制語句的執(zhí)行次數(shù)。這四種語句分別為行次數(shù)。這四種語句分別為:(1)forever:連續(xù)地執(zhí)行語句;多用在連續(xù)地執(zhí)行語句;多用在“initial”塊中,以塊中,以生生 成時鐘等周期性波形。成時鐘等周期性波形。不可綜合不可綜合(2)repeat:連續(xù)執(zhí)行一條語句連續(xù)執(zhí)行一條語句n次。次。不可綜合不可綜合(3)while:執(zhí)行一條語句直到某個條件不滿足。執(zhí)行一條語句直到某個條件不滿足。不可綜合不可綜合(4)for:有條件的循環(huán)語句。有條件的循環(huán)語句。 可綜

41、合可綜合for語句語句1. for語句的使用格式如下(同語句的使用格式如下(同C語言):語言): for(表達式表達式1;表達式;表達式2;表達式;表達式3) beginbegin 語句語句1 1; 語句語句2 2; endend 2.2.執(zhí)行機制執(zhí)行機制 1 1)求解表達式)求解表達式1 1; 注意:表達式注意:表達式1 1只執(zhí)行一次,相當(dāng)于初始化的作用;只執(zhí)行一次,相當(dāng)于初始化的作用; 2 2)求解表達式)求解表達式2 2,若值為,若值為“真(非零)真(非零)”,跳到第,跳到第3)3)步;若為步;若為“假(假(0 0)”, 則循環(huán)結(jié)束,跳到第則循環(huán)結(jié)束,跳到第5)5)步;步; 3 3)若表

42、達式)若表達式2 2值為值為“真(非零)真(非零)”,則執(zhí)行完指定語句后,求解表達式,則執(zhí)行完指定語句后,求解表達式3 3; 4) 4) 轉(zhuǎn)回上面第轉(zhuǎn)回上面第2)2)步繼續(xù)執(zhí)行。步繼續(xù)執(zhí)行。 5 5)跳出)跳出forfor循環(huán),繼續(xù)執(zhí)行下面的語句。循環(huán),繼續(xù)執(zhí)行下面的語句。 for語句語句2)for語句最簡單的應(yīng)用形式語句最簡單的應(yīng)用形式 for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值) beginbegin 執(zhí)行語句;執(zhí)行語句; endend 例: initial begin for(i=0;i4;i=i+1) out = out +1; en

43、d用用for語句描述的七人投票表決器語句描述的七人投票表決器module voter7(pass,vote);output pass;input6:0 vote;integer i; reg pass;always (vote)begin sum=0; for(i=0;i=6;i=i+1) /for語句語句 if(votei) sum=sum+1; if(sum2) pass=1; /若超過若超過4人贊成,則人贊成,則pass=1 else pass=0;endendmodule 用用for語句實現(xiàn)的語句實現(xiàn)的8位乘法器位乘法器module mult_for(outcome,a,b); par

44、ameter size=8; inputsize:1 a,b; /兩個操作數(shù)兩個操作數(shù) output2*size:1 outcome; /結(jié)果結(jié)果 兩個兩個8位數(shù)相乘為位數(shù)相乘為16位位 reg2*size:1 outcome; interger I; always(a or b) begin outcome=0; for(i=1;i=size;i=i+1) if(bi) outcome=outcome+(a(i-1); /循環(huán)移位累加循環(huán)移位累加 endendmodulerepeat語句語句 1) repeat語句的使用格式為:語句的使用格式為: repeat(循環(huán)次數(shù)表達式)循環(huán)次數(shù)表達式

45、) begin 語句語句1; 語句語句2; end 注:若循環(huán)內(nèi)語句只有一條,注:若循環(huán)內(nèi)語句只有一條,begin-end可以省略??梢允÷?。 例:例: initial begin repeat(5) out = out +1; end2)運行機制)運行機制 控制循環(huán)內(nèi)語句執(zhí)行循環(huán)次數(shù)為表達式規(guī)定的次數(shù)??刂蒲h(huán)內(nèi)語句執(zhí)行循環(huán)次數(shù)為表達式規(guī)定的次數(shù)。用用repeat實現(xiàn)實現(xiàn)8位二進制數(shù)的乘法位二進制數(shù)的乘法 module mult_repeat(outcome, a, b); parameter size=8; inputsize:1 a,b; output2*size:1 outcome;

46、reg2*size:1 outcome; always (a or b) begin outcome=0; i=1; /循環(huán)變量初始化循環(huán)變量初始化 repeat(size) /循環(huán)條件,循環(huán)條件,repeat語句,語句,size為循環(huán)次數(shù)為循環(huán)次數(shù) begin if(temp_bi) /如果如果temp_b的最低位為的最低位為1,就執(zhí)行下面語句,就執(zhí)行下面語句 outcome=outcome +a(i-1); i=i+1; end endendmodule while語句語句1)使用格式)使用格式 while(循環(huán)執(zhí)行條件表達式)(循環(huán)執(zhí)行條件表達式) begin 語句語句1; 語句語句2;

47、 end 注:若循環(huán)內(nèi)語句只有一條,注:若循環(huán)內(nèi)語句只有一條,begin-end可以省略??梢允÷浴?) 運行機制運行機制 首先判斷首先判斷循環(huán)執(zhí)行條件表達式循環(huán)執(zhí)行條件表達式的值是否為真,為真則執(zhí)行循環(huán)內(nèi)的的值是否為真,為真則執(zhí)行循環(huán)內(nèi)的 語句;執(zhí)行完后繼續(xù)判斷語句;執(zhí)行完后繼續(xù)判斷循環(huán)執(zhí)行條件表達式循環(huán)執(zhí)行條件表達式的值,為真則執(zhí)行循環(huán)內(nèi)的的值,為真則執(zhí)行循環(huán)內(nèi)的 語句;如此循環(huán)往復(fù),直到循環(huán)執(zhí)行條件表達式語句;如此循環(huán)往復(fù),直到循環(huán)執(zhí)行條件表達式的值不為真為止,的值不為真為止,2)例:)例: initial begin i=0; while(i5) i=i+1; end forever語

48、句語句1.使用格式使用格式 forever begin 語句語句1; 語句語句2; end 注:若循環(huán)內(nèi)語句只有一條,注:若循環(huán)內(nèi)語句只有一條,begin-end可以省略??梢允÷浴?2.用途用途 常用來產(chǎn)生周期性的波形,作為仿真激勵信號。常用來產(chǎn)生周期性的波形,作為仿真激勵信號。 例:例: initial begin forever a=a; end6.6 編譯指示語句編譯指示語句1.概念概念 Verilog允許在程序中使用特殊的編譯向?qū)Вㄔ试S在程序中使用特殊的編譯向?qū)В–ompiler Directives)語句,在編譯時,通常先對這些向?qū)дZ句進行語句,在編譯時,通常先對這些向?qū)дZ句進行“

49、預(yù)處理預(yù)處理”,然后再將預(yù)處理的結(jié)果和源程序一起進行編譯。,然后再將預(yù)處理的結(jié)果和源程序一起進行編譯。2.2.簡述簡述 向?qū)дZ句以符號向?qū)дZ句以符號“”開頭,以區(qū)別于其它語句。開頭,以區(qū)別于其它語句。 Verilog提供了十幾條編譯向?qū)дZ句,如:提供了十幾條編譯向?qū)дZ句,如:define、ifdef、else、endif、restall等。比較常用的有等。比較常用的有define,include和和ifdef、else、endif等。等。 宏替換宏替換define 1. 格式格式define 宏名(標(biāo)志符)宏名(標(biāo)志符) 字符串字符串 2. 用途用途define語句的用途就是用一個語句的用途就

50、是用一個或標(biāo)志符(或稱為宏名)來或標(biāo)志符(或稱為宏名)來或字符串?;蜃址@豪?define sum ina+inb+inc+inddefine sum ina+inb+inc+ind 在 上 面 的 語 句 中 , 用 簡 單 的 宏 名在 上 面 的 語 句 中 , 用 簡 單 的 宏 名 s u m 來 代 替 了 一 個 復(fù) 雜 的 表 達 式來 代 替 了 一 個 復(fù) 雜 的 表 達 式 ina+inb+inc+ind,采用了這樣的定義形式后,在后面的程序中,就可以直接用采用了這樣的定義形式后,在后面的程序中,就可以直接用sum來代表來代表ina+inb+inc+ind了。了。

51、 assign out=assign out=sum+inesum+ine; 上面語句其實就等同于:上面語句其實就等同于: assign out= assign out= ina+inb+inc+indina+inb+inc+ind +ine+ine;3. 3. 用法用法 1 1)定義:)定義:define 宏名(標(biāo)志符)宏名(標(biāo)志符) 字符串字符串 宏定義語句末行不加分號。宏定義語句末行不加分號。 2)引用:)引用: 宏名宏名 文件包含文件包含include 1.格式格式 include “文件名文件名” /注意無分號注意無分號2.用途用途 include是文件包含語句,它可將一個文件全部包

52、含到另一個是文件包含語句,它可將一個文件全部包含到另一個文件中。文件中。3. 用法用法 1)一個)一個include語句只能指定一個被包含的文件。語句只能指定一個被包含的文件。 2)include語句可以出現(xiàn)在源程序的任何地方。被包含的文件語句可以出現(xiàn)在源程序的任何地方。被包含的文件 若與包含文件不在同一個子目錄下,必須指明其路徑名。若與包含文件不在同一個子目錄下,必須指明其路徑名。 3)文件包含允許多重包含,比如文件)文件包含允許多重包含,比如文件1包含文件包含文件2,文件,文件2又包又包 含文件含文件3等。等。 文件包含文件包含include include “adder.v” modul

53、e adder16(cout,sum,a,b,cin); . . . adder my_adder(cout,sum,a,b,cin) . . . . . . endmodule條件編譯條件編譯 ifdef else endif1.格式及運行機制格式及運行機制 1) ifdef 宏名宏名 語句塊語句塊 endif 運行機制:運行機制: 當(dāng)宏名在程序中用當(dāng)宏名在程序中用define 語句定義過了,則編譯語句塊。否則該語句塊不語句定義過了,則編譯語句塊。否則該語句塊不參與源文件的編譯。參與源文件的編譯。 2) ifdef 宏名宏名 語句塊語句塊1 else 語句塊語句塊2 endif 運行機制:運

54、行機制: 當(dāng)宏名在程序中用當(dāng)宏名在程序中用define 語句定義過了,則編譯語句塊語句定義過了,則編譯語句塊1。否則編譯語句塊。否則編譯語句塊2.條件編譯條件編譯 ifdef else endif例:例: module compile(out,A,B) input A,B; output out; assgin out=A+B; assgin out=A-B; endif 如果程序中定義了如果程序中定義了define add,則執(zhí)行,則執(zhí)行out=A+B,否則,否則 執(zhí)行執(zhí)行out=A-B。 6.7 任務(wù)與函數(shù)任務(wù)與函數(shù) task和和function語句分別用來定義任務(wù)和函數(shù),利用任務(wù)和函數(shù)可

55、語句分別用來定義任務(wù)和函數(shù),利用任務(wù)和函數(shù)可以把一個程序模塊分成許多較小的任務(wù)和函數(shù),便于理解與調(diào)試。以把一個程序模塊分成許多較小的任務(wù)和函數(shù),便于理解與調(diào)試。 。1. 任務(wù)(任務(wù)(task) 1) 任務(wù)定義格式:任務(wù)定義格式: task ; 其它語句;其它語句; endtask 2)任務(wù)調(diào)用的格式為:任務(wù)調(diào)用的格式為: (端口(端口1,端口,端口2,); 注意:注意:1)任務(wù)調(diào)用時的端口變量和定義時的端口變量)任務(wù)調(diào)用時的端口變量和定義時的端口變量的排序和輸入輸出類的排序和輸入輸出類 型必須一致。型必須一致。 2 2)任務(wù)在調(diào)用時,被當(dāng)做語句來使用的。)任務(wù)在調(diào)用時,被當(dāng)做語句來使用的。 3

56、 3)任務(wù)通過輸入輸出端口來返回值。)任務(wù)通過輸入輸出端口來返回值。 6.7 任務(wù)與函數(shù)任務(wù)與函數(shù)例:例:module alutask(code,a,b,c) input1:0 code; input3:0 a,b; output4:0 c; reg4:0 c; task my_and ; 任務(wù)名稱,注意沒有端口列表任務(wù)名稱,注意沒有端口列表 input3:0 a,b; output4:0 out; interger i; begin for(i=3;i=0;i=i-1) outi=ai&bi; end 端口定義,注意端口定義,注意a,b,out的作用范圍是在該任務(wù)的作用范圍是在該任務(wù)內(nèi)部內(nèi)部變量數(shù)據(jù)類型定義變量數(shù)據(jù)類型定義 6.7 任務(wù)與函數(shù)任務(wù)與函數(shù) always(code or a or b) begin case(code) 2b00: my_and (a,b,c); 任務(wù)調(diào)用任務(wù)調(diào)用 /這里的這里的a,b,c分別對應(yīng)任務(wù)定義中的分別對應(yīng)任務(wù)定義中的a,b,out . endcase endendmodule使用任務(wù)時,需要注意以下幾點:使用任務(wù)時,需要注意以下幾點: 1 1) 任務(wù)的定義與調(diào)用須在一個任務(wù)的定義與調(diào)用須在一個module模塊內(nèi)。模塊內(nèi)。2 2) 定義任務(wù)時,沒有端口名列表,但需要緊接著進行輸入輸出定義任務(wù)時,沒有端口名列表,但需要緊接著進行輸入輸出 端口

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論