Verilog HDL數(shù)字集成電路設(shè)計(jì)方法概述及基礎(chǔ)知識(shí)_第1頁(yè)
Verilog HDL數(shù)字集成電路設(shè)計(jì)方法概述及基礎(chǔ)知識(shí)_第2頁(yè)
Verilog HDL數(shù)字集成電路設(shè)計(jì)方法概述及基礎(chǔ)知識(shí)_第3頁(yè)
Verilog HDL數(shù)字集成電路設(shè)計(jì)方法概述及基礎(chǔ)知識(shí)_第4頁(yè)
Verilog HDL數(shù)字集成電路設(shè)計(jì)方法概述及基礎(chǔ)知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

11/11/20241VerilogHDL數(shù)字集成電路設(shè)計(jì)原理與應(yīng)用VerilogHDL數(shù)字集成電路設(shè)計(jì)方法概述

11/11/20242數(shù)字集成電路的發(fā)展和設(shè)計(jì)方法的演變數(shù)字集成電路復(fù)雜度趨勢(shì)數(shù)字集成電路設(shè)計(jì)方法的演變11/11/20243以單元為基礎(chǔ)以RTL綜合為基礎(chǔ)以IP為基礎(chǔ)70年代單片系統(tǒng)80年代90年代當(dāng)前多塊印刷版系片上系統(tǒng)以元件為基礎(chǔ)集成電路的發(fā)展經(jīng)過(guò)了三個(gè)主要階段第一次變革是在上世紀(jì)70年代:以加工制造為主導(dǎo)的IC(IntegratedCircuit)產(chǎn)業(yè)發(fā)展的初級(jí)階段,主流產(chǎn)品是簡(jiǎn)單微處理器(MicroProcessorUnit,MPU)、存儲(chǔ)器以及標(biāo)準(zhǔn)通用邏輯電路。第二次變革是在上世紀(jì)80年代:是標(biāo)準(zhǔn)工藝加工線(Foundry)公司與IC設(shè)計(jì)公司共同發(fā)展的階段,主流產(chǎn)品是MPU、微控制器(MicroControlUnit,MCU)及專用IC(Application-SpecificIC,ASIC)。第三次變革是在上世紀(jì)90年代:IC產(chǎn)業(yè)的“四業(yè)”開始分離,功能強(qiáng)大的通用型中央處理器(CentralProcessingUnit,CPU)和信號(hào)處理器(DigitalSignalProcessing,DSP)成為產(chǎn)業(yè)新的增長(zhǎng)點(diǎn)。第四次變革正在進(jìn)行:IC產(chǎn)業(yè)開始以Fundry為主導(dǎo),IP的使用廣泛。11/11/20244硬件描述語(yǔ)言(HDL)產(chǎn)生基礎(chǔ):C、FORTRAN、Pascal等程序化設(shè)計(jì)語(yǔ)言,極大提高了計(jì)算機(jī)軟件程序設(shè)計(jì)的效率和可靠性;硬件描述語(yǔ)言HDL(HardwareDescriptionLanguage,HDL):它是一種高級(jí)程序語(yǔ)言,通過(guò)對(duì)數(shù)字電路和系統(tǒng)的語(yǔ)言描述,可以對(duì)數(shù)字集成電路進(jìn)行設(shè)計(jì)和驗(yàn)證;主要功能:數(shù)字集成電路設(shè)計(jì)工程師可以根據(jù)電路結(jié)構(gòu)的特點(diǎn),采用層次化的設(shè)計(jì)結(jié)構(gòu),將抽象的邏輯功能用電路的方式進(jìn)行實(shí)現(xiàn)。11/11/20245主要硬件描述語(yǔ)言主要HDL語(yǔ)言:GatewayDesignAutomation公司的VerilogHDL;美國(guó)國(guó)防高級(jí)計(jì)劃研究局(DARPA)設(shè)計(jì)的VHDL,美國(guó)國(guó)防部的基于面向?qū)ο蟮腛OVHDL,美國(guó)杜克大學(xué)的DEVHDL,美國(guó)電氣和電子工程師協(xié)會(huì)支持的VITAL等。目前VerilogHDL和VHDL語(yǔ)言是目前主要的兩種HDL語(yǔ)言,并分別在1995年和1987年被采納為IEEE國(guó)際標(biāo)準(zhǔn),廣泛用于數(shù)字集成電路的設(shè)計(jì)和驗(yàn)證領(lǐng)域11/11/20246

VerilogHDL發(fā)展11/11/20247有關(guān)VerilogHDL的全部權(quán)利移交OVI(OpenVerilogInternational)VerilogHDL公開發(fā)表Cadence公司購(gòu)買Verilog版權(quán)SystemVerilogIEEE1800-2005標(biāo)準(zhǔn)公開發(fā)表VerilogIEEE1364-2001標(biāo)準(zhǔn)公開發(fā)表模擬和數(shù)字都適用的Verilog標(biāo)準(zhǔn)公開發(fā)表VerilogIEEE1364-1995標(biāo)準(zhǔn)公開發(fā)表Verilog-XL誕生19891990199080年代2005200119991995OVI提出了用來(lái)描述模擬電路的硬件描述語(yǔ)言Verilog-A1996

VerilogHDL國(guó)際標(biāo)準(zhǔn)11/11/20248名稱時(shí)間備注VerilogIEEE1364-19951995年12月基于VerilogHDL的優(yōu)越性,IEEE制定了VerilogHDL的IEEE標(biāo)準(zhǔn),即VerilogHDL1364-1995Verilog-A1996年Verilog-A是由OVI提出的一種硬件描述語(yǔ)言。是模擬電路行業(yè)的標(biāo)準(zhǔn)建模語(yǔ)言,來(lái)源于IEEE1364Verilog規(guī)范1999年模擬和數(shù)字都適用的Verilog標(biāo)準(zhǔn)公開發(fā)表VerilogIEEE1364-20012001年IEEE制定了VerilogIEEE1364-2001標(biāo)準(zhǔn),并公開發(fā)表;其中HDL部分相對(duì)于1995標(biāo)準(zhǔn)有較大增強(qiáng),PLI部分變化不大SystemVerilogIEEE1800-20052005年此標(biāo)準(zhǔn)是繼VHDL和VerilogHDL之后,仿真工具支持的語(yǔ)言,它建立在VerilogHDL語(yǔ)言的基礎(chǔ)上,是IEEE1364Verilog-2001標(biāo)準(zhǔn)的擴(kuò)展增強(qiáng),兼容Verilog-2001,并將成為下一代硬件設(shè)計(jì)和驗(yàn)證的語(yǔ)言VerilogHDL和VHDL11/11/20249VerilogSystemVerilogVHDLVITAL開關(guān)電路級(jí)邏輯門級(jí)寄存器傳輸級(jí)算法級(jí)系統(tǒng)級(jí)描述和抽象能力圖1.4VerilogHDL和VHDL建模能力比較用VHDL建立ASIC模型庫(kù)的基準(zhǔn)VerilogHDL在數(shù)字集成電路設(shè)計(jì)中的優(yōu)點(diǎn)例1:11/11/202410(a)4位總線與邏輯(b)32位總線與邏輯moduleaand4(a,b,c);input[3:0]a,b;output[3:0]c;reg[3:0]c;always@(aorb)c=a&b;endmodulemoduleaand32(a,b,c);input[31:0]a,b;output[31:0]c;reg[31:0]c;always@(aorb)c=a&b;endmodule原理圖方式VerilogHDL描述方式VerilogHDL在數(shù)字集成電路設(shè)計(jì)中的優(yōu)點(diǎn)11/11/202411例2:4位移位寄存器moduleshiftregist4(clk,din,Reset,qout);inputclk,Reset,din;output[3:0]qout;reg[3:0]qout;always@(posedgeclkorposedgeReset)beginif(Reset)qout<=4’b0000;elsebeginqout[3]<=qout[2];qout[2]<=qout[1];qout[1]<=qout[0];qout[0]<=din;endendendmoduleVerilogHDL在數(shù)字集成電路設(shè)計(jì)中的優(yōu)點(diǎn)11/11/202412例2:8位移位寄存器moduleshiftregist8(clk,din,Reset,qout);inputclk,Reset,din;output[7:0]qout;reg[7:0]qout;always@(posedgeclkorposedgeReset)beginif(Reset)qout<=8'b00000000;elsebeginqout[7:1]<=qout[6:0];qout[0]<=din;endendendmodule功能模塊的可重用性11/11/202413由于模塊的可重用性對(duì)于硬件電路開發(fā)效率的提高至關(guān)重要。因此業(yè)界提出了數(shù)字集成電路的軟核、硬核和固核的概念。.(1)“軟核”(SoftCore)一般是指經(jīng)過(guò)功能驗(yàn)證、5000門以上的可綜合VerilogHDL或VHDL模型;(2)“固核”(FirmCore)通常是指在ASIC和FPGA器件上,經(jīng)過(guò)綜合驗(yàn)證、大于5000門以上的電路網(wǎng)表文件;(3)“硬核”(HardCore)通常是指在ASIC器件上,經(jīng)過(guò)驗(yàn)證正確的、大于5000門以上的電路結(jié)構(gòu)版圖掩模。VerilogHDL數(shù)字集成電路設(shè)計(jì)流程中作用11/11/202414VerilogHDL基礎(chǔ)知識(shí)11/11/2024152.1VerilogHDL語(yǔ)言要素2.1.1空白符:空白符包括空格符(\b)、制表符(\t)、換行符和換頁(yè)符。在編譯和綜合時(shí),空白符被忽略。

例:initialbegina=3’b100;b=3’b010;end與相當(dāng)initialbegina=3’b100; b=3’b010;end11/11/2024162.1.2注釋符(1)單行注釋:以“//”開始,VerilogHDL忽略從此處到行尾的內(nèi)容。(2)多行注釋:多行注釋以“/*”開始,到“*/”結(jié)束,VerilogHDL忽略其中的注釋內(nèi)容。例:?jiǎn)涡凶⑨?assigna=b&c;//單行注釋多行注釋 assigna[3:0]=b[3:0]&c[3:0;];/*注釋行1

注釋行2*/非法多行注釋:/*注釋內(nèi)容/*多行注釋嵌套多行注釋*/注釋內(nèi)容*/合法多行注釋:/*注釋內(nèi)容//多行注釋嵌套單行注釋*/11/11/2024172.1.3標(biāo)識(shí)符在VerilogHDL中標(biāo)識(shí)符(Identifier)被用來(lái)命名信號(hào)名、模塊名、參數(shù)名等,它可以是任意一組字母、數(shù)字、$

符號(hào)和_(下劃線)符號(hào)的組合。應(yīng)該注意的是標(biāo)識(shí)符的字母區(qū)分大小寫,并且第一個(gè)字符必須是字母或者下劃線。11/11/202418例2.1-3:合法標(biāo)示符countCOUNT//與count不同_CC_G5 B25_78SIX例2.1-4:非法標(biāo)示符30count //標(biāo)識(shí)符不允許以數(shù)字開頭out* //標(biāo)識(shí)符中不允許包含字符*a+b-c //標(biāo)識(shí)符中不允許包含字符+和-n@238 //標(biāo)識(shí)符中不允許包含字符@2.1.3轉(zhuǎn)義標(biāo)示符

VerilogHDL規(guī)定了轉(zhuǎn)義標(biāo)識(shí)符(EscapedIdentifier)。采用轉(zhuǎn)義標(biāo)識(shí)符可以在一條標(biāo)識(shí)符中包含任何可打印字符,轉(zhuǎn)義標(biāo)識(shí)符以“\”(反斜線)符號(hào)開頭,以空白結(jié)尾(空白可以是一個(gè)空格、一個(gè)制表字符或換行符)。11/11/202419例2.1-5:\a+b=c\7400\.*.$\{******}\~Q\OutGate //與OutGate相同

2.1.4關(guān)鍵字

VerilogHDL語(yǔ)言內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字或保留字,它是VerilogHDL語(yǔ)言內(nèi)部的專用詞,是事先定義好的確認(rèn)符,用來(lái)組織語(yǔ)言結(jié)構(gòu),這些關(guān)鍵字用戶不能隨便使用。需注意的是,所有關(guān)鍵字都是小寫的。例如,ALWAYS不是關(guān)鍵字,它只是標(biāo)識(shí)符,與always(關(guān)鍵字)是不同的。關(guān)鍵字列表參見2.1.4節(jié)。11/11/2024202.1.5

數(shù)值VerilogHDL有四種基本的邏輯數(shù)值狀態(tài)11/11/202421狀態(tài)含義0低電平、邏輯0或“假”1高電平、邏輯1或“真”x或X不確定或未知的邏輯狀態(tài)z或Z高阻態(tài)整數(shù)及其表示11/11/202422數(shù)制基數(shù)符號(hào)合法表示符二進(jìn)制b或B0、1、x、X、z、Z、?、_八進(jìn)制o或O0~7、x、X、z、Z、?、_十進(jìn)制d或D0~9、_十六進(jìn)制h或H0~9、a~f、A~F、x、X、z、Z、?、_+/-<size>’<base_format><number>例2.1-6:正確的表示8’b10001101//位寬為8位的二進(jìn)制數(shù)100011018’ha6//位寬為8位的十六進(jìn)制數(shù)a65’o35//5位八進(jìn)制數(shù)354’d6//4位十進(jìn)制數(shù)64’b1x_01//4位二進(jìn)制數(shù)1x01例2.1-7:錯(cuò)誤的表示4’d-4//數(shù)值不能為負(fù),有負(fù)號(hào)應(yīng)放最左邊3’b001 //’和基數(shù)b之間不允許出現(xiàn)空格(4+4)’b11//位寬不能是表達(dá)式形式

實(shí)數(shù)及其表示(1)十進(jìn)制表示法,采用十進(jìn)制格式,小數(shù)點(diǎn)兩邊必須都有數(shù)字,否則為非法的表示形式。例如:3.0,4.54,0.2等等都是正確的,而5.就是錯(cuò)誤扯,因?yàn)樾?shù)點(diǎn)兩側(cè)都必須要有數(shù)字。(2)科學(xué)計(jì)數(shù)法。例如:564.2e2的值為56420.0,8.7E2的值為870.0(e不分大小寫),3E-3的值為0.003。11/11/202423例2.1-82.7 //十進(jìn)制計(jì)數(shù)法5.2e8 //科學(xué)計(jì)數(shù)法3.5E-6 //科學(xué)計(jì)數(shù)法可用e或E表示,其結(jié)果相同5_4582.2158_5896 //使用下劃線提高可讀性6. //非法表示.3e5 //非法表示2.2數(shù)據(jù)類型物理數(shù)據(jù)類型:連線型、寄存器型和存儲(chǔ)器型數(shù)據(jù)類型;信號(hào)強(qiáng)度表示數(shù)字電路中不同強(qiáng)度的驅(qū)動(dòng)源,用來(lái)解決不同驅(qū)動(dòng)強(qiáng)度存在下的賦值沖突:11/11/202424標(biāo)記符名稱類型強(qiáng)弱程度supply電源級(jí)驅(qū)動(dòng)驅(qū)動(dòng)最強(qiáng)最弱strong強(qiáng)驅(qū)動(dòng)驅(qū)動(dòng)pull上拉級(jí)驅(qū)動(dòng)驅(qū)動(dòng)large大容性存儲(chǔ)weak弱驅(qū)動(dòng)驅(qū)動(dòng)medium中性驅(qū)動(dòng)存儲(chǔ)small小容性存儲(chǔ)highz高容性高阻2.2.1物理數(shù)據(jù)類型1.連線型11/11/202425連線型數(shù)據(jù)類型功能說(shuō)明wire,tri標(biāo)準(zhǔn)連線(缺省為該類型)wor,trior多重驅(qū)動(dòng)時(shí),具有線或特性的連線型wand,trand多重驅(qū)動(dòng)時(shí),具有線與特性的連線型trireg具有電荷保持特性的連線型數(shù)據(jù)(特例)tri1上拉電阻tri0下拉電阻supply1電源線,用于對(duì)電源建模,為高電平1supply0電源線,用于對(duì)“地”建模,為低電平0(1)wire和tri(2)wor和trior11/11/202426wire/tri01xz00xx01x1x1xxxxxz01xzwor/trior01xz001x011111xx1xxz01xz2.寄存器型:reg型是數(shù)據(jù)儲(chǔ)存單元的抽象類型,其對(duì)應(yīng)的硬件電路元件具有狀態(tài)保持作用,能夠存儲(chǔ)數(shù)據(jù),如觸發(fā)器、鎖存器等。reg型變量常用于行為級(jí)描述,由過(guò)程賦值語(yǔ)句對(duì)其進(jìn)行賦值。reg型變量簡(jiǎn)單例子:rega; //定義一個(gè)一位的名為a的reg變量reg[3:0]b; //定義一個(gè)4位的名為b的reg型變量reg[8:1]c,d,e; //定義了三個(gè)名稱分別為c、d、e的8位的reg型變量reg型變量一般為無(wú)符號(hào)數(shù),若將一個(gè)負(fù)數(shù)賦給reg型變量,則自動(dòng)轉(zhuǎn)換成其二進(jìn)制補(bǔ)碼形式。例如:regsigned[3:0]rega;rega=-2; //rega的值為1110(14),是2的補(bǔ)碼11/11/2024272.2.2

連線型和reg型數(shù)據(jù)類型的聲明連線型數(shù)據(jù)類型的聲明

<net_declaration><drive_strength><range><delay>[list_of_variables];net_declaration包括wire、tri、tri0、tri1、wand、triand、trior、wor中的任意一種。range:用來(lái)指定數(shù)據(jù)為標(biāo)量或矢量。若該項(xiàng)默認(rèn),表示數(shù)據(jù)類型為1位的標(biāo)量,超過(guò)1位則為矢量形式。delay:指定仿真延遲時(shí)間。list_of_variables:變量名稱,一次可定義多個(gè)名稱,之間用逗號(hào)分開。drive_strength:表示連線變量的驅(qū)動(dòng)強(qiáng)度。11/11/202428寄存器型數(shù)據(jù)類型的聲明

reg<range><list_of_register_variables>;range為可選項(xiàng),它指定了reg型變量的位寬,缺省時(shí)為1位。<list_of_register_variables>為變量名稱列表,一次可以定義多個(gè)名稱,之間用逗號(hào)分開。11/11/202429例2.2-2物理數(shù)據(jù)類型聲明的例子regrega; //定義一個(gè)1位的寄存器型變量reg[7:0]regb; //定義一個(gè)8位的寄存器型變量tri[7:0]tribus; //定義一個(gè)8位的三態(tài)總線tri0[15:0]busa; //定義一個(gè)16位的連線型,處于三態(tài)時(shí)為上拉電阻tri1[31:0]busb; //定義一個(gè)32為的連線型,處于三態(tài)時(shí)為下拉電阻regscalared[1:4]b; //定義一個(gè)4位的標(biāo)量型寄存器矢量wire(pull1,strong0)c=a+b;//定義一個(gè)1和0的驅(qū)動(dòng)強(qiáng)度不同的1位連線型變量ctrireg(large)storeline; //定義一個(gè)具有大強(qiáng)度的電荷存儲(chǔ)功能的存儲(chǔ)線11/11/2024302.2.3

存儲(chǔ)器型存儲(chǔ)器型變量可以描述RAM型、ROM型存儲(chǔ)器以及reg文件。存儲(chǔ)器變量的一般聲明格式為:reg<range1><name_of_register><range2>;range1和range2都是可選項(xiàng),缺省都為1。<range1>:表示存儲(chǔ)器當(dāng)中寄存器的位寬,格式為[msb:lsb]。<range2>:表示寄存器的個(gè)數(shù),格式為[msb:lsb],即有msb-lsb+1個(gè)。<name_of_register>為變量名稱列表,一次可以定義多個(gè)名稱,之間用逗號(hào)分開。11/11/202431例2.2-3:reg[7:0]mem1[255:0];

//定義了一個(gè)有256個(gè)8位寄存器的存儲(chǔ)器mem1

//地址范圍是0到255。reg[15:0]mem2[127:0],reg1,reg2; //定義了一個(gè)具有128個(gè)16位寄存器的存儲(chǔ)器mem2 //和兩個(gè)16位的寄存器reg1和reg2例2.2-4:reg[n-1:0]a; //表示一個(gè)n位的寄存器aregmem1[n-1:0]; //表示一個(gè)由n個(gè)1位寄存器構(gòu)成的存儲(chǔ)器mem111/11/2024322.2.4

抽象數(shù)據(jù)類型抽象數(shù)據(jù)類型主要包括整型(integer)、時(shí)間型(time)、實(shí)型(real)及參數(shù)型(parameter)。整型integer<list_of_register_variables>;例2.2-6:integerindex; //簡(jiǎn)單的32位有符號(hào)整數(shù)integeri[31:0] //定義了整型數(shù)組,它有32個(gè)元素11/11/202433時(shí)間型時(shí)間型數(shù)據(jù)與整型數(shù)據(jù)相類似,只是它是64位的無(wú)符號(hào)數(shù)。時(shí)間型數(shù)據(jù)主要用于對(duì)模擬時(shí)間的存儲(chǔ)與計(jì)算處理,常與系統(tǒng)函數(shù)$time一起使用。時(shí)間型數(shù)據(jù)的聲明格式為:time<list_of_register_variables>;例如:timea,b; //定義了兩個(gè)64位的時(shí)間型變量11/11/202434實(shí)型:實(shí)型數(shù)據(jù)在機(jī)器碼表示法中是浮點(diǎn)型數(shù)值,可用于對(duì)延遲時(shí)間的計(jì)算。實(shí)型數(shù)據(jù)的聲明格式如下:real<list_of_variables>;例如:realstime;

//定義了一個(gè)實(shí)數(shù)型數(shù)據(jù)參數(shù)型(parameter):屬于常量,在仿真開始之前就被賦值,在仿真過(guò)程中保持不變,以提高程序的可讀性和維護(hù)性。參數(shù)類型的定義格式為:parameter參數(shù)名1=表達(dá)式1,參數(shù)名2=表達(dá)式2,…,參數(shù)名n=表達(dá)式n;例2.2-7: parameterlength=32,weight=16; parameterPI=3.14,LOAD=4’b1101; parameterDELAY=(BYTE+BIT)/2;11/11/2024352.3運(yùn)算符和表達(dá)式11/11/202436Verilog運(yùn)算符功能運(yùn)算符的優(yōu)先級(jí)別!、~反邏輯、位反相高優(yōu)先級(jí)別

低優(yōu)先級(jí)別*、/、%乘、除、取模+、-加、減<<、>>左移、右移<、<=、>、>=小于、小于等于、大于、大于等于==、!=、===、!==等、不等、全等、非全等&按位與^、^~按位邏輯異或和同或|按位邏輯或&&邏輯與||邏輯或?:條件運(yùn)算符,唯一的三目運(yùn)算符,等同于if-else2.3.1算術(shù)操作符加法(+);減法(-);乘法(*);除法(/);取模(%)。(1)算術(shù)操作結(jié)果的位寬算術(shù)表達(dá)式結(jié)果的長(zhǎng)度由最長(zhǎng)的操作數(shù)決定。在賦值語(yǔ)句下,算術(shù)操作結(jié)果的長(zhǎng)度由操作左端目標(biāo)長(zhǎng)度決定。例2.3-1: reg[3:0]A,B,C; reg[5:0]D; A=B+C; //4位 D=B+C; //6位11/11/202437(2)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的使用

例2.3-2: modulearith_tb; reg[3:0]a; reg[2:0]b; initial begin a=4'b1111; //15 b=3'b011; //3 $display("%b",a*b); //乘法運(yùn)算,結(jié)果為4'b1101,高位被舍去 //等于45的低四位 $display("%b",a/b); //除法運(yùn)算,結(jié)果為4'b0101 $display("%b",a+b); //加法運(yùn)算,結(jié)果為4'b0010 $display("%b",a-b); //減法運(yùn)算,結(jié)果為4'b1100 $display("%b",a%b); //取模運(yùn)算,結(jié)果為4'b0000 end endmodule11/11/2024382.3.2關(guān)系操作符大于“>”、小于“<”、大于等于“>=”和小于等于“<=”。

例2.3-3: modulerela_tb; reg[3:0]a,b,c,d; initial begin a=3;

b=6;

c=1;

d=4'hx; $display(a<b); //結(jié)果為真1 $display(a>b); //結(jié)果為假0 $display(a<=c); //結(jié)果為假0 $display(d<=a); //結(jié)果為未知數(shù)x end endmodule11/11/2024392.3.3相等關(guān)系操作符等于“==”、不等于“!=”、全等“===”、非全等“!==”比較的結(jié)果有三種,即真“1”、假“0”和不定值“x”11/11/202440表2.3-2(a)“==”

運(yùn)算符的真值表===01xz0100010100x0010z0001表2.3-2(b)“===”運(yùn)算符的真值表==01xz010xx101xxxxxxxzxxxx例2.3-4:moduleequal_tb;reg[3:0]a,b,c;reg[1:0]d;initial

begin a=4'b0xx1; b=4'b0xx1; c=4'b0011; d=2'b11; $display(a==b);//結(jié)果為不定值x $display(c==d);//結(jié)果為真1 $display(a===b);//結(jié)果為真1 $display(c===d);//結(jié)果為假0

endendmodule2.3.4邏輯運(yùn)算符邏輯與運(yùn)算符“&&”、邏輯或運(yùn)算符“||”、邏輯非運(yùn)算符“!”例如:寄存器變量a,b的初值分別為4’b1110和4’b0000,則:!a=0,!b=1,a&&b=0;a||b=1。例如:a的初值分別為4’b1100,b的初值分別為4’b01x0,則!a=0,!b=x,a&&b=x,a||b=x。操作數(shù)中存在不定態(tài)x,則邏輯運(yùn)算的結(jié)果也是不定態(tài)11/11/202441ab!a!ba&&ba||b1100111001010110010011002.3.5按位運(yùn)算符按位取反“~”、按位與“&”、按位或“|”、按位異或^、按位同或^~11/11/202442按位與真值表&01x0000101xx0xx例2.3-5:modulebit_tb;reg[4:0]a;reg[4:0]b;initialbegina=5'b101; //運(yùn)算的時(shí)候a自動(dòng)變?yōu)?’b00101b=5'b11101;$display("%b",~a); //結(jié)果為5'b11010$display("%b",~b); //結(jié)果為5'b00010$display("%b",a&b); //結(jié)果為5'b00101$display("%b",a|b); //結(jié)果為5'b11101$display("%b",a^b); //結(jié)果為5'b11000endendmodule2.3.6歸約運(yùn)算符(縮位運(yùn)算符)與“&”、或“|”、異或“^”,以及相應(yīng)的非操作“~&”、“~|”、“~^”、“^~”11/11/202443例2.3-6:modulecut-_tb;reg[5:0]a;initialbegina=6'b101011;$display("%b",&a);//結(jié)果為1'b0$display("%b",|a);//結(jié)果為1'b1$display("%b",^a); //結(jié)果為1'b0endendmodule2.3.7移位操作符左移位運(yùn)算符“<<”、右移位運(yùn)算符“>>”。運(yùn)算過(guò)程是將左邊(右邊)的操作數(shù)向左(右)移,所移動(dòng)的位數(shù)由右邊的操作數(shù)來(lái)決定,然后用0來(lái)填補(bǔ)移出的空位。11/11/202444例2.3-7:moduleshift_tb;reg[5:0]a,b,c,d;reg[7:0]e;initial begin a=6'b101101; b=a<<2; c=a>>3; d=a<<7; e=a<<2; $display("%b",b);//結(jié)果為6'b110100 $display("%b",c);//結(jié)果為6'b000101 $display("%b",d);//結(jié)果為6'b000000 $display("%b",e);//結(jié)果為8'b10110100 endendmodule2.3.8條件運(yùn)算符表達(dá)形式如下:<條件表達(dá)式>?<表達(dá)式1>:<表達(dá)式2>條件表達(dá)式的計(jì)算結(jié)果有真“1”、假“0”和未知態(tài)“x”三種,當(dāng)條件表達(dá)式的結(jié)果為真時(shí),執(zhí)行表達(dá)式1,當(dāng)條件表達(dá)式的結(jié)果為假時(shí),執(zhí)行表達(dá)式2。11/11/202445例2.3-8:modulemux2(in1,in2,sel,out);input[3:0]in1,in2;inputsel;output[3:0]out;assignout=(!sel)?in1:in2; //sel為0時(shí)out等于in1,反之out等于in2endmodule2選1數(shù)據(jù)選擇器2.3.9連接和復(fù)制運(yùn)算符連接運(yùn)算符“{}”和復(fù)制運(yùn)算符“{{}}”連接操作符{信號(hào)1的某幾位,信號(hào)2的某幾位,…,信號(hào)n的某幾位}重復(fù)操作符

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論