版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023/7/23計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院1Verilog語言
設(shè)計(jì)
參考教材:《Verilog數(shù)字系統(tǒng)設(shè)計(jì)》教程夏宇聞編著計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院22023/7/23
課程的基本描述
課程名稱:Verilog語言設(shè)計(jì)
課程編號(hào):0401CA0
參考教材:夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程.
航空航天出版社,2008
總學(xué)時(shí):32學(xué)時(shí)理論學(xué)時(shí):24學(xué)時(shí)
實(shí)驗(yàn)學(xué)時(shí):8學(xué)時(shí)
學(xué)分:2學(xué)分開課學(xué)期:第四學(xué)期
前導(dǎo)課程:數(shù)字邏輯、C語言程序設(shè)計(jì)
后續(xù)課程:數(shù)字系統(tǒng)設(shè)計(jì)、SOPC原理及應(yīng)用計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院32023/7/23Verilog語言設(shè)計(jì)第1章Verilog的基本知識(shí)第2章Verilog的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運(yùn)算符號(hào)第3章Verilog語句第4章VerilogHDL的建模方式第5章有限狀態(tài)機(jī)FSM第6章Verilog綜合設(shè)計(jì)與仿真內(nèi)容概要計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院42023/7/23第1章Verilog的基本知識(shí)1.硬件描述語言Verilog
HDL2.采用Verilog的設(shè)計(jì)流程3.簡單的VerilogHDL例子4.Verilog用于模塊的測試內(nèi)容概要計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院52023/7/23硬件描述語言(英文:HardwareDescriptionLanguage,簡稱:HDL)是電子系統(tǒng)硬件行為描述、結(jié)構(gòu)描述、數(shù)據(jù)流描述的語言。利用這種語言,數(shù)字電路系統(tǒng)的設(shè)計(jì)可以從頂層到底層(從抽象到具體)逐層描述自己的設(shè)計(jì)思想,用一系列分層次的模塊來表示極其復(fù)雜的數(shù)字系統(tǒng)。然后,利用電子設(shè)計(jì)自動(dòng)化(EDA)工具,逐層進(jìn)行仿真驗(yàn)證,再把其中需要變?yōu)閷?shí)際電路的模塊組合,經(jīng)過自動(dòng)綜合工具轉(zhuǎn)換到門級(jí)電路網(wǎng)表。接下去,再用專用集成電路ASIC或現(xiàn)場可編程門陣列FPGA自動(dòng)布局布線工具,把網(wǎng)表轉(zhuǎn)換為要實(shí)現(xiàn)的具體電路布線結(jié)構(gòu)。1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院62023/7/23VerilogHDL語言是基于C語言發(fā)展起來的硬件描述語言,于1983年由GDA公司首創(chuàng)。1995年VerilogHDL語言成為IEEE標(biāo)準(zhǔn),編號(hào):IEEEStd1364-1995。VerilogHDL語言具有簡捷、高效、易學(xué)易用、功能強(qiáng)大等優(yōu)點(diǎn),逐步為設(shè)計(jì)人員所接收和喜愛。Verilog語言支持的EDA工具較多,適合于寄存器傳輸級(jí)(RTL)和門電路級(jí)的描述,其綜合過程比VHDL簡單,但在高級(jí)描述方面不如VHDL。VHDL比VerilogHDL早幾年成為IEEE標(biāo)準(zhǔn);VHDL語法/結(jié)構(gòu)比較嚴(yán)格,因而編寫出的模塊風(fēng)格比較清晰;VHDL比較適合由較多的設(shè)計(jì)人員合作完成的特大型項(xiàng)目。1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院72023/7/23
VerilogHDL
公開發(fā)表
CADENCE公司
購買Verilog版權(quán)
1990
1989
1980’s
Verilog-XL
誕生
模擬和數(shù)字都適用的Verilog標(biāo)準(zhǔn)公開發(fā)表
VerilogIEEE1364-1995
標(biāo)準(zhǔn)公開發(fā)表
有關(guān)VerilogHDL
的全部權(quán)利都移交給
OVI(OpenVerilog
International)
1995
2001
1999
VerilogIEEE1364-2001
標(biāo)準(zhǔn)公開發(fā)表
1990
VerilogHDL的發(fā)展歷史1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院82023/7/23ASIC和FPGA設(shè)計(jì)師可用它來編寫可綜合的代碼。描述系統(tǒng)的結(jié)構(gòu),做高層次的仿真。驗(yàn)證工程師編寫各種層次的測試模塊對(duì)具體電路設(shè)計(jì)工程師所設(shè)計(jì)的模塊進(jìn)行全面細(xì)致的驗(yàn)證。庫模型的設(shè)計(jì):可以用于描述ASIC和FPGA的基本單元(Cell)部件,也可以描述復(fù)雜的宏單元(MacroCell)。1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院92023/7/23VerilogHDL模型可以是實(shí)際電路的不同級(jí)別的抽象。抽象級(jí)別可分為五級(jí):系統(tǒng)級(jí)(systemlevel):用高級(jí)語言結(jié)構(gòu)(如case語句)實(shí)現(xiàn)的設(shè)計(jì)模塊外部性能的模型;算法級(jí)(algorithmiclevel):用高級(jí)語言結(jié)構(gòu)實(shí)現(xiàn)的設(shè)計(jì)算法模型(寫出邏輯表達(dá)式);RTL級(jí)(registertransferlevel):描述數(shù)據(jù)在寄存器之間流動(dòng)和如何處理這些數(shù)據(jù)的模型;門級(jí)(gatelevel):描述邏輯門(如與門、非門、或門、與非門、三態(tài)門等)以及邏輯門之間連接的模型;開關(guān)級(jí)(switchlevel):描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)及其之間連接的模型。1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院102023/7/23語法結(jié)構(gòu)上的主要特點(diǎn):形式化地表示電路的行為和結(jié)構(gòu);借用C語言的結(jié)構(gòu)和語句;可在多個(gè)層次上對(duì)所設(shè)計(jì)的系統(tǒng)加以描述,語言對(duì)設(shè)計(jì)規(guī)模不加任何限制;具有混合建模能力:一個(gè)設(shè)計(jì)中的各子模塊可用不同級(jí)別的抽象模型來描述;基本邏輯門、開關(guān)級(jí)結(jié)構(gòu)模型均內(nèi)置于語言中,可直接調(diào)用;易創(chuàng)建用戶定義原語(UDP,UserDesignedPrimitive)。易學(xué)易用,功能強(qiáng).1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院112023/7/23傳統(tǒng)的設(shè)計(jì)方法-電路原理圖輸入法查用器件手冊(cè);選用合適的微處理器和電路芯片;手工布線調(diào)試;定型;設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)(幾十萬門以上)極其困難!1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院122023/7/23
采用VerilogHDL輸入法時(shí),由于VerilogHDL的標(biāo)準(zhǔn)化,可以很容易把完成的設(shè)計(jì)進(jìn)行移植到不同廠家的不同芯片。采用VerilogHDL輸入法最大的優(yōu)點(diǎn)是其與工藝無關(guān)性。
Verilog的標(biāo)準(zhǔn)化軟核、固核和硬核IP核是具有知識(shí)產(chǎn)權(quán)核的集成電路芯核總稱,是經(jīng)過反復(fù)驗(yàn)證過的、具有特定功能的宏模塊。從IP核的提供方式上,通常將其分為軟核、固核和硬核這3類。軟核(SoftCore):用VerilogHDL(HardwareDescriptionLanguage)描述的功能塊。經(jīng)過驗(yàn)證的、可綜合的HDL模型。固核(FirmCore):完成了綜合的功能塊。有較大的設(shè)計(jì)深度,以網(wǎng)表文件的形式提交客戶使用。硬核(HardCore):它提供設(shè)計(jì)的最終階段產(chǎn)品:掩模。1.1硬件描述語言VerilogHDL計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院132023/7/23系統(tǒng)級(jí)設(shè)計(jì)模塊A模塊B模塊C模塊A1模塊A2模塊A3模塊B1模塊B2模塊B3模塊C1模塊C2Top-Down—自頂向下的設(shè)計(jì)概念
1.2采用Verilog的設(shè)計(jì)流程計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院142023/7/23電路圖設(shè)計(jì)HDL設(shè)計(jì)電路功能仿真HDL功能仿真邏輯綜合、時(shí)序驗(yàn)證優(yōu)化、布局布線布線后門級(jí)仿真工藝文件電路制造版圖或FPGA碼流文件設(shè)計(jì)要求實(shí)現(xiàn)1.2采用Verilog的設(shè)計(jì)流程計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院152023/7/23[例]8位全加器
moduleadder8(cout,sum,a,b,cin); outputcout; //輸出端口聲明
output[7:0]sum; input[7:0]a,b; //輸入端口聲明
inputcin; assign{cout,sum}=a+b+cin; endmoduleassign語句:無論右邊表達(dá)式操作數(shù)何時(shí)發(fā)生變化,右邊表達(dá)式都會(huì)重新計(jì)算,并且在指定的延遲后給左邊表達(dá)式賦值。I/O說明端口定義功能描述模塊名(文件名)整個(gè)VerilogHDL程序嵌套在module和endmodule聲明語句中。每條語句相對(duì)module和endmodule最好縮進(jìn)2格或4格!//
……
表示注釋部分,一般只占據(jù)一行。對(duì)編譯不起作用!單行注釋符1.3簡單的VerilogHDL例子計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院162023/7/23
[例]8位計(jì)數(shù)器
modulecounter8(out,cout,data,load,cin,clk); output[7:0]out; outputcout; input[7:0]data; inputload,cin,clk; reg[7:0]out; always@(posedgeclk) begin if(load) out<=data;//同步預(yù)置數(shù)據(jù)
else out<=out+1+cin;//加1計(jì)數(shù)
endassigncout=&out&cin;//若out為8‘hFF,cin為1,則cout為1 endmoduleI/O說明端口定義功能描述信號(hào)類型聲明縮減運(yùn)算符位運(yùn)算符1.3簡單的VerilogHDL例子計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院172023/7/23
[例]2位比較器
modulecompare2(equal,a,b); outputequal; input[1:0]a,b; assignequal=(a==b)?1:0;/*如果a等于b,則equal為1,否則為0*/ endmodule連續(xù)賦值語句條件運(yùn)算符/*……*/內(nèi)表示注釋部分,一般可占據(jù)多行。對(duì)編譯不起作用!多行注釋符1.3簡單的VerilogHDL例子計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院182023/7/23Verilog用于模塊的測試Verilog還可以用于描述變化的測試信號(hào)。描述測試信號(hào)的變化和測試過程的模塊叫做測試平臺(tái)(Testbench或Testfixture),它可以對(duì)上面介紹的電路模塊(無論是行為的或結(jié)構(gòu)的)進(jìn)行動(dòng)態(tài)的全面測試。通過觀測被測試模塊的輸出信號(hào)是否符合要求,可以調(diào)試和驗(yàn)證邏輯系統(tǒng)的設(shè)計(jì)和結(jié)構(gòu)正確與否,并發(fā)現(xiàn)問題及時(shí)修改。1.4VerilogHDL用于模塊的測試計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院192023/7/23Verilog模塊測試原理圖1.4VerilogHDL用于模塊的測試計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院202023/7/23例測試`include“muxtwo.v”modulet;regain,bin,select;regclock;wireoutw;initialbeginain=0;bin=0;select=0;clock=0;endalways#50clock=~clock;always@(posedgeclock)beginain={$random}%2;
#3bin={$random}%2;endalways#10000select=~select;muxtwom(.out(outw),.a(ain),.b(bin),.sl(select));endmodule1.4VerilogHDL用于模塊的測試計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院212023/7/231.VerilogHDL模塊的結(jié)構(gòu)2.數(shù)據(jù)類型、變量3.基本運(yùn)算符號(hào)及表達(dá)式4.關(guān)鍵字5.標(biāo)識(shí)符第2章Verilog的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運(yùn)算符號(hào)內(nèi)容概要計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院222023/7/23Verilog的基本設(shè)計(jì)單元是“模塊
(block)”
。Verilog模塊的結(jié)構(gòu)由在module和endmodule關(guān)鍵詞之間的4個(gè)主要部分組成:moduleblock(a,b,c,d);inputa,b;outputc,d;wirec;wired;assignc=a|b;assignd=a&b;endmoduleI/O說明端口定義邏輯功能描述信號(hào)類型聲明12342.1VerilogHDL模塊的結(jié)構(gòu)abcd計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院232023/7/232.1.1模塊的端口定義格式:
module模塊名(口1,口2,…
…);例:
modulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?In:’bz;endmodule調(diào)用:mytritri_inst(sout,sin,ena);
mytritri_inst(.out(sout),enable(ena),.in(sin));2.1VerilogHDL模塊的結(jié)構(gòu)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院242023/7/232.12I/O說明例如:inputk1,k2,in0;input[7:0]data;output[3:0]out;
inout[15:0]db;2.1VerilogHDL模塊的結(jié)構(gòu)例如:reg[2:0]a;wireb,c,d;2.13信號(hào)類型聲明計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院252023/7/23(1)用assign語句 assignx=(b&~c);連續(xù)賦值語句常用于描述組合邏輯門元件例化模塊元件例化例化元件名門元件關(guān)鍵字(2)用元件例化(instantiate)
and
myand3(f,a,b,c);注1:元件例化即是調(diào)用VerilogHDL提供的元件;注2:元件例化包括門元件例化和模塊元件例化;注3:每個(gè)實(shí)例元件的名字必須唯一!以避免與其它調(diào)用元件的實(shí)例相混淆。注4:例化元件名也可以省略!2.1VerilogHDL模塊的結(jié)構(gòu)2.1.4邏輯功能描述功能定義(有3種方法實(shí)現(xiàn)邏輯功能)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院262023/7/23(3)用“always”塊語句
always@(posedgeclk)//每當(dāng)時(shí)鐘上升沿到來時(shí)執(zhí)行一遍塊內(nèi)語句
begin if(load) out=data;//同步預(yù)置數(shù)據(jù)
else out=data+1+cin;//加1計(jì)數(shù)
end結(jié)構(gòu)說明語句注1:“always”塊語句常用于描述時(shí)序邏輯,也可描述組合邏輯。注2:“always”塊可用多種手段來表達(dá)邏輯關(guān)系,如用if-else語句或case語句。注3:“always”塊語句與assign語句是并發(fā)執(zhí)行的,assign語句一定要放在“always”塊語句之外!2.1VerilogHDL模塊的結(jié)構(gòu)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院272023/7/23數(shù)據(jù)類型數(shù)據(jù)類型是用來表示數(shù)字電路中的數(shù)據(jù)存儲(chǔ)和傳送單元。VerilogHDL中共有19種數(shù)據(jù)類型;其中4個(gè)最基本的數(shù)據(jù)類型為:integer型parameter型reg型wire型
其它數(shù)據(jù)類型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院282023/7/232.2.1常量在程序運(yùn)行過程中,其值不能被改變的量,稱為常量。數(shù)字(包括整數(shù),x和z值,負(fù)數(shù))parameter常量(或稱符號(hào)常量)2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院292023/7/23整常數(shù)的3種表達(dá)方式:表達(dá)方式說明舉例<位寬>’<進(jìn)制><數(shù)字>完整的表達(dá)方式8’b11000101或8’hc5<進(jìn)制><數(shù)字>缺省位寬,則位寬由機(jī)器系統(tǒng)決定,至少32位hc5<數(shù)字>缺省進(jìn)制為十進(jìn)制,位寬默認(rèn)為32位1971.數(shù)字(1)整數(shù)型常量(即整常數(shù))的4種進(jìn)制表示形式:二進(jìn)制整數(shù)(b或B);十進(jìn)制整數(shù)(d或D);十六進(jìn)制整數(shù)(h或H);八進(jìn)制整數(shù)(o或O)。注:這里位寬指對(duì)應(yīng)二進(jìn)制數(shù)的寬度。2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院302023/7/23(2)x和z值x表示不定值,z表示高阻值;8’b1001xxxx或8’h9x8’b1010zzzz或8’haz每個(gè)字符代表的二進(jìn)制數(shù)的寬度取決于所用的進(jìn)制;當(dāng)用二進(jìn)制表示時(shí),已標(biāo)明位寬的數(shù)若用x或z表示某些位,則只有在最左邊的x或z具有擴(kuò)展性!為清晰可見,最好直接寫出每一位的值![例]8’bzx=8’bzzzz_zzzx[例]8’b1x=8’b0000_001x“?”是z的另一種表示符號(hào),建議在case語句中使用?表示高阻態(tài)z[例]casez(select)4’b???1:out=a;4’b??1?:out=b;4’b?1??:out=c;4’b1???:out=d;endcase2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院312023/7/23(3)負(fù)數(shù)在位寬前加一個(gè)減號(hào),即表示負(fù)數(shù)如:-8’d5//5的補(bǔ)數(shù),=8‘b11111011減號(hào)不能放在位寬與進(jìn)制之間,也不能放在進(jìn)制與數(shù)字之間!8’d-5//非法格式為提高可讀性,在較長的數(shù)字之間可用下劃線_隔開!但不可以用在<進(jìn)制>和<數(shù)字>之間。如:16‘b1010_1011_1100_1111//合法
8‘b_0011_1010//非法當(dāng)常量未指明位寬時(shí),默認(rèn)為32位。10=32‘d10=32’b1010-1=-32’d1=32’b1111……1111=32’hFFFFFFFF2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院322023/7/23
2.parameter常量(符號(hào)常量)用parameter來定義一個(gè)標(biāo)識(shí)符,代表一個(gè)常量——稱為符號(hào)常量。參數(shù)型數(shù)據(jù)的確認(rèn)符parameter
參數(shù)名1=表達(dá)式,參數(shù)名2=表達(dá)式,……;賦值語句表格式2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院332023/7/23每個(gè)賦值語句的右邊必須為常數(shù)表達(dá)式,即只能包含數(shù)字或先前定義過的符號(hào)常量!
parameteraddrwidth=16;//合法格式
parameteraddrwidth=datawidth*2;//非法格式常用參數(shù)來定義延遲時(shí)間和變量寬度。可用字符串表示的任何地方,都可以用定義的參數(shù)來代替。參數(shù)是本地的,其定義只在本模塊內(nèi)有效。在模塊或?qū)嵗脮r(shí),可通過參數(shù)傳遞改變?cè)诒灰媚K或?qū)嵗幸讯x的參數(shù)!2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院342023/7/23模塊實(shí)例引用時(shí)參數(shù)的傳遞——方法之一:利用defparam定義參數(shù)聲明語句!defparam例化模塊名.參數(shù)名1=常數(shù)表達(dá)式,
例化模塊名.參數(shù)名2=常數(shù)表達(dá)式,……;格式defparam語句在編譯時(shí)可重新定義參數(shù)值??删C合性問題:一般情況下是不可綜合的。2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院352023/7/23[例]modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…modmk(out,ina,inb);//對(duì)模塊mod的實(shí)例引用
defparammk.cycle=6,mk.file=“../my_mem.dat”;//參數(shù)的傳遞
…endmodule被引用模塊參數(shù)名例化模塊名2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院362023/7/23[例]modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…mod#(5,3.20,“../my_mem.dat”)mk(out,ina,inb);
//對(duì)模塊mod的實(shí)例引用
…endmodule模塊實(shí)例引用時(shí)參數(shù)的傳遞——方法之二:利用特殊符號(hào)“#”
被引用模塊參數(shù)的傳遞必須與被引用模塊中的參數(shù)一一對(duì)應(yīng)!建議用此方法!被引用模塊名#(參數(shù)1,參數(shù)2,…)例化模塊名(端口列表);格式2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院372023/7/232.2.2變量在程序運(yùn)行過程中,其值可以改變的量,稱為變量。其數(shù)據(jù)類型有19種,常用的有3種:網(wǎng)絡(luò)型(netstype)寄存器型(registertype)數(shù)組(memorytype)2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院382023/7/231.nets型變量定義——輸出始終隨輸入的變化而變化的變量。表示結(jié)構(gòu)實(shí)體(如門)之間的物理連接。常用nets型變量:wire,tri:連線類型(兩者功能一致)wor,trior:具有線或特性的連線(兩者功能一致)wand,triand:具有線與特性的連線(兩者功能一致)tri1,tri0:上拉電阻和下拉電阻supply1,supply0:電源(邏輯1)和地(邏輯0)
nets型變量不能儲(chǔ)存值!2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院392023/7/23wire型變量最常用的nets型變量,常用來表示以assign語句賦值的組合邏輯信號(hào)。模塊中的輸入/輸出信號(hào)類型缺省為wire型??捎米鋈魏畏匠淌降妮斎?,或“assign”語句和實(shí)例元件的輸出。wire
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名n;wire[n-1:0]
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;或wire[n:1]
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;每條總線位寬為n共有m條總線wire型向量(總線)格式2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院402023/7/23定義——對(duì)應(yīng)具有狀態(tài)保持作用的電路元件(如觸發(fā)器、寄存器等),常用來表示過程塊語句(如initial,always,task,function)內(nèi)的指定信號(hào)。常用register型變量:reg:常代表觸發(fā)器integer:32位帶符號(hào)整數(shù)型變量real:64位帶符號(hào)實(shí)數(shù)型變量time:無符號(hào)時(shí)間變量純數(shù)學(xué)的抽象描述2.register型變量2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院412023/7/23register型變量與nets型變量的根本區(qū)別是:register型變量需要被明確地賦值,并且在被重新賦值前一直保持原值。register型變量必須通過過程賦值語句賦值!不能通過assign語句賦值!在過程塊內(nèi)被賦值的每個(gè)信號(hào)必須定義成register型!2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院422023/7/23reg型變量定義——在過程塊中被賦值的信號(hào),往往代表觸發(fā)器,但不一定就是觸發(fā)器(也可以是組合邏輯信號(hào))!reg
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名n;reg[n-1:0]
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;或reg[n:1]
數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;每個(gè)向量位寬為n共有m個(gè)reg型向量[例]reg[4:1]regc,regd;//regc,regd為4位寬的reg型向量reg型向量(總線)格式2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院432023/7/23用reg型變量生成組合邏輯舉例:
modulerw1(a,b,out1,out2);inputa,b;outputout1,out2;
regout1;wireout2;
assignout2=a;always@(b)
out1<=~b; endmoduleaout2BUFFbINVout1過程賦值語句連續(xù)賦值語句電平觸發(fā)Verilog中reg與wire的區(qū)別reg型變量既可生成觸發(fā)器,也可生成組合邏輯;wire型變量只能生成組合邏輯。2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院442023/7/23用reg型變量生成觸發(fā)器舉例:
modulerw2(clk,d,out1,out2); inputclk,d;outputout1,out2;
regout1; wireout2;
assignout2=d&~out1;
always@(posedgeclk)
begin
out1<=d;
end
endmodule
過程賦值語句連續(xù)賦值語句dout2AND2i1clkout1DQDFF沿觸發(fā)2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院452023/7/23定義——由若干個(gè)相同寬度的reg型向量構(gòu)成的數(shù)組。VerilogHDL通過reg型變量建立數(shù)組來對(duì)存儲(chǔ)器建模。memory型變量可描述RAM、ROM和reg文件。memory型變量通過擴(kuò)展reg型變量的地址范圍來生成:reg[n-1:0]
存儲(chǔ)器名[m-1:0];或reg[n-1:0]存儲(chǔ)器名[m:1];每個(gè)存儲(chǔ)單元位寬為n共有m個(gè)存儲(chǔ)單元3.memory型變量——數(shù)組VerilogHDL中的變量名、參數(shù)名等標(biāo)記符是對(duì)大小寫字母敏感的!2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院462023/7/23含義不同
[例]reg[n-1:0]
rega;//一個(gè)n位的寄存器
regmema[n-1:0];//由n個(gè)1位寄存器組成的存儲(chǔ)器
必須指明存儲(chǔ)單元的地址!0n-10n-1n-2···地址賦值方式不同
一個(gè)n位的寄存器可用一條賦值語句賦值;一個(gè)完整的存儲(chǔ)器則不行!若要對(duì)某存儲(chǔ)器中的存儲(chǔ)單元進(jìn)行讀寫操作,必須指明該單元在存儲(chǔ)器中的地址!
[例]rega=0;//合法賦值語句
mema=0;//非法賦值語句
mema[8]=1;//合法賦值語句
mema[1023:0]=0;//合法賦值語句memory型變量與reg型變量的區(qū)別2.2數(shù)據(jù)類型及其常量和變量計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院472023/7/23一、算術(shù)運(yùn)算符二、賦值運(yùn)算符三、關(guān)系運(yùn)算符四、邏輯運(yùn)算符五、條件運(yùn)算符內(nèi)容概要六、位運(yùn)算符七、移位運(yùn)算符八、拼接運(yùn)算符九、其他2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院482023/7/233.3.1算術(shù)運(yùn)算符算術(shù)運(yùn)算符說明
+-*/%加減乘除求模雙目運(yùn)算符2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院492023/7/23在進(jìn)行算術(shù)運(yùn)算時(shí),如果操作數(shù)的某一位為x或z,則整個(gè)表達(dá)式運(yùn)算結(jié)果為不確定。例ain+din=unknown。兩個(gè)整數(shù)進(jìn)行除法運(yùn)算時(shí),結(jié)果為整數(shù),小數(shù)部分被截去。如,6/4=1。在進(jìn)行加法運(yùn)算時(shí),如果結(jié)果和操作數(shù)的位寬相同,則進(jìn)位被截去。%稱為求模(或求余)運(yùn)算符,要求%兩側(cè)均為整型數(shù)據(jù);求模運(yùn)算結(jié)果值的符號(hào)位取第一個(gè)操作數(shù)的符號(hào)位!
[例]-11%3結(jié)果為-22.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院502023/7/23[例]除法和求模運(yùn)算的區(qū)別注意/和%的區(qū)別!2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院512023/7/239/4=29%4=1arithmetic.vwf2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院522023/7/232.3.2位運(yùn)算符位運(yùn)算符說明~&|^^~,~^按位取反按位與按位或按位異或按位同或雙目運(yùn)算符單目運(yùn)算符位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位運(yùn)算符中的雙目運(yùn)算符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位逐位進(jìn)行運(yùn)算。兩個(gè)不同長度的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在高位用0補(bǔ)齊。如果操作數(shù)的某一位為x時(shí)不一定產(chǎn)生x結(jié)果。
[例]若A=5’b11001,B=3’b101,則A&B=(5’b11001)&(5’b00101)=5’b00001
2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院532023/7/232.3.3邏輯運(yùn)算符邏輯運(yùn)算符把它的操作數(shù)當(dāng)作布爾變量:非零的操作數(shù)被認(rèn)為是真(1‘b1);零被認(rèn)為是假(1‘b0);不確定的操作數(shù)如4’bxx00,被認(rèn)為是不確定的(可能為零,也可能為非零)(記為1’bx);但4’bxx11被認(rèn)為是真(記為1’b1,因?yàn)樗隙ㄊ欠橇愕模?。邏輯運(yùn)算符說明
&&(雙目)||(雙目)!(單目)邏輯與邏輯或邏輯非進(jìn)行邏輯運(yùn)算后的結(jié)果為布爾值(為1或0或x)!2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院542023/7/23[例]&&運(yùn)算符和&(按位與)的區(qū)別&&運(yùn)算的結(jié)果為1位的邏輯值注意&&和&的區(qū)別!被認(rèn)為是
1‘b1被認(rèn)為是
1‘bx邏輯與結(jié)果為
1‘bx2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院552023/7/23“&&”和“||”的優(yōu)先級(jí)除高于條件運(yùn)算符外,低于關(guān)系運(yùn)算符、等式運(yùn)算符等幾乎所有運(yùn)算符;邏輯非“!”優(yōu)先級(jí)最高。[例](a>b)&&(b>c) 可簡寫為:a>b&&b>c
(a==b)||(x==y) 可簡寫為:a==b||x==y
(!a)||(a>b) 可簡寫為:!a||a>b為提高程序的可讀性,明確表達(dá)各運(yùn)算符之間的優(yōu)先關(guān)系,建議使用括號(hào)!2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院562023/7/232.3.4關(guān)系運(yùn)算符關(guān)系運(yùn)算符說明<<=>>=小于小于或等于大于大于或等于雙目運(yùn)算符括號(hào)內(nèi)先運(yùn)算!算術(shù)運(yùn)算先運(yùn)算!運(yùn)算結(jié)果為1位的邏輯值1或0或x。關(guān)系運(yùn)算時(shí),若關(guān)系為真,則返回值為1;若聲明的關(guān)系為假,則返回值為0;若某操作數(shù)為不定值x,則返回值為x。所有的關(guān)系運(yùn)算符優(yōu)先級(jí)別相同。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。[例]a<size-1 等同于:a<(size-1)size-(1<a) 不等同于:size-1<a2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院572023/7/232.3.5等式運(yùn)算符等式運(yùn)算符說明==!====!==等于不等于全等不全等雙目運(yùn)算符運(yùn)算結(jié)果為1位的邏輯值1或0或x。等于運(yùn)算符(==)和全等運(yùn)算符(===)的區(qū)別:使用等于運(yùn)算符時(shí),兩個(gè)操作數(shù)必須逐位相等,結(jié)果才為1;若某些位為x或z,則結(jié)果為x。使用全等運(yùn)算符時(shí),若兩個(gè)操作數(shù)的相應(yīng)位完全一致(如同是1,或同是0,或同是x,或同是z),則結(jié)果為1;否則為0。所有的等式運(yùn)算符優(yōu)先級(jí)別相同。===和!==運(yùn)算符常用于case表達(dá)式的判別,又稱為“case等式運(yùn)算符”。2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院582023/7/23[例]if(A
==
1’bx)$display(“AisX”);//當(dāng)A為不定值時(shí),式(A==1’bx)的運(yùn)算結(jié)果為x,則該語句不執(zhí)行
if(A
===
1’bx)$display(“AisX”);//當(dāng)A為不定值時(shí),式(A===1’bx)的運(yùn)算結(jié)果為1,該語句執(zhí)行==01xz01xz10xx01xxxxxxxxxx===01xz01xz1000010000100001“==”的真值表“===”的真值表等于運(yùn)算的結(jié)果可能為1或0或x全等于運(yùn)算的結(jié)果只有1或02.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院592023/7/232.3.6移位運(yùn)算符移位運(yùn)算符說明>><<右移左移單目運(yùn)算符左移會(huì)擴(kuò)充位數(shù)!用法:A>>n或A<<n
將操作數(shù)右移或左移n位,同時(shí)用n個(gè)0填補(bǔ)移出的空位。[例]4’b1001>>3=4’b0001;4’b1001>>4=4’b00004’b1001<<1=5’b10010;4’b1001<<2=6’b100100;
1<<6=7’b1000000將操作數(shù)右移或左移n位,相當(dāng)于將操作數(shù)除以或乘以2n。右移位數(shù)不變,但右移的數(shù)據(jù)會(huì)丟失!2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院602023/7/232.3.7位拼接運(yùn)算符位拼接運(yùn)算符為{}用于將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來,表示一個(gè)整體信號(hào)。用法:{信號(hào)1的某幾位,信號(hào)2的某幾位,……,信號(hào)n的某幾位}例如在進(jìn)行加法運(yùn)算時(shí),可將進(jìn)位輸出與和拼接在一起使用。[例1]output[3:0]sum;//和
outputcout;//進(jìn)位輸出
input[3:0]ina,inb;inputcin;assign{cout,sum}=ina+inb+cin;//進(jìn)位與和拼接在一起[例2]{a,b[3:0],w,3’b101}={a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院612023/7/23可用重復(fù)法簡化表達(dá)式,如:{4{w}}//等同于{w,w,w,w}還可用嵌套方式簡化書寫,如:
{b,{3{a,b}}}//等同于{b,{a,b},{a,b},{a,b}},也等同于{b,a,b,a,b,a,b}用于表示重復(fù)的表達(dá)式必須為常數(shù)表達(dá)式!在位拼接表達(dá)式中,不允許存在沒有指明位數(shù)的信號(hào),必須指明信號(hào)的位數(shù);若未指明,則默認(rèn)為32位的二進(jìn)制數(shù)!如{1,0}=64’h00000001_00000000,注意{1,0}不等于2‘b102.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院622023/7/232.3.8縮減運(yùn)算符縮減運(yùn)算符說明&~&|~|^^~,~^與與非或或非異或同或單目運(yùn)算符運(yùn)算法則與位運(yùn)算符類似,但運(yùn)算過程不同!對(duì)單個(gè)操作數(shù)進(jìn)行遞推運(yùn)算,即先將操作數(shù)的最低位與第二位進(jìn)行與、或、非運(yùn)算,再將運(yùn)算結(jié)果與第三位進(jìn)行相同的運(yùn)算,依次類推,直至最高位。運(yùn)算結(jié)果縮減為1位二進(jìn)制數(shù)。[例]reg[3:0]a;b=|a//等效于b=((a[0]|a[1])|a(2))|a[3]注意縮減運(yùn)算符和位運(yùn)算符的區(qū)別!2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院632023/7/232.3.9條件運(yùn)算符三目運(yùn)算符in1outMUXin0sel信號(hào)=條件?表達(dá)式1:表達(dá)式2條件運(yùn)算符為?:用法:[例]數(shù)據(jù)選擇器assignout=sel?in1:in0;當(dāng)條件為真,信號(hào)取表達(dá)式1的值;為假,則取表達(dá)式2的值。sel=1時(shí)out=in1;sel=0時(shí)out=in02.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院642023/7/232.3.10運(yùn)算符的優(yōu)先級(jí)類別運(yùn)算符優(yōu)先級(jí)邏輯、位運(yùn)算符!~高低算術(shù)運(yùn)算符*/%+-移位運(yùn)算符<<>>關(guān)系運(yùn)算符<<=>>=等式運(yùn)算符==!====!==縮減、位運(yùn)算符&~&^^~|~|邏輯運(yùn)算符&&||條件運(yùn)算符?:運(yùn)算符的優(yōu)先級(jí)為提高程序的可讀性,建議使用括號(hào)來控制運(yùn)算的優(yōu)先級(jí)![例](a>b)&&(b>c)
(a==b)||(x==y)
(!a)||(a>b)2.3運(yùn)算符及表達(dá)式計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院652023/7/23關(guān)鍵字——事先定義好的確認(rèn)符,用來組織語言結(jié)構(gòu);或者用于定義VerilogHDL提供的門元件(如and,not,or,buf)。用小寫字母定義!
——如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire見《數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL》P285附錄A。用戶程序中的變量、節(jié)點(diǎn)等名稱不能與關(guān)鍵字同名!2.4關(guān)鍵字計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院662023/7/23VerilogHDL關(guān)鍵字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenornotnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable2.4關(guān)鍵字計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院672023/7/23tri0tri1vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrengthstrong0strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg2.4關(guān)鍵字計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院682023/7/23任何用VerilogHDL語言描述的“東西”都通過其名字來識(shí)別,這個(gè)名字被稱為標(biāo)識(shí)符。如源文件名、模塊名、端口名、變量名、常量名、實(shí)例名等。標(biāo)識(shí)符可由字母、數(shù)字、下劃線和$符號(hào)構(gòu)成;但第一個(gè)字符必須是字母或下劃線,不能是數(shù)字或$符號(hào)!在VerilogHDL中變量名是區(qū)分大小寫的!合法的名字:A_99_ZReset_54MHz_Clock$Module
不合法的名字:123a$datamodule7seg.v標(biāo)識(shí)符不能與關(guān)鍵字同名!2.5標(biāo)識(shí)符計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院692023/7/231.賦值語句2.條件語句3.循環(huán)語句4.結(jié)構(gòu)說明語句5.塊語句6.編譯預(yù)處理語句第3章Verilog語句內(nèi)容概要計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院702023/7/23賦值語句連續(xù)賦值語句過程賦值語句塊語句begin_end語句fork_join語句QuartusII不支持條件語句if_else語句case語句循環(huán)語句forever語句repeat語句while語句for語句結(jié)構(gòu)說明語句initial語句QuartusII不支持always語句task語句function語句編譯預(yù)處理語句‘define語句‘include語句QuartusII不支持‘timescale語句QuartusII不支持VerilogHDL的語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院712023/7/23注:上表中,凡QuartusII不支持的語句是不可綜合的,通常用在測試文件中;未注明“QuartusII不支持”的語句均是可綜合的。forever語句、while語句,QuartusII支持,通常用在測試模塊中;表中只有4種語句(fork_join,initial,‘include,‘timescale)是QuartusII不支持的,它們通常用在測試模塊中(ModelSim軟件支持)。計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院722023/7/231.賦值語句2.非阻塞賦值與阻塞賦值的區(qū)別內(nèi)容概要3.1賦值語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院732023/7/233.1.1賦值語句分為兩類:(1)連續(xù)賦值語句——assign語句,用于對(duì)wire型變量賦值,是描述組合邏輯最常用的方法之一。
[例]assignc=a&b;//a、b、c均為wire型變量(2)過程賦值語句——用于對(duì)reg型變量賦值,有兩種方式:非阻塞(non-blocking)賦值方式:賦值符號(hào)為<=,如b<=a;阻塞(blocking)賦值方式:賦值符號(hào)為=,如b=a;3.1賦值語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院742023/7/233.1.2非阻塞賦值與阻塞賦值的區(qū)別1.非阻塞賦值方式
always@(posedgeclk)
begin
b<=a;
c<=b;
endclkDFFcDQDQabDFF非阻塞賦值在塊結(jié)束時(shí)才完成賦值操作!注:c的值比b的值落后一個(gè)時(shí)鐘周期!3.1賦值語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院752023/7/232.阻塞賦值方式
always@(posedgeclk)
begin
b=a;
c=b;
end阻塞賦值在該語句結(jié)束時(shí)就完成賦值操作!clkDFFcDQab注:在一個(gè)塊語句中,如果有多條阻塞賦值語句,在前面的賦值語句沒有完成之前,后面的語句就不能被執(zhí)行,就像被阻塞了一樣,因此稱為阻塞賦值方式。這里c的值與b的值一樣!3.1賦值語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院762023/7/23
非阻塞(non-blocking)賦值方式(b<=a):b的值被賦成新值a的操作,并不是立刻完成的,而是在塊結(jié)束時(shí)才完成;塊內(nèi)的多條賦值語句在塊結(jié)束時(shí)同時(shí)賦值;硬件有對(duì)應(yīng)的電路。阻塞(blocking)賦值方式(b=a):b的值立刻被賦成新值a;完成該賦值語句后才能執(zhí)行下一句的操作;硬件沒有對(duì)應(yīng)的電路,因而綜合結(jié)果未知。非阻塞賦值與阻塞賦值方式的主要區(qū)別建議在初學(xué)時(shí)只使用一種方式,不要混用!建議在可綜合風(fēng)格的模塊中使用非阻塞賦值!3.1賦值語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院772023/7/231.if-else語句2.case語句3.使用條件語句注意事項(xiàng)內(nèi)容概要3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院782023/7/233.2.1if-else語句判定所給條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。if-else語句有3種形式其中“表達(dá)式”為邏輯表達(dá)式或關(guān)系表達(dá)式,或一位的變量。若表達(dá)式的值為0、或z,則判定的結(jié)果為“假”;若為1,則結(jié)果為“真”。語句可為單句,也可為多句;多句時(shí)一定要用“begin_end”語句括起來,形成一個(gè)復(fù)合塊語句。對(duì)于每個(gè)判定只有兩個(gè)分支條件語句分為兩種:if-else語句和case語句;它們都是順序語句,應(yīng)放在“always”塊內(nèi)!3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院792023/7/23允許一定形式的表達(dá)式簡寫方式,如:if(expression)等同于if(expression==1)if(!expression)等同于if(expression!=1)
if(表達(dá)式)語句1;if(表達(dá)式1)語句1;else
語句2;if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;
…elseif(表達(dá)式n)語句n;方式1:方式2:方式3:適于對(duì)不同的條件,執(zhí)行不同的語句3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院802023/7/23if語句可以嵌套;若if與else的數(shù)目不一樣,注意用“begin_end”語句來確定if與else的配對(duì)關(guān)系!if(表達(dá)式1)
if(表達(dá)式2)語句1;
else
語句2;else
if(表達(dá)式3)語句3;
else
語句4;if(表達(dá)式1)
begin
if(表達(dá)式2)語句1;
endelse
語句2;當(dāng)if與else的數(shù)目不一樣時(shí),最好用“begin_end”語句將單獨(dú)的if語句括起來:if語句的嵌套:3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院812023/7/23[例]模為60的BCD碼加法計(jì)數(shù)器counter60.valways塊語句和assign語句是并行執(zhí)行的!在always塊內(nèi)的語句是順序執(zhí)行的!3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院822023/7/23注意:if(reset)elseif(load)elseif(cin)
不要寫成3個(gè)并列的if語句:
if(reset)if(load)if(cin)因?yàn)檫@樣寫則是同時(shí)對(duì)3個(gè)信號(hào)reset、load和cin進(jìn)行判斷,現(xiàn)實(shí)中很可能出現(xiàn)三者同時(shí)為“1”的情況,即3個(gè)條件同時(shí)滿足,則應(yīng)該同時(shí)執(zhí)行它們對(duì)應(yīng)的執(zhí)行語句,但3條執(zhí)行語句是對(duì)同一個(gè)信號(hào)qout賦不同的值,顯然相互矛盾。故編譯時(shí)會(huì)報(bào)錯(cuò)!3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院832023/7/23cin為來自下一級(jí)計(jì)數(shù)器的進(jìn)位always與assign語句是并行執(zhí)行的!count60.vwf置數(shù)進(jìn)位輸出當(dāng)cin=1則加1計(jì)數(shù)3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院842023/7/233.2.2case語句多分支語句case(敏感表達(dá)式)值1:語句1;值2:語句2;
…
值n:語句n;
default:
語句n+1;endcase1.case語句當(dāng)敏感表達(dá)式取不同的值時(shí),執(zhí)行不同的語句。功能:當(dāng)某個(gè)(控制)信號(hào)取不同的值時(shí),給另一個(gè)(輸出)信號(hào)賦不同的值。常用于多條件譯碼電路(如譯碼器、數(shù)據(jù)選擇器、狀態(tài)機(jī)、微處理器的指令譯碼)!case語句有3種形式:case,casez,casex適于對(duì)同一個(gè)控制信號(hào)取不同的值時(shí),輸出取不同的值!case語句與if-else語句有什么區(qū)別呢?3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院852023/7/23說明:其中“敏感表達(dá)式”又稱為“控制表達(dá)式”,通常表示為控制信號(hào)的某些位。值1~值n稱為分支表達(dá)式,用控制信號(hào)的具體狀態(tài)值表示,因此又稱為常量表達(dá)式。default項(xiàng)可有可無,一個(gè)case語句里只能有一個(gè)default項(xiàng)!值1~值n必須互不相同,否則矛盾。值1~值n的位寬必須相等,且與控制表達(dá)式的位寬相同。3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院862023/7/232.casez與casex語句是case語句的兩種變體在case語句中,分支表達(dá)式每一位的值都是確定的(或者為0,或者為1);在casez語句中,若分支表達(dá)式某些位的值為高阻值z,則不考慮對(duì)這些位的比較;在casex語句中,若分支表達(dá)式某些位的值為z或不定值x,則不考慮對(duì)這些位的比較。在分支表達(dá)式中,可用“?”來標(biāo)識(shí)x或z。
3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院872023/7/23modulemux_z(out,a,b,c,d,select);outputout;inputa,b,c,d;input[3:0]select;regout;//必須聲明
always@(select[3:0]oraorborcord)begin
casez(select)4’b???1:out=a;
4’b??1?:out=b;
4’b?1??:out=c;
4’b1???:out=d;
endcaseendendmodule[例]用casez描述的數(shù)據(jù)選擇器這里“?”表示高阻態(tài)3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院882023/7/233.2.3使用條件語句注意事項(xiàng)應(yīng)注意列出所有條件分支,否則當(dāng)條件不滿足時(shí),編譯器會(huì)生成一個(gè)鎖存器保持原值!這一點(diǎn)可用于設(shè)計(jì)時(shí)序電路,如計(jì)數(shù)器:條件滿足時(shí)加1,否則保持原值不變。而在組合電路設(shè)計(jì)中,應(yīng)避免生成隱含鎖存器!有效的方法是在if語句最后寫上else項(xiàng);在case語句最后寫上default項(xiàng)。3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院892023/7/23如何正確使用if語句?生成了不想要的鎖存器:不會(huì)生成鎖存器:always@(alord)beginif(al)q<=d;
enddDFFD
Qalq[例]設(shè)計(jì)一個(gè)數(shù)據(jù)選擇器always@(alord)beginif(al)q<=d;
elseq<=0;
end0dalqmultiplexer當(dāng)al為0時(shí),q保持原值!當(dāng)al為0時(shí),q等于0!3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院902023/7/23always@(sel[1:0]oraorb)case(sel[1:0])2’b00:q<=a;
2’b11:q<=b;
endcase生成了不想要的鎖存器:[例]設(shè)計(jì)一個(gè)數(shù)據(jù)選擇器always@(sel[1:0]oraorb)case(sel[1:0])2’b00:q<=a;
2’b11:q<=b;
default:q<=’b0;
endcase不會(huì)生成鎖存器:如何正確使用case語句?當(dāng)sel為00或11以外的值時(shí),q保持原值!避免生成鎖存器的原則:如果用到if語句,最好寫上else項(xiàng);如果用到case語句,最好寫上default項(xiàng)。3.2條件語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院912023/7/231.for語句2.repeat語句3.while和forever語句4.forever語句內(nèi)容概要3.3循環(huán)語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院922023/7/23循環(huán)語句分為4種:for語句——通過3個(gè)步驟來決定語句的循環(huán)執(zhí)行:(1)給控制循環(huán)次數(shù)的變量賦初值。(2)判定循環(huán)執(zhí)行條件,若為假則跳出循環(huán);若為真,則執(zhí)行指定的語句后,轉(zhuǎn)到第(3)步。(3)修改循環(huán)變量的值,返回第(2)步。repeat語句——連續(xù)執(zhí)行一條語句n次while語句——執(zhí)行一條語句,直到循環(huán)執(zhí)行條件不滿足;若一開始條件即不滿足,則該語句一次也不能被執(zhí)行!forever語句——無限連續(xù)地執(zhí)行語句,可用disable語句中斷!3.3循環(huán)語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院932023/7/233.3.1for語句for
(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句for(循環(huán)變量賦初值;循環(huán)執(zhí)行條件;循環(huán)變量增值)執(zhí)行語句兩條語句8條語句一般形式簡單應(yīng)用形式相當(dāng)于采用while語句建立的循環(huán)結(jié)構(gòu):begin
循環(huán)變量賦初值;
while(循環(huán)執(zhí)行條件)begin<執(zhí)行語句>
循環(huán)變量增值;
endendfor語句比while語句簡潔!3.3循環(huán)語句計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院942023/7/23[例]用for語句描述的7人投票表決器:若超過4人(含4人)投贊成票,則表決通過。modulevote7(pass,vote); outputpass; input[6:0]vote; reg[2:0]sum;//sum為reg型變量,用于統(tǒng)計(jì)贊成的人數(shù)
integeri;regpass;always@(vote)beginsum=0;//sum初值為0
for(i=0;i<=6;i=i+1)
//for語句
if(vote[i])sum=sum+1;
//只要有人投贊成票,則sum加1
if(sum[2])pass=1;//若超過4人贊成,則表決通過
elsepass=0;e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鮮花烤奶課程設(shè)計(jì)
- 自來水收費(fèi)系統(tǒng)課程設(shè)計(jì)
- 補(bǔ)牙系統(tǒng)課程設(shè)計(jì)
- 2025年度藝術(shù)品代購代發(fā)市場推廣協(xié)議4篇
- 鐵路線路課程設(shè)計(jì)
- 年度數(shù)字視頻切換臺(tái)市場分析及競爭策略分析報(bào)告
- 年度工藝禮品加工設(shè)備市場分析及競爭策略分析報(bào)告
- 2024年央行金融政策和法律法規(guī)測試題及答案匯編
- 二零二五年駕校場地租賃與師資力量引進(jìn)協(xié)議3篇
- 重卡汽配配件課程設(shè)計(jì)
- 微信小程序運(yùn)營方案課件
- 抖音品牌視覺識(shí)別手冊(cè)
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動(dòng)學(xué)研究
- 安全施工專項(xiàng)方案報(bào)審表
- 學(xué)習(xí)解讀2022年新制定的《市場主體登記管理?xiàng)l例實(shí)施細(xì)則》PPT匯報(bào)演示
- 好氧廢水系統(tǒng)調(diào)試、驗(yàn)收、運(yùn)行、維護(hù)手冊(cè)
- 中石化ERP系統(tǒng)操作手冊(cè)
- 五年級(jí)上冊(cè)口算+脫式計(jì)算+豎式計(jì)算+方程
- 氣體管道安全管理規(guī)程
- 《眼科學(xué)》題庫
- 交通燈控制系統(tǒng)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論