第一部分 Verilog數(shù)字設(shè)計基礎(chǔ)_第1頁
第一部分 Verilog數(shù)字設(shè)計基礎(chǔ)_第2頁
第一部分 Verilog數(shù)字設(shè)計基礎(chǔ)_第3頁
第一部分 Verilog數(shù)字設(shè)計基礎(chǔ)_第4頁
第一部分 Verilog數(shù)字設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩290頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一部分Verilog數(shù)字設(shè)計基礎(chǔ)第一章Verilog的基本知識第二章Verilog語法的基本概念第三章模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運(yùn)算符號第四章運(yùn)算符、賦值語句和結(jié)構(gòu)說明語句第五章條件語句、循環(huán)語句、塊語句與生成語句第六章結(jié)構(gòu)語句、系統(tǒng)任務(wù)、函數(shù)語句和顯示系統(tǒng)任務(wù)第七章調(diào)試用系統(tǒng)任務(wù)和常用編譯預(yù)處理語句第八章語法概念總復(fù)習(xí)練習(xí)第一部分Verilog數(shù)字設(shè)計基礎(chǔ)第1章Verilog的基本知識1.1硬件描述語言HDL1.2VerilogHDL的歷史1.3VerilogHDL和VHDL的比較1.4Verilog的應(yīng)用情況和適用的設(shè)計1.5采用VerilogHDL設(shè)計復(fù)雜數(shù)字電路的優(yōu)點(diǎn)1.6采用VerilogHDL的設(shè)計流程簡介第1章Verilog的基礎(chǔ)知識1.1硬件描述語言HDL概念:硬件描述語言HDL(HardwareDescriptionLanguage)是一種形式化方法來描述數(shù)字電路和系統(tǒng)的語言。IEEE標(biāo)準(zhǔn)VerilogHDLVHDLHDL兩種國際標(biāo)準(zhǔn):HDL功能數(shù)字系統(tǒng)仿真、驗證(全部語法支持)數(shù)字系統(tǒng)設(shè)計、綜合(部分語法支持)HDL功能:§1.1硬件描述語言HDL1.2VerilogHDL的歷史1.2.1什么是VerilogHDL

VerilogHDL是硬件描述語言的一種,用于數(shù)字系統(tǒng)設(shè)計。設(shè)計者可用它進(jìn)行各種級別的邏輯設(shè)計,可用它進(jìn)行數(shù)字邏輯系統(tǒng)的仿真驗證、時序分析、邏輯綜合。

注:它是目前應(yīng)用最廣泛的一種硬件描述語言。目前在美國90%以上的ASIC、FPGA開發(fā)使用HDL,全美國有200多所大學(xué)講授Verilog語言的設(shè)計方法。在臺灣地區(qū)幾乎所有著名大學(xué)的電子和計算機(jī)工程系都講授與Verilog有關(guān)的課程。1.2.1什么是VerilogHDL§1.2VerilogHDL的歷史Verilog-XL誕生1980’sCadence公司購買Verilog版權(quán)1989VerilogHDL公開發(fā)表、Verilog移交給OVI組織19901995Verilog

IEEE1364-1995標(biāo)準(zhǔn)公開發(fā)表1999模擬和數(shù)字都適用的Verilog標(biāo)準(zhǔn)公開發(fā)表Verilog

IEEE1364-2001標(biāo)準(zhǔn)公開發(fā)表20012005SystemVerilog

IEEE1800-2005標(biāo)準(zhǔn)公開發(fā)表圖1.1Verilog的發(fā)展歷史§1.2.2VerilogHDL的產(chǎn)生及發(fā)展1.3VerilogHDL和VHDL的比較§1.3VerilogHDL和VHDL的比較共同點(diǎn)能形式化的抽象表示電路的行為和結(jié)構(gòu);支持邏輯設(shè)計中層次與范圍的描述;可借用高級語言的精巧結(jié)構(gòu)來簡化電路行為的描述;具有電路仿真與驗證機(jī)制以保證設(shè)計的正確性;支持電路描述由高層到低層的綜合轉(zhuǎn)換;硬件描述與實(shí)現(xiàn)工藝無關(guān);便于文檔管理;易于理解和設(shè)計重用。VHDL-------VHSICHardwareDescriptionLanguage,VHSIC則是VeryHighSpeedIntegeratedCircuit的縮寫詞Verilog擁有更廣泛的設(shè)計群體,成熟的資源也比VHDL豐富;2005年以前,Verilog在系統(tǒng)級抽象方面比VHDL略差一些,而在門級開關(guān)電路描述方面比VHDL強(qiáng)的多。2005年后,系統(tǒng)抽象能力得到徹底改變。與VHDL相比,VerilogHDL容易掌握,與C語言類似。不同點(diǎn)圖1.2VerilogHDL與VHDL建模能力的比較2005年公布的SystemVerilogIEEE1800-2005標(biāo)準(zhǔn)使Verilog的可綜合性能和系統(tǒng)仿真性能得到大幅度提高,IP重用有了重大突破。VHDLVITAL開關(guān)電路級邏輯門級寄存器傳輸級算法級系統(tǒng)級VerilogSystemVerilog§1.3VerilogHDL和VHDL的比較1.4Verilog的應(yīng)用情況和適用的設(shè)計

在高層次數(shù)字系統(tǒng)設(shè)計領(lǐng)域,Verilog已經(jīng)取得壓倒性的優(yōu)勢——Verilog在門級描述的底層,比VHDL有更強(qiáng)的功能。——支持?jǐn)?shù)字邏輯和模擬電路的描述?!狪EEE1800-2005標(biāo)準(zhǔn)公布,在綜合、仿真驗證和IP核重用方面都有大幅度提高。拓寬了發(fā)展前景。語言輸入與原理圖輸入方式相比的優(yōu)點(diǎn):1、容易把設(shè)計移植到不同廠家的不同芯片中去;2、信號位數(shù)容易修改,可以很方便的適應(yīng)不同規(guī)模的應(yīng)用;3、與實(shí)現(xiàn)工藝無關(guān);VerilogHDL綜合器生成標(biāo)準(zhǔn)的電子設(shè)計互換格式(EDIF)文件,方便文檔交換與保存;1.5采用VerilogHDL設(shè)計復(fù)雜數(shù)字電路的優(yōu)點(diǎn)電路的兩種基本入方式:原理圖輸入(傳統(tǒng)設(shè)計方法)硬件描述語言輸入

采用Verilog語言,設(shè)計的可重用性好。

由于VerilogHDL不斷更新改進(jìn),最新標(biāo)準(zhǔn)為IEEE1800-2005,使得該語言具有更廣闊的發(fā)展前景,目前最新的EDA工具都進(jìn)行了更新以支持最新的Verilog標(biāo)準(zhǔn)?!?.5采用VerilogHDL設(shè)計復(fù)雜數(shù)字電路的優(yōu)點(diǎn)IP--------知識產(chǎn)權(quán)。美國Dataquest咨詢公司將半導(dǎo)體產(chǎn)業(yè)的IP定義為用于ASIC、PLD等芯片中的并且是預(yù)先設(shè)計好的電路功能模塊。

IP核------完成某種功能的設(shè)計模塊。IP核概念:軟核(SoftCore):功能經(jīng)過驗證的、可綜合的、實(shí)現(xiàn)后電路結(jié)構(gòu)總門數(shù)在5000門以上的VerilogHDL模型。由軟核構(gòu)成的器件稱為虛擬器件。三者中靈活性最高。(HDL描述)固核(FirmCore):指在某一種現(xiàn)場可編程門陣列(FPGA)器件上實(shí)現(xiàn)的、經(jīng)驗證是正確的、總門數(shù)在5000門以上電路結(jié)構(gòu)編碼文件。(完成了綜合)硬核(HardCore):指在某一種專用集成電路(ASIC)工藝的器件上實(shí)現(xiàn)的、經(jīng)驗證是正確的、總門數(shù)在5000門以上的電路結(jié)構(gòu)版圖掩膜。1.6VerilogHDL的設(shè)計流程方法:Top-Down(自頂向下)設(shè)計思想。圖1.3Top-Down設(shè)計思想系統(tǒng)級設(shè)計模塊A模塊B模塊C模塊A1模塊A3模塊A2模塊B1模塊B2模塊B3模塊C1模塊C2§1.6VerilogHDL的設(shè)計流程圖1.4HDL設(shè)計流程圖電路圖設(shè)計文件HDL設(shè)計文件電路功能仿真HDL功能仿真(前仿真)HDL綜合布局布線后仿真優(yōu)化、布局布線電路制造工藝文件或FPGA碼流文件與物理器件有關(guān)的布線約束等工藝技術(shù)文件沒問題有問題有問題沒問題沒問題有問題后仿真有問題前仿真:

即RTL級仿真,檢查有關(guān)模塊邏輯執(zhí)行步驟是否正確。后仿真:用門級模型做驗證,檢查由門的互連構(gòu)成的邏輯其功能是否正確。布局布線后仿真:在門級模型的基礎(chǔ)上加上了布線延時,與真實(shí)的電路最接近的驗證。§1.6VerilogHDL的設(shè)計流程小結(jié)小結(jié):1)采用VerilogHDL設(shè)計方法比采用電路圖輸入的方法更有優(yōu)越性;2)在兩種符合IEEE標(biāo)準(zhǔn)的硬件描述語言中,VerilogHDL與VHDL相比更加基礎(chǔ)、更易掌握;3)VerilogHDL可用于復(fù)雜數(shù)字邏輯電路和系統(tǒng)的總體仿真、子系統(tǒng)仿真和具體電路綜合等各個設(shè)計階段;4)Top-Down的設(shè)計方法方便了從系統(tǒng)級劃分和管理整個項目,使得超大規(guī)模的復(fù)雜數(shù)字電路的設(shè)計成為可能,并可減少設(shè)計人員,避免不必要的重復(fù)設(shè)計,提高了設(shè)計的一次成功率。第1章Verilog的基礎(chǔ)知識第2章Verilog語法的基本概念概念:用VerilogHDL描述的電路設(shè)計就是該電路的VerilogHDL模型,也稱為模塊——module。概念:VerilogHDL既是一種行為描述的語言也是一種結(jié)構(gòu)描述的語言。也就是說,無論描述電路功能行為的模塊或描述元件或較大部件互連的模塊都可以用Verilog語言來建立電路模型。第2章Verilog語法的基本概念概念:Verilog模型可以是實(shí)際電路的不同級別的抽象。這些抽象的級別和它們所對應(yīng)的模型類型共有以下5種:

(1)系統(tǒng)級(system-level):用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)所設(shè)計模塊的外部性能的模型。

(2)算法級(algorithm-level):用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)算法運(yùn)行的模型。

(3)RTL級(RegisterTransferLevel):描述數(shù)據(jù)在寄存器之間的流動和如何處理、控制這些數(shù)據(jù)流動的模型。

以上三種都屬于行為描述,只有RTL級才與邏輯電路有明確的對應(yīng)關(guān)系。

(4)門級(gate—level):描述邏輯門以及邏輯門之間連接的模型。與邏輯電路有確定的連接關(guān)系,以上四種數(shù)字系統(tǒng)設(shè)計工程師必須掌握。

(5)開關(guān)級(switch—level):描述器件中三極管和儲存節(jié)點(diǎn)以及它們之間連接的模型。系統(tǒng)級(System)

算法級(Alogrthem)寄存器傳輸級(RTL)門級(Gate)電路開關(guān)級(Switch)2.1Verilog模塊的基本概念abslout圖2.1二選一多路器(一)【例2.1】module

muxtwo(out,a,b,sl);

inputa,b,sl;//信號屬性outputout;//信號屬性

regout;//信號屬性

//實(shí)現(xiàn)功能描述

always@(sloraorb)

if(!sl)out=a;elseout=b;endmodule§2.1Verilog模塊的基本概念

我們并不關(guān)心它的電路結(jié)構(gòu),而關(guān)心的是如何從邏輯上來描述它?!纠?.2】abslout&&1nslselaselbmodulemuxtwo(out,a,b,sl);

inputa,b,sl;outputout;wirensl,sela,selb;

assign

nsl=~sl;

assign

sela=a&nsl;

assign

selb=b&sl;

assignout=sela|selb;endmodule基于邏輯表達(dá)式的描述圖2.2二選一多路器邏輯圖§2.1Verilog模塊的基本概念【例2.3】absloutu1u2u3u4nslselaselbmodulemuxtwo(out,a,b,sl);

inputa,b,sl;outputout;notu1(ns1,sl);andu2(sela,a,nsl);andu3(selb,b,sl);oru4(out,sela,selb);endmodule結(jié)構(gòu)描述圖2.3多路選擇器(二)參考返回§2.1Verilog模塊的基本概念編寫VerilogHDL模塊的練習(xí)請在下面的空格中填入適當(dāng)?shù)姆柺蛊涑蔀橛覉D的Verilog模塊:

moduleblock1(a,b,—,—,—);input—,—,—;——d,—;assignd=a|(b&~c);assigne=(b&~c);_______abcde§2.1Verilog模塊的基本概念概念:綜合——Synthesis

Verilog模塊(程序)通過計算機(jī)上運(yùn)行的綜合軟件工具(屬EDA軟件)把行為描述通過邏輯表達(dá)式的中間形式自動轉(zhuǎn)換為結(jié)構(gòu)描述的模塊,這個過程叫做綜合(Synthesis)。電路的行為電路的結(jié)構(gòu)Synthesis綜合absloutabsloutu1u2u3u4nslselaselb電路的邏輯關(guān)系§2.1Verilog模塊的基本概念概念:1)并行性;

2)層次結(jié)構(gòu)性;

3)可綜合性;

4)測試平臺(Testbench)下面再看幾個簡單的模塊,目的是初步了解Verilog語法最重要的幾個基本概念:§2.1Verilog模塊的基本概念moduleadder(cout,sum,a,b,cin);input[2:0]a,b;inputcin;outputcout;output[2:0]sum;assign{cout,sum}=a+b+cin;endmodule【例2.4】說明:此程序通過連續(xù)賦值語句描述了一個名為adder的3位加法器。它可以根據(jù)兩個3位數(shù)a、b和進(jìn)位(cin)計算出和(sum)及向上進(jìn)位(cout)。整個VerilogHDL程序是位于module和endmodule聲明語句之間的。連續(xù)賦值語句信號定義模塊開始與結(jié)束外部端口信號定義§2.1Verilog模塊的基本概念【例2.5】說明:這個程序通過連續(xù)賦值語句描述了一個名為compare的比較器。對2比特數(shù)a、b進(jìn)行比較,如a與b相等,則輸出equal為高電平,否則為低電平。/*……*/和//……表示注釋部分。modulecompare(equal,a,b);outputequal;//聲明輸出信號equalinput[1:0]a,b;//聲明輸入信號a,bassignequal=(a==b)?1:0;

/*a,b相等,輸出為1;否則為0*/endmodule程序注釋§2.1Verilog模塊的基本概念【例2.6】說明:這個程序描述了一個名為trist2的三態(tài)驅(qū)動器。通過調(diào)用Verilog語言提供的原語庫中的三態(tài)驅(qū)動器元件bufif1來實(shí)現(xiàn)其邏輯功能。在trist2模塊中所用到的三態(tài)驅(qū)動器bufif1的具體名字叫做mybuf,這種引用現(xiàn)成元件或模塊的方法叫做實(shí)例化或?qū)嵗茫潜硎倦娐窐?gòu)造的一種常用語法現(xiàn)象。moduletrist2(out,in,enable);outputout;inputin,enable;

bufif1

mybuf(out,in,enable);endmodule元件例化instanceinenableout§2.1Verilog模塊的基本概念【例2.7】moduletrist1(sout,sin,ena);outputsout;inputsin,ena;

mytri

tri_inst(.out(sout),.in(sin),.enable(ena));endmodulemodulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?in:‘bz;endmodule底層子模塊頂層說明:在實(shí)例部件tri_inst中,帶“.”表示被引用模塊的端口,名稱必須與被引用模塊的端口一致;小括號中名稱為本模塊信號,表示與被調(diào)用模塊的連接關(guān)系。參考返回§2.1Verilog模塊的基本概念說明:上面這些例子都是可以綜合的,通過綜合工具可以自動轉(zhuǎn)換為由與門、或門和非門組成的加法器、比較器和三態(tài)門等組合邏輯。

這個例子中存在著兩個模塊:模塊trist1調(diào)用模塊mytri

的實(shí)例元件tri_inst。模塊trist1是上層模塊。模塊mytri

則被稱為子模塊。通過這種結(jié)構(gòu)性模塊構(gòu)造可構(gòu)成特大型模塊?!?.1Verilog模塊的基本概念2.2Verilog用于模塊的測試概念:描述測試信號的變化和測試過程的模塊叫做測試平臺(Testbench或Testfixture)。測試平臺可以對上面介紹的電路模塊(無論是行為的或結(jié)構(gòu)的)進(jìn)行動態(tài)的全面測試。通過觀測被測試模塊的輸出信號是否符合要求,可以調(diào)試和驗證邏輯系統(tǒng)的設(shè)計系統(tǒng)和結(jié)構(gòu)正確與否,并發(fā)現(xiàn)問題及時修改?!?.2Verilog用于模塊的測試圖2.5Verilog用于模塊測試測試信號ain和測試條select件的控制

binabsloutu1u2u3u4nslselaselb被測試模塊對測試信號的響應(yīng)outw返回元件例化§2.2Verilog用于模塊的測試【例2.8】Verilog測試模塊,對例2.1~2.3的多路器進(jìn)行全面的測試。`include“muxtwo.v”always#50clock=~clock;modulet;always@(posedgeclock)

reg

ain,bin,select;begin

regclock;#1ain={$random}%2;wireoutw;#3bin={$random}%2;initialendbeginalways#10000select=!select;

ain=0;

muxtwo

m(.out(outw),.a(ain),.b(bin),.sl(select)); bin=0;endmodule select=0; clock=0;end§2.2Verilog用于模塊的測試程序說明:initialbeginain=0;bin=0; select=0;clock=0;endinitial塊只執(zhí)行一次把寄存器型變量初始化為確定值,即0時刻值。1信號的初始化§2.2Verilog用于模塊的測試always#50clock=~clock;always塊循環(huán)執(zhí)行產(chǎn)生一個不斷重復(fù)的、周期為100個單位時間的時鐘信號clock2clock5050時鐘信號的產(chǎn)生方法§2.2Verilog用于模塊的測試always@(posedgeclock)posedge

上升沿negedge

下降沿3clock時鐘信號的上升沿觸發(fā)§2.2Verilog用于模塊的測試always@(posedgeclock)begin

ain={$random}%2;#3bin={$random}%2;end延時3個時間單位$random-產(chǎn)生隨機(jī)數(shù){$random}%2為產(chǎn)生0-1的隨機(jī)數(shù)4隨機(jī)信號產(chǎn)生與信號延時§2.2Verilog用于模塊的測試5元件的調(diào)用muxtwo

m(.out(outw),.a(ain),.b(bin),.sl(select));被調(diào)用元件名元件例化名本模塊信號名被調(diào)用模塊原有信號名說明:m表示在本測試模塊中有一個名為m的muxtwo的模塊;其四個端口分別為:.out(),.a(),.b(),.sl();“.”表示端口,后面為端口名,名稱必須與muxtwo模塊定義的端口名一致;小括號內(nèi)的信號名為與該端口連接的信號線名,必須在本模塊中定義,說明其類型。參考§2.2Verilog用于模塊的測試§2.2Verilog用于模塊的測試§2.2Verilog用于模塊的測試module

myadder(clock,reset,a,b,sum);

input

clock,reset;

input

[7:0]

a,b;

output

[7:0]sum;

reg

[7:0]

sum;

reg[7:0]

a_reg,

b_reg;always

@(posedgeclock

or

negedgereset)

if(!reset)

begin

sum<=’b0,

a_reg<=’b0;b_reg<=’b0;

end

else

begin

a_reg<=a;b_reg<=b;

sum<=a_reg+b_reg;endendmodule`include“myadder.v”modulet;wire[8:0]sumout;

reg[7:0]ain,bin;

reg

rst,clk;

myadderu1(.clock(clk),.reset(rst),.a(ain),.b(bin),.sum(sumout));initial

begin

rst=1;clk=0;ain=0;bin=3;#70rst=0;#70rst=1;end

always#50clk=~clk;

always@(posedge

clk)begin#2ain=ain+2;#3bin=bin+5;endendmodule§2.2Verilog用于模塊的測試t

模塊中VerilogHDL語句的功能可以對myadder

模塊進(jìn)行測試,myadder

模塊輸入了必須的信號:

rst,clk,ain,bin

觀測該模塊的輸出:sumout

看一看它是否符合設(shè)計要求?!?.2Verilog用于模塊的測試2.3小結(jié)(1)VerilogHDL程序由模塊構(gòu)成。每個模塊的內(nèi)容都位于module和endmodule兩個語句之間。每個模塊實(shí)現(xiàn)特定的功能。(2)模塊是可以進(jìn)行層次嵌套的。因此,可以將大型的數(shù)字電路設(shè)計分割成不同的小模塊來實(shí)現(xiàn)特定的功能。(3)如果每個模塊都是可以綜合的,則通過綜合工具可以把它們的功能描述全都轉(zhuǎn)換為最基本的邏輯單元描述,最后可以用一個頂層模塊通過實(shí)例引用把這些模塊連接起來,整合成一個很大的復(fù)雜邏輯系統(tǒng)。(4)Verilog模塊可以分為兩種類型:一種是為了讓模塊最終能生成電路的類型,另一種只是為了測試所設(shè)計電路的邏輯功能是否正確。(5)每個模塊要進(jìn)行端口定義,并說明它是輸入口還是輸出口,然后對模塊的功能進(jìn)行描述。第2章Verilog語法的基本概念(6)VerilogHDL程序的書寫格式自由,一行可以寫幾個語句,一個語句也可以分寫多行。(7)除了endmodule語句外,每個語句和數(shù)據(jù)定義的最后必須有分號。(8)可以用/*……*/和//……對VerilogHDL程序的任何部分作注釋。一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。第2章Verilog語法的基本概念第2章Verilog語法的基本概念思考題1、構(gòu)成模塊的關(guān)鍵詞是什么?2、是否任意抽象的符合語法的Verilog模塊都可以通過綜合工具轉(zhuǎn)變?yōu)殡娐方Y(jié)構(gòu)?3、什么叫綜合?通過綜合產(chǎn)生的是什么?產(chǎn)生的結(jié)果有什么用處?4、仿真是什么?為什么要進(jìn)行仿真?5、模塊的端口是如何描述的?6、在引用實(shí)例模塊的時候,如何在主模塊中連接信號線?7、如何產(chǎn)生連續(xù)的周期性測試時鐘?8、如果不用initial塊,能否產(chǎn)生測試時鐘?第3章模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運(yùn)算符號3.1模塊的結(jié)構(gòu)3.2數(shù)據(jù)類型及其常量和變量3.3運(yùn)算符及表達(dá)式第3章模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運(yùn)算符號

Verilog的基本設(shè)計單元是“模塊”。其組成有兩部分。一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。3.1模塊的結(jié)構(gòu)接口描述邏輯功能描述Moduleblock(a,b,c,d);inputa,b;outputc,d;assignc=a|b;assignd=a&b;endmoduleabcd圖3.1模塊結(jié)構(gòu)的組成§3.1模塊的結(jié)構(gòu)每個Verilog程序包括4個主要部分:程序組成端口定義I/O說明內(nèi)部信號聲明功能定義

程序中的接口描述就是用來說明電路圖符號的引腳名稱及其信號流向;邏輯功能描述說明了該電路符號的具體邏輯功能?!?.1模塊的結(jié)構(gòu)3.1.1模塊的端口定義語法:模塊的端口聲明了模塊的輸入輸出口。其格式如下:

module模塊名(口1,口2,口3,口4,……);說明:模塊的端口表示的是模塊的輸入和輸出口名,也就是與其它模塊聯(lián)系端口的標(biāo)識。在模塊被引用時,在引用的模塊中,有些信號要輸入到被引用的模塊中,有些信號需要從被引用的模塊中取出來?!?.1模塊的結(jié)構(gòu)語法:在引用模塊時其端口的兩種連接方法:(1)按順序引用在引用時,嚴(yán)格按照模塊定義的端口順序來連接,不用標(biāo)明原模塊定義時規(guī)定的端口名,例如:

模塊名(連接端口1信號名,連接端口2信號名,連接端口3信號名,……,);(2)按名稱引用在引用時用“.”符號,標(biāo)明原模塊定義時規(guī)定的端口名,例如:

模塊名(.端口1名(連接信號1名),端口2名(連接信號2名),……,);參考程序參考程序§3.1模塊的結(jié)構(gòu)3.1.2模塊內(nèi)容1.I/O說明的格式語法:輸入口:input端口名1;//一位寬信號定義

input[信號位寬-1:0]端口名1;

input[信號位寬-1:0]端口名2;

……input[信號位寬-1:0]端口名i;//(共有i個輸入口)語法:輸出口:output端口名1;

//一位寬信號定義

output[信號位寬-1:0]端口名1;

output[信號位寬-1:0]端口名2;

……output[信號位寬-1:0]端口名j;//(共有j個輸出口)§3.1模塊的結(jié)構(gòu)語法:I/O說明也可以寫在端口聲明語句里。其格式如下:

modulemodule_name(inputport1,inputport2,…outputport1,outputport2…);語法:輸入/輸出口:

inout

端口名1;//一位寬信號定義

inout[信號位寬-1:0]端口名1;

inout[信號位寬-1:0]端口名2;

……

inout[信號位寬-1:0]端口名k;//(共有k個雙向總線端口)§3.1模塊的結(jié)構(gòu)2.內(nèi)部信號說明在模塊內(nèi)用到的和與端口有關(guān)的兩種變量類型:wire、reg語法:wire變量1,變量2…:wire[width-1:0]變量1,變量2…:reg

變量1,變量2…;reg[width-1:0]變量1,變量2…;

說明:用input定義的端口信號沒有類型說明,只有output定義的信號和內(nèi)部信號具有wire、reg類型聲明要求。信號定義為intput類型時默認(rèn)隱含為wire型?!?.1模塊的結(jié)構(gòu)3.功能定義

模塊中最重要的部分是邏輯功能定義部分。有3種方法可在模塊中產(chǎn)生邏輯。用“assign”連續(xù)賦值語句用元件例化方法(即元件調(diào)用)用“always”塊注意:前面程序中出現(xiàn)的initial塊,只能用于測試平臺程序?!?.1模塊的結(jié)構(gòu)1)用"assign"聲明語句

這種方法的句法很簡單,只需寫一個“assign”,后面再加一個方程式即可。如:assigna=b&c;例中的方程式描述了一個有兩個輸入的與門?!?.1模塊的結(jié)構(gòu)注1.assign語句被賦值的變量必須是wire型,操作數(shù)可以是wire型、reg型。2.總是處于激活狀態(tài)。3.可用于描述一個完整的設(shè)計。4.必須放在initial、always塊外。2)用元件例化方法(即元件調(diào)用)

采用實(shí)例元件的方法像在電路圖輸人方式下調(diào)入庫元件一樣,鍵入元件的名字和相連的引腳即可,如:and#2u1(q,a,b);

§3.1模塊的結(jié)構(gòu)3)用“always”塊

采用“assign”語句是描述組合邏輯最常用的方法之一。而“always”塊既可用于描述組合邏輯也可描述時序邏輯。

“always”塊可用很多種描述手段來表達(dá)邏輯,例如下面的程序中就用了if…else語句來表達(dá)邏輯關(guān)系?!皫М惒角辶愣说腄觸發(fā)器”的描述always@(posedge

clkorposedge

clr)beginif(clr)q<=0;

elseq<=d:

end“與門”的描述:

always@(aorb)beginif((a==1)&&(b==1))c=‘b1;elsec=‘b0;end賦值運(yùn)算符§3.1模塊的結(jié)構(gòu)3.1.3理解要點(diǎn)要點(diǎn):上面的例子分別采用了“assign”語句、實(shí)例元件和“always”塊。這3個例子描述的邏輯功能是同時執(zhí)行的。也就是說,如果把這3項寫到一個Verilog模塊文件中去,它們的位置順序不會影響實(shí)現(xiàn)的功能。這3項是同時執(zhí)行的,也就是并發(fā)的。要點(diǎn):在“always”模塊內(nèi),邏輯是按照指定的順序執(zhí)行的?!癮lways”塊中的語句稱為“順序語句”。但是,兩個或更多的“always”模塊之間是同時執(zhí)行的,但是模塊內(nèi)部的語句是順序執(zhí)行的。§3.1模塊的結(jié)構(gòu)

moduleex(…………);input…;output……………….;

reg…..;assigna=b&c;always@(…………….)begin…endandu1(a,b,c);always@(…………….)

endmodule

并發(fā)執(zhí)行順序執(zhí)行3.1.4要點(diǎn)總結(jié)牢記:(1)在Verilog模塊中所有過程塊(initial塊、always塊)、連續(xù)賦值語句、實(shí)例引用都是并行的;(2)在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)系;(3)實(shí)例引用表示的是一種通過變量名實(shí)現(xiàn)互相連接的關(guān)系;(4)只有連續(xù)賦值語句assign和實(shí)例引用語句可以獨(dú)立于過程塊而存在于模塊的功能定義部分?!?.1模塊的結(jié)構(gòu)3.2數(shù)據(jù)類型及其常量和變量VerilogHDL中總共有19種數(shù)據(jù)類型。數(shù)據(jù)類型是用來表示數(shù)字電路硬件中的數(shù)據(jù)儲存和傳送元素的。需要掌握的常用類型有4種:

reg

wire

integer

parameter

另外,VerilogHDL語言中也有常量和變量之分。它們分別屬于以上這些類型?!?.2數(shù)據(jù)類型及其常量和變量其他:

large、medium、small、tri、trio、tri1、triand、trior、trireg、vectoredscalared、time、wand和wor。這些數(shù)據(jù)類型除time型外都與基本邏輯單元建庫有關(guān)3.2.1常量概念:在程序運(yùn)行過程中,其值不能被改變的量稱為常量。數(shù)字常量符號常量常量§3.2數(shù)據(jù)類型及其常量和變量1.?dāng)?shù)字

整型常量有4種進(jìn)制表示形式:

二進(jìn)制整數(shù)(b或B);十進(jìn)制整數(shù)(d或D);十六進(jìn)制整數(shù)(h或H);八進(jìn)制整數(shù)(o或O)。進(jìn)制(1)整數(shù)§3.2數(shù)據(jù)類型及其常量和變量數(shù)字表達(dá)方式有以下3種:1)

<位寬><進(jìn)制><數(shù)字>

這是一種全面的描述方式?!?.2數(shù)據(jù)類型及其常量和變量例:8’ha2、8’HA2//字母不區(qū)分大小寫

4’d2//4位十進(jìn)制數(shù)

6’o27//6位八進(jìn)制

8’b10101100注:“’”是單引號,位寬只能用十進(jìn)制數(shù)

位寬

位寬指明了數(shù)字的精確位數(shù)。例如:一個4位二進(jìn)制數(shù)的位寬為4,一個4位十六進(jìn)制數(shù)的位寬為16。

位寬始終表示的是二進(jìn)制位數(shù),與進(jìn)制符號無關(guān)。如定義位寬比實(shí)際位數(shù)長,左邊補(bǔ)“0”“X”“Z”

10’b10=10’b000000001010’bx0x1=xxxxxxx0x1如定義位寬比實(shí)際位數(shù)短,最左邊截斷

3’b10010111=3’b111

注:錯誤格式

i.3’b000……//“’”和進(jìn)制之間不能空格

ii.(3+2)’b10…….//位寬不能為表達(dá)式

iii.4'd-4

//非法:數(shù)值不能為負(fù)2)<進(jìn)制><數(shù)字>

數(shù)字的位寬采用缺省位寬(這由具體的機(jī)器系統(tǒng)決定,但至少32位)。3)<數(shù)字>采用缺省進(jìn)制(十進(jìn)制),位寬采用缺省位寬。

例’ha1232位十六進(jìn)制數(shù)

15==‘b1111x代表不定值,z代表高阻值。一個x可以用來定義十六進(jìn)制數(shù)的4位二進(jìn)制數(shù)的狀態(tài),八進(jìn)制數(shù)的3位,二進(jìn)制數(shù)的1位。z的表示方式同x類似。

z的另一種表達(dá)方式是“?”。在使用case表達(dá)式時建議使用這種寫法,以提高程序的可讀性,見下例:(2)x和z值4’b10x0//位寬為4的二進(jìn)制數(shù),從低位數(shù)起第2位為不定值4'b101z//位寬為4的二進(jìn)制數(shù),從低位數(shù)起第1位為高阻值12’dz//位寬為12的十進(jìn)制數(shù),其值為高阻值(第1種表達(dá)方式)12’d?//位寬為12的十進(jìn)制數(shù),其值為高阻值(第2種表達(dá)方式)8‘h4x//位寬為8的十六進(jìn)制數(shù),其低4位值為不定值§3.2數(shù)據(jù)類型及其常量和變量

在位寬表達(dá)式前加負(fù)號來表示負(fù)數(shù)。負(fù)號必須寫在數(shù)字定義表達(dá)式的最前面。

注意,負(fù)號不可以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具體的數(shù)之間。見下例:(3)負(fù)數(shù)-8‘d5//這個表達(dá)式代表5的補(bǔ)數(shù)(用八位二進(jìn)制數(shù)表示)

11111011

-5//-’d5-32’d58‘d-5//錯誤格式§3.2數(shù)據(jù)類型及其常量和變量

下畫線可以用來分隔數(shù)的表達(dá)以提高程序可讀性,但不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間。見下例:(4)下畫線(underscore)16’b1010_1011_1111_1010//正確格式8’b_0011_1010//錯誤格式§3.2數(shù)據(jù)類型及其常量和變量當(dāng)常量不說明位數(shù)時,默認(rèn)值是32位,每個字母用8位的ASCII值表示。例:10=32’d10=32’b10101=32’d1=32’b1-1=-32’d1=32’hFFFFFFFF’BX=32’BX=32’BXXXXXXX…X“AB“=16’B01000001_01000010//字符串AB為十六進(jìn)制數(shù)16’h4142§3.2數(shù)據(jù)類型及其常量和變量2.參數(shù)(parameter)型概念:在VerilogHDL中用parameter來定義常量,即用parameter來定義一個標(biāo)識符代表一個常量,稱為符號常量,即標(biāo)識符形式的常量。parameter型數(shù)據(jù)說明格式如下:parameter參數(shù)名1=表達(dá)式,……,參數(shù)名n=表達(dá)式;§3.2數(shù)據(jù)類型及其常量和變量parameter是參數(shù)型數(shù)據(jù)的確認(rèn)符。確認(rèn)符后跟著一個用逗號分隔開的賦值語句表達(dá)式。在每一個賦值語句的右邊必須是一個常數(shù)表達(dá)式,即該表達(dá)式只能包含數(shù)字或先前已定義過的參數(shù)。見下列:parametermsb=7;//定義參數(shù)msb為常量7

parametere=25,f=29;//定義兩個常數(shù)參數(shù)

parameterr=5.7;//聲明r為一個實(shí)型參數(shù)

parameterbyte_size=8,byte_msb=byte_size-1;//用常數(shù)表達(dá)式賦值

parameteraverage_delay=(r+f)/2;//用常數(shù)表達(dá)式賦值§3.2數(shù)據(jù)類型及其常量和變量參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。

作用:

參數(shù)型常數(shù)經(jīng)常用于定義延遲時間和變量寬度。在模塊或?qū)嵗脮r,可通過參數(shù)傳遞改變被引用模塊或?qū)嵗幸讯x的參數(shù)。moduleDecode(A,F);parameterWidth=1,Polarity=1;…

endmodulemoduleTop(…);wire[3:0]A4;wire[4:0]A5;wire[15:0]F16;wire[31:0]F32;Decode#(4,0)D1(A4,F16);Decode#(5)D2(A5,F32);

endmodule【例3.1】§3.2數(shù)據(jù)類型及其常量和變量使用#次序與原說明相同因為#說明延時的時候只能用于gate或過程語句,不能用于模塊實(shí)例。gate(primitives)在實(shí)例化時只能有延時,不能有模塊參數(shù)。為什么編譯器認(rèn)為這是參數(shù)而不是延時呢?【例3.2】

下面是一個由多層次模塊構(gòu)成的電路。在一個模塊中改變另一個模塊的參數(shù)時,使用defparam命令。AnnotateTestTTopBlockBlockB1B2實(shí)例名實(shí)例名實(shí)例名圖3.2多層次模塊構(gòu)成的電路§3.2數(shù)據(jù)類型及其常量和變量 `include“Top.v”`include“Block.v”`include“Annotate.v”moduleTest; wireW; TopT(…);

endmodule moduleTop; wirew; BlockB1(…); BlockB2(…);

endmodule moduleBlock; parameterP=0;

endmodule

moduleAnnotate;

defparam

Test.T.B1.P=2,

//多層次模塊中,參數(shù)變量的命名規(guī)則,用點(diǎn)號來表示不同的模塊層次Test.T.B2.P=3;

endmodule通過參數(shù)傳遞改變已定義的參數(shù)值使用defparam

改變參數(shù)值3.2.2變量

變量即在程序運(yùn)行過程中其值可以改變的量,在VerilogHDL中變量的數(shù)據(jù)類型有很多種,這里只對常用的幾種進(jìn)行介紹。多驅(qū)動源情況略。1.wire型說明:(1)wire網(wǎng)絡(luò)數(shù)據(jù)類型表示結(jié)構(gòu)實(shí)體(例如門)之間的物理連接。(2)網(wǎng)絡(luò)類型的變量不能儲存值,而且它必須受到驅(qū)動器(例如門或連續(xù)賦值語句assign)的驅(qū)動。如果沒有驅(qū)動器連接到網(wǎng)絡(luò)類型的變量上,則該變量就是高阻的,即其值為z。

(3)wire型數(shù)據(jù)常用來表示以assign關(guān)鍵字指定的組合邏輯信號。(4)Verilog程序模塊中輸出信號類型默認(rèn)時自動定義為wire型。wire型信號可以用做任何方程式的輸入,也可以用做“assign”語句或?qū)嵗妮敵??!?.2數(shù)據(jù)類型及其常量和變量wire型信號的格式如下:wire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名i;或wire[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名i;例:

wirea;//定義了一個1位的wire型數(shù)據(jù),

wire[7:0]b;//定義了一個8位的wire型數(shù)據(jù)b

wire[4:1]c,d;//定義了二個4位的wire型數(shù)據(jù)c和d§3.2數(shù)據(jù)類型及其常量和變量2.reg型說明:(1)reg型是寄存器數(shù)據(jù)類型。(2)reg類型數(shù)據(jù)的默認(rèn)初始值為不定值x。(3)reg型數(shù)據(jù)常用來表示“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。(4)在"always”塊內(nèi)被賦值的每一個信號都必須定義成reg型?!?.2數(shù)據(jù)類型及其常量和變量用來表示存儲單元,具有狀態(tài)保持作用,通過賦值語句可改變寄存器存儲單元的值。在Verilog中有許多結(jié)構(gòu)語句來控制何時或是否執(zhí)行這些賦值語句。這些控制構(gòu)造可用來描述硬件的觸發(fā)條件。如時鐘的上升沿,多路選擇器的選通信號。并不是說reg型信號一定是寄存器或觸發(fā)器的輸出,它只表示被定義的信號將用在“always”塊內(nèi)。

reg型數(shù)據(jù)的格式如下:

reg[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名i;或

reg[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名i;看下面的幾個例子:

reg

rega;//定義了一個1位的名為rega的reg型數(shù)據(jù)

reg[3:0]regb;//定義了一個4位的名為regb的reg型數(shù)據(jù)

reg[4:1]regc,regd

//定義了二個4位的名為regc和regd的reg型數(shù)據(jù)說明:

reg是reg型數(shù)據(jù)的確認(rèn)標(biāo)識符;[n-1:0]和[n:1]代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位(bit);最后是數(shù)據(jù)的名稱。如果一次定義多個數(shù)據(jù),數(shù)據(jù)名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束?!?.2數(shù)據(jù)類型及其常量和變量說明

reg型數(shù)據(jù)的缺省初始值是不定值x。reg型數(shù)據(jù)可以賦正值,也可以賦負(fù)值。但當(dāng)一個reg型數(shù)據(jù)是一個表達(dá)式中的操作數(shù)時,它的值被當(dāng)作是無符號值,即正值。

例如:當(dāng)一個4位的寄存器用做表達(dá)式中的操作數(shù)時,如果開始寄存器被賦以值-1,則在表達(dá)式中進(jìn)行運(yùn)算時,其值被認(rèn)為是+15。選擇正確的數(shù)據(jù)類型in1in2OABY輸入端口可以由wire/reg驅(qū)動,但輸入端口只能是wire輸出端口可以是wire/regr類型,輸出端口只能驅(qū)動wier雙向端口輸入/輸出只能是wire類型信號類型確定方法總結(jié)如下:信號可以分為端口信號和內(nèi)部信號。出現(xiàn)在端口列表中的信號是端口信號,其它的信號為內(nèi)部信號。對于端口信號,輸入端口只能是wire類型。輸出端口可以是wire類型,也可以是reg類型。若輸出端口在過程塊中賦值則為reg類型;若在過程塊外賦值(包括實(shí)例化語句),則為wire類型。內(nèi)部信號類型與輸出端口相同,可以是wire或reg類型。判斷方法也與輸出端口相同。若在過程塊中賦值,則為reg類型;若在過程塊外賦值,則為wire類型。ABC選擇正確的數(shù)據(jù)類型moduletop;wirey;

rega,b;DUTu1(y,a,b);initialbegin a=0;b=0;#5a=1;endendmodulemoduleDUT(Y,A,B);outputY;inputA,B;wireY,A,B;anda1(Y,A,B);endmodule在過程塊中只能給reg類型賦值若Y,A,B說明為reg則會產(chǎn)生錯誤。選擇數(shù)據(jù)類型時常犯的錯誤舉例修改前:moduleexample(o1,o2,a,b,c,d);inputa,b,c,d;outputo1,o2;

regc,d;

rego2andu1(o2,c,d);always@(aorb)if(a)o1=b;elseo1=0;endmodule修改后:moduleexample(o1,o2,a,b,c,d);inputa,b,c,d;outputo1,o2;//regc,d;//rego2

rego1;

andu1(o2,c,d);always@(aorb)if(a)o1=b;elseo1=0;endmodule3.memory型說明:(1)memory型即存儲器類型;(2)VerilogHDL通過對reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器,ROM存儲器和reg文件。(3)數(shù)組中的每一個單元通過一個數(shù)組索引進(jìn)行尋址。(4)在Verilog語言中沒有多維數(shù)組存在。memory型數(shù)據(jù)的格式如下:

reg[n-1:0]存儲器名[m-1:0];或

reg[n-1:0]存儲器名[m:1];說明:

reg[n-1:0]定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器,存儲器名后的[m-1:0]或[m:1]則定義了該存儲器中有多少個這樣的寄存器,最后用分號結(jié)束定義語句?!璵-100n-11……1m-2§3.2數(shù)據(jù)類型及其常量和變量另外,在同一個數(shù)據(jù)類型聲明語句里,可以同時定義存儲器型數(shù)據(jù)和reg型數(shù)據(jù)。見下例:

parameterwordsize=16,//定義兩個參數(shù)

memsize=256;

reg[wordsize-1:0]mem[memsize-1:0],writereg,readreg;下面舉例說明:

reg[7:0]mema[255:0];說明:這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0到255。

注意:對存儲器進(jìn)行地址索引的表達(dá)式必須是整數(shù)表達(dá)式。Mem256*16bitRAMWritereg16bitreadreg16bit§3.2數(shù)據(jù)類型及其常量和變量說明:一個由n個1位寄存器構(gòu)成的存儲器組不同于一個n位的寄存器的。見下例:

reg[n-1:0]rega;

//一個n位的寄存器

reg

mema[n-1:0];//一個由n個1位寄存器構(gòu)成的存儲器組

一個n位的寄存器可以在一條賦值語句里進(jìn)行賦值,而一個完整的存儲器則不行。見下例:

rega=0;

//正確賦值語句

mema=0;

//錯誤的賦值語句如果想對memory中的存儲單元進(jìn)行讀寫操作,必須指定該單元在存儲器中的地址。下面的寫法是正確的:

mema[3]=0;

//給memory中的第3個存儲單元賦值為0§3.2數(shù)據(jù)類型及其常量和變量modulemyrom(read_data,addr,read_en);inputread_en;input[3:0]addr;output[3:0]read_data;

reg[3:0]read_data;

reg[3:0]mem[0:15];

always@(addrorread_en)if(!read_en)

read_data=mem[addr];endmodulemodulemymem(data,addr,read,write);

inout[3:0]data;input[3:0]addr;inputread,write;

reg[3:0]mem[0:15];//16*4//讀

assigndata=read?mem[addr]:4'bz;//寫

always@(posedgewrite)

mem[addr]=data;endmodule

ROMRAM3.3運(yùn)算符及表達(dá)式按功能分類可分為算術(shù)運(yùn)算符(+,-,X,/,%)賦值運(yùn)算符(=,<=)關(guān)系運(yùn)算符(>,<,>=,<=)邏輯運(yùn)算符(&&,||,!)條件運(yùn)算符(?:)位運(yùn)算符(~,|,^,&,^~)移位運(yùn)算符(<<,>>)拼接運(yùn)算符({})§3.3運(yùn)算符及表達(dá)式按所帶操作數(shù)個數(shù)可分為單目運(yùn)算符雙目運(yùn)算符三目運(yùn)算符例:

clock=~clock;c=a|b;

r=s?T:u;§3.3運(yùn)算符及表達(dá)式3.3.1基本的算術(shù)運(yùn)算符在VerilogHDL語言中,算術(shù)運(yùn)算符又稱為二進(jìn)制運(yùn)算符,共有下面幾種:

(1)+(加法運(yùn)算符,或正值運(yùn)算符,如rega+regb,+3);

(2)-(減法運(yùn)算符,或負(fù)值運(yùn)算符,如rega-3,-3);

(3)*(乘法運(yùn)算符,如rega*3);

(4)/(除法運(yùn)算符,如5/3);

(5)%(模運(yùn)算符,或稱為求余運(yùn)算符,要求%兩側(cè)均為整型數(shù)據(jù)。如7%3的值為1)。§3.3運(yùn)算符及表達(dá)式規(guī)則:在進(jìn)行整數(shù)除法運(yùn)算時,結(jié)果值要略去小數(shù)部分,只取整數(shù)部分;

7/4=1-7/4=-1

7/-4=-1模運(yùn)算表達(dá)式結(jié)果說明

10%31余數(shù)為111%32余數(shù)為212%30余數(shù)為0,即無余數(shù)

-10%3-1結(jié)果取第一個操作數(shù)的符號位,所以余數(shù)為-111%-32結(jié)果取第一個操作數(shù)的符號位,所以余數(shù)為2§3.3運(yùn)算符及表達(dá)式

1、進(jìn)行取模運(yùn)算時,結(jié)果值的符號位采用模運(yùn)算式里第一個操作數(shù)的符號位。2、%兩側(cè)都應(yīng)為整數(shù)Verilog根據(jù)表達(dá)式中變量的長度對表達(dá)式的值自動地進(jìn)行調(diào)整。Verilog自動截斷或擴(kuò)展賦值語句中右邊的值以適應(yīng)左邊變量的長度。當(dāng)一個負(fù)數(shù)賦值給無符號變量如reg時,Verilog自動完成二進(jìn)制補(bǔ)碼計算modulesign_size;

reg[3:0]a,b;

reg[15:0]c;initialbegina=-1;//a是無符號數(shù),因此其值為1111b=8;c=8;//b=c=1000#10b=b+a;//結(jié)果10111截斷,b=0111#10c=c+a;//c=10111endendmodule例

parameterfive=5;integerans,int;

reg[3:0]rega,regb;

reg[3:0]num;initialbegin

rega=3;

regb=4'b1010;

int=-3;//int=1111……1111_1101

endinitialfork#1ans=five*int;//ans=-15

#2ans=(int+5)/2;//ans=1

#3ans=five/int;//ans=-1

#4num=rega+regb;//num=1101

#5num=rega+1;//num=0100

#6num=int;//num=1101

#7num=regb%rega;//num=1join注意:在進(jìn)行算術(shù)運(yùn)算操作時,如果某一個操作數(shù)有不確定的值x,則整個結(jié)果也為不定值x。'b10x1+'b01111結(jié)果為不確定數(shù)'bxxxxx3.3.2位運(yùn)算符

VerilogHDL作為一種硬件描述語言,是針對硬件電路而言的。在硬件電路中信號有4種狀態(tài)值,即1,0,x,z。VerilogHDL提供了以下5種位運(yùn)算符:

1)~

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論