數(shù)字集成電路設(shè)計(jì)與硬件描述語(yǔ)言_第1頁(yè)
數(shù)字集成電路設(shè)計(jì)與硬件描述語(yǔ)言_第2頁(yè)
數(shù)字集成電路設(shè)計(jì)與硬件描述語(yǔ)言_第3頁(yè)
數(shù)字集成電路設(shè)計(jì)與硬件描述語(yǔ)言_第4頁(yè)
數(shù)字集成電路設(shè)計(jì)與硬件描述語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第六講

數(shù)字集成電路設(shè)計(jì)

與硬件描述語(yǔ)言/sundae_meng/sundae_meng大綱數(shù)字IC設(shè)計(jì)方法兩種HDL語(yǔ)言VerilogHDL簡(jiǎn)介VHDL簡(jiǎn)介/sundae_meng當(dāng)前的數(shù)字IC設(shè)計(jì)分可分成以下幾個(gè)層次:1.算法級(jí)設(shè)計(jì):利用高級(jí)語(yǔ)言(如C語(yǔ)言)及其他一些系統(tǒng)分析工具(如MATLAB)對(duì)設(shè)計(jì)從系統(tǒng)的算法級(jí)進(jìn)行描述。算法級(jí)不需要包含時(shí)序信息。2.RTL級(jí)設(shè)計(jì):用信號(hào)在寄存器間傳輸?shù)哪J絹?lái)對(duì)設(shè)計(jì)進(jìn)行描述。3.門(mén)級(jí)設(shè)計(jì):用邏輯門(mén)及門(mén)級(jí)之間的連線對(duì)設(shè)計(jì)進(jìn)行描述。4.開(kāi)關(guān)級(jí)設(shè)計(jì):用晶體管及其連線來(lái)對(duì)設(shè)計(jì)進(jìn)行描述。/sundae_meng數(shù)字IC一般采用自頂向下(TOP-DOWN)的設(shè)計(jì)方法在系統(tǒng)級(jí)(頂層)進(jìn)行功能的劃分和架構(gòu)設(shè)計(jì)在功能級(jí)進(jìn)行仿真、糾錯(cuò),并用硬件描述語(yǔ)言對(duì)功能進(jìn)行描述用綜合工具將設(shè)計(jì)轉(zhuǎn)化為具體門(mén)級(jí)電路網(wǎng)表物理級(jí)可以是FPGA器件或?qū)S眉呻娐罚ˋSIC)

TOP-DOWN設(shè)計(jì)思想門(mén)級(jí)功能級(jí)

系統(tǒng)級(jí)TOP-DOWN設(shè)計(jì)方法/sundae_meng電子設(shè)計(jì)規(guī)模越來(lái)越大(百萬(wàn)/千萬(wàn)門(mén)的量級(jí)),復(fù)雜度越來(lái)越高,只能用高級(jí)語(yǔ)言來(lái)描述其功能,在設(shè)計(jì)初期隱藏其具體的細(xì)節(jié)實(shí)現(xiàn)??勺x性強(qiáng),易修改。提高邏輯設(shè)計(jì)的效率,降低設(shè)計(jì)成本,更重要的是縮短設(shè)計(jì)周期。HDL追求對(duì)硬件的描述,而將該描述在目標(biāo)器件上實(shí)現(xiàn)則由EDA工具的綜合器完成。受限于目標(biāo)器件,并不是所有HDL語(yǔ)句均可被綜合。/sundae_mengVHDL和VerilogHDL是目前世界上流行最廣的兩種硬件描述語(yǔ)言,都是在20世紀(jì)80年代中期開(kāi)發(fā)出來(lái)的。均為IEEE標(biāo)準(zhǔn)。VHDL語(yǔ)法嚴(yán)謹(jǐn),易于學(xué)習(xí);邏輯綜合能力強(qiáng)。在歐洲使用較多。VerilogHDL語(yǔ)法靈活(類(lèi)似C語(yǔ)言,較難掌握)底層綜合出色。美國(guó)使用較多。

/sundae_mengVerilogHDL是一種應(yīng)用廣泛的硬件描述語(yǔ)言,是IC硬件設(shè)計(jì)人員和EDA工具之間的橋梁。其功能為編寫(xiě)設(shè)計(jì)文本(腳本)建立電子系統(tǒng)行為級(jí)的仿真模型并進(jìn)行仿真自動(dòng)綜合生成數(shù)字邏輯網(wǎng)表(Netlist)及具體電路生成某工藝條件下具體電路的延時(shí)模型并進(jìn)行時(shí)序仿真仿真驗(yàn)證無(wú)誤后用于制造ASIC或?qū)懭隖PGA器件中常用的VerilogHDL開(kāi)發(fā)軟件有Altera公司的MAX+PLUSII,QuartusIIXilinx公司的FoundationISE/sundae_mengVerilogHDL語(yǔ)言的主要特征1、語(yǔ)法結(jié)構(gòu)上,與C語(yǔ)言有許多相似之處,并借鑒C語(yǔ)言的多種操作符2、既包含高級(jí)程序設(shè)計(jì)語(yǔ)言的結(jié)構(gòu)形式,同時(shí)也兼顧描述硬件線路連接的具體構(gòu)件3、通過(guò)使用結(jié)構(gòu)級(jí)或行為級(jí)描述可以在不同的抽象層次上進(jìn)行設(shè)計(jì)/sundae_meng4、VerilogHDL語(yǔ)言是并發(fā)的,即具有在同一時(shí)刻執(zhí)行多任務(wù)的能力,因?yàn)樵趯?shí)際硬件中許多操作都是在同一時(shí)刻發(fā)生的。而計(jì)算機(jī)編程語(yǔ)言往往是順序執(zhí)行的。5、有時(shí)序概念,因?yàn)樵谟布娐分袕妮斎氲捷敵隹偸怯醒舆t存在的

這兩點(diǎn)顯示了VerilogHDL與C語(yǔ)言的最大區(qū)別/sundae_meng數(shù)字電路可簡(jiǎn)單歸納為兩種要素:連線和器件

VerilogHDL建模--使用硬件語(yǔ)言對(duì)數(shù)字電路的這兩種基本要素進(jìn)行描述。/sundae_mengVerilogHDL的基本結(jié)構(gòu)八位加法器的VerilogHDL源代碼moduleadder8(cout,sum,ina,inb,cin);

output[7:0]sum;

outputcout;

input[7:0]ina,inb;

inputcin;

assign

{cout,sum}=ina+inb+cin;endmodule準(zhǔn)備實(shí)現(xiàn)的邏輯功能∑888cicocincoutinainbsum簡(jiǎn)單的VerilogHDL的例子程序?yàn)槟K結(jié)構(gòu),包含在module與endmodule之間端口列表輸入、輸出端口描述--描述外部特性邏輯功能描述--描述內(nèi)部特性模塊名/sundae_meng一.模塊的概念VerilogHDL模塊的結(jié)構(gòu)

模塊是VerilogHDL語(yǔ)言的基本單元,數(shù)字系統(tǒng)用模塊集合的形式來(lái)描述模塊描述某個(gè)設(shè)計(jì)的功能、結(jié)構(gòu)和與其它模塊通信的外部端口VerilogHDL中各個(gè)模塊是并行運(yùn)行的模塊可以調(diào)用其它模塊的實(shí)體(實(shí)例)/sundae_meng二.模塊的結(jié)構(gòu)module<模塊名>(<端口列表>)

端口說(shuō)明(input,output,inout)參數(shù)定義//可選數(shù)據(jù)類(lèi)型定義//wire、reg、task、function連續(xù)賦值語(yǔ)句(assign)//組合邏輯過(guò)程塊(always和initial)-行為描述語(yǔ)句低層模塊實(shí)例//調(diào)用其它模塊任務(wù)和函數(shù)延時(shí)說(shuō)明塊endmodule/sundae_meng模塊端口(moduleports)注意模塊的名稱(chēng)DFF,端口列表及說(shuō)明模塊通過(guò)端口與外部通信端口在模塊名字后的括號(hào)中列出端口可以說(shuō)明為input,output及inout端口等價(jià)于硬件的引腳(pin)/sundae_meng模塊實(shí)例化(moduleinstances)moduleDFF(d,clk,clr,q,qb);....endmodulemoduleREG4(d,clk,clr,q,qb);output[3:0]q,qb;input[3:0]d;inputclk,clr;DFFd0(d[0],clk,clr,q[0],qb[0]);DFFd1(d[1],clk,clr,q[1],qb[1]);DFFd2(d[2],clk,clr,q[2],qb[2]);DFFd3(d[3],clk,clr,q[3],qb[3]);endmoduleREG4有模塊DFF的四個(gè)實(shí)例/sundae_meng語(yǔ)言的主要特點(diǎn)將模塊的實(shí)例通過(guò)端口連接起來(lái)構(gòu)成一個(gè)大的系統(tǒng)每個(gè)實(shí)例都有自己的名字(d0,d1,d2,d3)。實(shí)例名是每個(gè)對(duì)象唯一的標(biāo)記,通過(guò)這個(gè)標(biāo)記可以查看每個(gè)實(shí)例的內(nèi)部。實(shí)例中端口的次序與模塊定義的次序相同。模塊實(shí)例化與程序調(diào)用不同。每個(gè)實(shí)例都是模塊的一個(gè)完全的拷貝,相互獨(dú)立、并行。模塊實(shí)例化(moduleinstances):/sundae_meng時(shí)延信號(hào)在電路中傳輸會(huì)有傳播延時(shí),如線延時(shí)、器件延時(shí)等assign#2B=A;表示B信號(hào)在2個(gè)時(shí)間單位后得到A信號(hào)的值

所有時(shí)延都必須根據(jù)時(shí)間單位進(jìn)行定義定義方式為在文件頭添加語(yǔ)句:`timescale1ns/100ps其中’timescale是VerilogHDL提供的預(yù)編譯處理命令,1ns表示時(shí)間單位是1ns,100ps表示時(shí)間精度是100ps根據(jù)該命令,編譯工具可以認(rèn)知#2為2ns/sundae_meng/sundae_meng空白符和注釋moduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputsel,//controlinputb,/*datainputs*/a;/*Thenetlistlogicselectsinput”a”whensel=0anditselects”b”whensel=1.*/

not(sel_,sel);and(a1,a,sel_),(b1,b,sel);or(out,a1,b1);endmodule格式自由一條語(yǔ)句可多行書(shū)寫(xiě);一行可寫(xiě)多個(gè)語(yǔ)句??瞻祝ㄐ滦?、制表符、空格)沒(méi)有特殊意義。如inputA;inputB;與inputA;inputB;是一樣的。使用空白符提高可讀性Verilog忽略空白符多行注釋?zhuān)?**/內(nèi)單行注釋到行末結(jié)束/sundae_mengVerilog采用的四值邏輯系統(tǒng)’0’,Low,False,LogicLow,Ground,‘1’,High,True,LogicHigh,Power,VDD,’X’Unknown:OccursatLogicWhichCannotbeResolvedConflictHiZ,HighImpedance,Tri-Stated,/sundae_meng具體實(shí)例5‘O375位八進(jìn)制數(shù)(二進(jìn)制11111)4'D24位十進(jìn)制數(shù)(二進(jìn)制0010)4‘B1x_014位二進(jìn)制數(shù)

7’Hx7位x(擴(kuò)展的x),即xxxxxxx4‘hZ4位z(擴(kuò)展的z),即zzzz4’d-4非法:數(shù)值不能為負(fù)8‘h2A

在位長(zhǎng)和基數(shù)之間,以及基數(shù)和數(shù)值之間允許出現(xiàn)空格3'b001非法:'和基數(shù)b之間不允許出現(xiàn)空格(2+3)'b10非法:位長(zhǎng)不能為表達(dá)式/sundae_meng字符串(string)格式符%h%o%d%b%c%s%m%thexoctdecbinACSIIstringmoduletime轉(zhuǎn)義符\t\n\\\”\<1-3digitoctalnumber>tab換行反斜杠雙引號(hào)ASCIIrepresentationofabove/sundae_meng標(biāo)識(shí)符(identifiers)標(biāo)識(shí)符是用戶(hù)在描述時(shí)給對(duì)象起的名字標(biāo)識(shí)符必須以字母(a-z,A-Z)或(_)開(kāi)頭,后面可以是字母、數(shù)字、($)或(_)。最長(zhǎng)可以是1023個(gè)字符標(biāo)識(shí)符區(qū)分大小寫(xiě),sel和SEL是不同的標(biāo)識(shí)符模塊、端口和實(shí)例的名字都是標(biāo)識(shí)符

moduleMUX2_1(out,a,b,sel); outputout; inputa,b,sel; notnot1(sel_,sel); andand1(a1,a,sel_); andand2(b1,b,sel); oror1(out,a1,b1); endmoduleVerilog標(biāo)識(shí)符/sundae_meng標(biāo)識(shí)符(identifiers)有效標(biāo)識(shí)符舉例:

shift_reg_a busa_index _bus3無(wú)效標(biāo)識(shí)符舉例:

34net//開(kāi)頭不是字母或“_” a*b_net//包含了非字母或數(shù)字,“$”“_” n@238//包含了非字母或數(shù)字,“$”“_”Verilog區(qū)分大小寫(xiě),所有Verilog關(guān)鍵詞使用小寫(xiě)字母/sundae_meng書(shū)寫(xiě)規(guī)范建議A、用有意義的名字如Sum、CPU_addr等。B、用下劃線區(qū)分詞。C、采用一些前綴或后綴,如時(shí)鐘采用Clk前綴:Clk_50,Clk_CPU;低電平采用_n后綴:Enable_n;D、統(tǒng)一縮寫(xiě),如全局復(fù)位信號(hào)Rst。E、同一信號(hào)在不同層次保持一致性,如同一時(shí)鐘信號(hào)必須在各模塊保持一致。F、自定義的標(biāo)識(shí)符不能與保留字同名。G、參數(shù)采用大寫(xiě),如SIZE/sundae_meng主要變量類(lèi)型net(線網(wǎng)):表示器件之間的物理連接register(寄存器):表示存儲(chǔ)元件parameters(參數(shù)):運(yùn)行時(shí)的常數(shù)Verilog主要有三類(lèi)數(shù)據(jù)類(lèi)型:/sundae_mengnet(線網(wǎng))net需要被持續(xù)的驅(qū)動(dòng),驅(qū)動(dòng)它的可以是門(mén)和模塊。

當(dāng)net驅(qū)動(dòng)器的值發(fā)生變化時(shí),會(huì)自動(dòng)將新值傳送到net上。在例子中,線網(wǎng)out由or門(mén)驅(qū)動(dòng)。當(dāng)or門(mén)的輸入信號(hào)變化時(shí)將傳輸?shù)骄€網(wǎng)net上。/sundae_mengnet類(lèi)的類(lèi)型(線網(wǎng))wire類(lèi)型是最常用的類(lèi)型,只有連接功能。wire常用來(lái)表示用assign語(yǔ)句賦值的組合邏輯信號(hào)取值為:0,1,x(不定值),z(高阻)wire和tri類(lèi)型有相同的功能。用戶(hù)可根據(jù)需要將線網(wǎng)定義為wire或tri以提高可讀性。例如,可以用tri類(lèi)型表示一個(gè)net有多個(gè)驅(qū)動(dòng)源,或者指示這個(gè)net可以是高阻態(tài)Z(hign-impedance)。/sundae_mengwire型變量的定義語(yǔ)法:wire數(shù)據(jù)1,數(shù)據(jù)2,……數(shù)據(jù)n;例子:wirea,b,c//定義了三個(gè)wire型變量a,b,cwire[7:0]databus//定義了八位寬wire型向量數(shù)據(jù)總線wire[20:1]addrbus//定義了20位寬wire型向量地址總線/sundae_meng寄存器類(lèi)(register)寄存器類(lèi)型在賦新值以前保持原值用行為描述結(jié)構(gòu)給寄存器類(lèi)型賦值(在過(guò)程塊中進(jìn)行)寄存器類(lèi)型大量應(yīng)用于行為描述及激勵(lì)描述reg_a、reg_b、reg_sel用于施加激勵(lì)給2:1多路器/sundae_meng寄存器類(lèi)的類(lèi)型寄存器類(lèi)有四種數(shù)據(jù)類(lèi)型寄存器類(lèi)型功能reg

可定義的無(wú)符號(hào)整數(shù)變量,可以是標(biāo)量(1位)或矢量,是最常用的寄存器類(lèi)型

integer

32位有符號(hào)整數(shù)變量,算術(shù)操作產(chǎn)生二進(jìn)制補(bǔ)碼形式的結(jié)果。通常用作不會(huì)由硬件實(shí)現(xiàn)的的數(shù)據(jù)處理。real

雙精度的帶符號(hào)浮點(diǎn)變量,用法與integer相同。time

64位無(wú)符號(hào)整數(shù)變量,用于仿真時(shí)間的保存與處理/sundae_mengVerilog中net和register聲明語(yǔ)法舉例:

rega;//一個(gè)標(biāo)量寄存器

reg[3:0]v;//從MSB到LSB的4位寄存器向量

reg[7:0]m,n;//兩個(gè)8位寄存器

tri[15:0]busa;//16位三態(tài)總線

wire[0:31]w1,w2;//兩個(gè)32位wire,MSB為bit0/sundae_meng選擇正確的數(shù)據(jù)類(lèi)型輸入端口可以由net/register驅(qū)動(dòng),但輸入端口只能是net輸出端口可以是net/register類(lèi)型,輸出端口只能驅(qū)動(dòng)netin1in2OABY雙向端口只能是net類(lèi)型/sundae_meng操作符類(lèi)型Verilog操作符?!芭c”操作符的優(yōu)先級(jí)總是比相同類(lèi)型的“或”操作符高操作符類(lèi)型符號(hào)連接及復(fù)制操作符一元操作符算術(shù)操作符邏輯移位操作符 關(guān)系操作符相等操作符按位操作符邏輯操作符條件操作符{}{{}}!~&|^*/%+-<<>>><>=<======!=!==&^~^|&&||?:最高最低優(yōu)先級(jí)/sundae_meng相等操作符注意邏輯等與case等的差別

邏輯等====01xz010xx101xxxxxxxzxxxxcase等=====01xz0100010100x0010z00012‘b1x==2’b0x

值為0,因?yàn)椴幌嗟?‘b1x==2’b1x

值為x,因?yàn)榭赡懿幌嗟?,也可能相?‘b1x===2’b0x

值為0,因?yàn)椴幌嗤?‘b1x===2’b1x

值為1,因?yàn)橄嗤琣=2'b1x;b=2'b1x;if(a==b)$display("aisequaltob");else$display("aisnotequaltob");a=2'b1x;b=2'b1x;if(a===b)$display("aisidenticaltob");else$display("aisnotidenticaltob");Case等只能用于行為描述,不能用于RTL描述。綜合工具不支持/sundae_meng級(jí)聯(lián)操作符

級(jí)聯(lián){}可以從不同的矢量中選擇位并用它們組成一個(gè)新的矢量。用于位的重組和矢量構(gòu)造moduleconcatenation;reg[7:0]rega,regb,regc,regd;reg[7:0]new;initialbeginrega=8'b0000_0011;regb=8'b0000_0100;regc=8'b0001_1000;regd=8'b1110_0000;endinitialfork#10new={regc[4:3],regd[7:5],regb[2],rega[1:0]};//new=8'b11111111#20$finish;joinendmodule/sundae_meng

1、VerilogHDL語(yǔ)言提供了十多條的編譯指令,例如:`define`include`timescale

編譯指令以`(反引號(hào))開(kāi)頭。編譯指令結(jié)束不需要加分號(hào)。編譯指令對(duì)同一個(gè)文件中的所有模塊有效。在進(jìn)行VerilogHDL語(yǔ)言編譯時(shí),已定義的編譯指令一直有效,直至有其它編譯指令修改它或取消它2、說(shuō)明

編譯預(yù)處理/sundae_meng`timescale說(shuō)明時(shí)間單位及精度 格式:`timescale<time_unit>/<time_precision>

如:`timescale1ns/100ps`timescale必須在模塊之前出現(xiàn)

`timescale1ns/10ps //Alltimeunitsareinmultiplesof1nanosecond moduleMUX2_1(out,a,b,sel); outputout; inputa,b,sel; not#1not1(sel_,sel); and#2and1(a1,a,sel_); and#2and2(b1,b,sel); or#1or1(out,a1,b1); endmodule

/sundae_mengTimescaletime_precision不能大于time_unitprecision的時(shí)間單位應(yīng)盡量與設(shè)計(jì)的實(shí)際精度相同precision是仿真器的仿真時(shí)間步長(zhǎng)若time_unit與precision_unit差別很大將嚴(yán)重影響仿真速度`timescale1s/1ps,則仿真器在1秒內(nèi)要掃描其事件序列1012次;而`timescale1s/1ms則只需掃描103次。如果沒(méi)有timescale說(shuō)明將使用缺省值,一般是ns/sundae_mengVerilogHDL語(yǔ)句模塊的描述方法

結(jié)構(gòu)型描述

系統(tǒng)級(jí)行為描述級(jí)算法級(jí)寄存器級(jí)數(shù)據(jù)流描述混合型描述/sundae_meng

結(jié)構(gòu)型描述術(shù)語(yǔ)及定義結(jié)構(gòu)描述:用門(mén)來(lái)描述器件的功能,是通過(guò)實(shí)例進(jìn)行描述的,將預(yù)定義的基本元件實(shí)例嵌入到語(yǔ)言中,監(jiān)控實(shí)例的輸入,一旦其中任何一個(gè)發(fā)生變化便運(yùn)算并輸出。primitives(基本單元):Verilog語(yǔ)言已定義的具有基本邏輯功能的模型(models)/sundae_meng結(jié)構(gòu)描述結(jié)構(gòu)描述表示一個(gè)邏輯圖結(jié)構(gòu)描述用已有的元件構(gòu)造更為復(fù)雜的元件modulers_latch(y,yb,r,s);outputy,yb;inputr,s;norn1(y,r,yb);norn2(yb,s,y);endmodule/sundae_mengVerilog基本單元(primitives)Verilog基本單元提供基本的邏輯功能,這些邏輯功能是預(yù)先定義的,用戶(hù)不需要再定義這些基本功能基本單元是Verilog庫(kù)的一部分,基本單元庫(kù)是自下而上(BottomUp)設(shè)計(jì)方法的一部分基本單元名稱(chēng)功能andornotbufxornandnorxnorLogicalAndLogicalOrInverterBufferLogicalExclusiveOrLogicalAndInvertedLogicalOrInvertedLogicalExclusiveOrInverted/sundae_meng調(diào)用基本單元的句法:可以只有一個(gè)輸出

語(yǔ)法:門(mén)類(lèi)型關(guān)鍵字<例化的門(mén)名稱(chēng)>(端口列表)其中端口列表為:多輸入門(mén):(輸出,輸入1,輸入2,……)多輸出門(mén):(輸出1,輸出2,……輸入)三態(tài)門(mén):(輸出,輸入,使能輸入)/sundae_meng帶條件的基本單元Verilog有四種不同類(lèi)型的條件基本單元這四種基本單元只能有三種引腳:output,input,enable這些單元由enable引腳使能。當(dāng)使能信號(hào)無(wú)效時(shí),輸出高阻態(tài)?;締卧Q(chēng)功能bufif1條件緩沖器,邏輯1使能bufif0條件緩沖器,邏輯0使能notif1條件反相器,邏輯1使能notif0條件反相器,邏輯0使能/sundae_meng基本單元實(shí)例化在端口列表中,先說(shuō)明輸出端口,然后是輸入端口實(shí)例化時(shí)實(shí)例的名字是可選項(xiàng)

and(out,in1,in2,in3,in4);//unnamedinstance bufb1(out1,out2,in);//namedinstance延時(shí)說(shuō)明是可選項(xiàng)。所說(shuō)明的延時(shí)是固有延時(shí)。輸出信號(hào)經(jīng)過(guò)該延時(shí)才變化。沒(méi)有說(shuō)明時(shí)延時(shí)為0。

notif0#3.1n1(out,in,cntrl);//delayspecified/sundae_meng模塊實(shí)例化(moduleinstantiation)模塊實(shí)例化時(shí)實(shí)例必須有一個(gè)名字。使用位置映射時(shí),端口次序與模塊的說(shuō)明相同。使用名稱(chēng)映射時(shí),端口次序與位置無(wú)關(guān)沒(méi)有連接的輸入端口初始化值為x。modulecomp(o1,o2,i1,i2);outputo1,o2;inputi1,i2;...endmodulemoduletest;compc1(Q,R,J,K);//Positionalmappingcompc2(.i2(K),.o1(Q),.o2(R),.i1(J));//Namedmappingcompc3(Q,,J,K);//Oneportleftunconnectedendmodule名稱(chēng)映射的語(yǔ)法:.內(nèi)部信號(hào)(外部信號(hào))沒(méi)有連接時(shí)通常會(huì)產(chǎn)生警告/sundae_meng行為描述行為級(jí)描述是對(duì)系統(tǒng)的高抽象級(jí)描述。在這個(gè)抽象級(jí),注重的是整個(gè)系統(tǒng)的功能而不是實(shí)現(xiàn)。Verilog將高級(jí)編程語(yǔ)言結(jié)構(gòu)用于行為描述,包括:

wait,while,ifthen,case和forever在每一個(gè)時(shí)鐘上升沿,若Clr不是低電平,置Q為D值,置Qb為D值的反DFF無(wú)論何時(shí)Clr變低置Q為0,置Qb為1/sundae_meng過(guò)程(procedural)塊過(guò)程塊是行為描述的基礎(chǔ)過(guò)程塊有兩種:initial塊,只能執(zhí)行一次always塊,循環(huán)執(zhí)行/sundae_meng

initial過(guò)程塊(1)initial塊語(yǔ)句模板:initialbegin

語(yǔ)句1;語(yǔ)句2;……end(2)例initialbegin#2Stream=1;#5Stream=0;#3Stream=1;#4Stream=0;#2Stream=1;#5Stream=0;end(3)說(shuō)明:0時(shí)刻開(kāi)始執(zhí)行,只執(zhí)行一次同一模塊內(nèi)的多個(gè)initial過(guò)程塊,0時(shí)刻開(kāi)始并行執(zhí)行主要面向功能模擬,通常不具有可綜合性。initial過(guò)程塊不能嵌套使用。initial語(yǔ)句中的積累延時(shí)/sundae_mengalways過(guò)程塊

always塊語(yǔ)句模板always@(<敏感信號(hào)表達(dá)式>)begin

//過(guò)程賦值//if語(yǔ)句//case語(yǔ)句//while,repeat,for語(yǔ)句//task,function調(diào)用end當(dāng)表達(dá)式的值改變時(shí)就執(zhí)行一遍塊內(nèi)語(yǔ)句always過(guò)程塊不能嵌套使用。/sundae_mengposedge與negedge關(guān)鍵字

上升沿下降沿例:同步時(shí)序電路的時(shí)鐘信號(hào)為clk,clear為異步清0信號(hào)。敏感信號(hào)可寫(xiě)為://上升沿觸發(fā),或高電平清0時(shí)always@(posedgeclkor

posedgeclear)Begin。。。end//上升沿觸發(fā),或低電平清0時(shí)always@(posedgeclkor

negedgeclear)

Begin。。。end/sundae_meng塊語(yǔ)句塊語(yǔ)句用來(lái)將多個(gè)語(yǔ)句組織在一起,使得他們?cè)谡Z(yǔ)法上如同一個(gè)語(yǔ)句。塊語(yǔ)句分為兩類(lèi):順序塊:置于關(guān)鍵字begin和end之間,塊中的語(yǔ)句以順序方式執(zhí)行并行塊:置于關(guān)鍵字fork和join之間,塊中語(yǔ)句并行執(zhí)行。Fork和join語(yǔ)句常用于testbench描述。這是因?yàn)榭梢砸黄鸾o出矢量及其絕對(duì)時(shí)間,而不必描述所有先前事件的時(shí)間。/sundae_meng塊語(yǔ)句(續(xù))在順序塊中,語(yǔ)句一條接一條地計(jì)算執(zhí)行。在并行塊中,所有語(yǔ)句在各自的延遲之后立即計(jì)算執(zhí)行。begin#5a=3;#5a=5;#5a=4;endfork#5a=3;#15a=4;#10a=5;join上面的兩個(gè)例子在功能上是等價(jià)的。Fork-join例子里的賦值故意打亂順序是為了強(qiáng)調(diào)順序是沒(méi)有關(guān)系的。注意fork-join塊是典型的不可綜合語(yǔ)句,并且在一些仿真器時(shí)效率較差。

/sundae_meng循環(huán)(looping)語(yǔ)句有四種循環(huán)語(yǔ)句:repeat:將一塊語(yǔ)句循環(huán)執(zhí)行確定次數(shù)。

repeat(次數(shù)表達(dá)式)<語(yǔ)句>while:在條件表達(dá)式為真時(shí)一直循環(huán)執(zhí)行

while(條件表達(dá)式)<語(yǔ)句>forever:重復(fù)執(zhí)行直到仿真結(jié)束

forever<語(yǔ)句>for:在執(zhí)行過(guò)程中對(duì)變量進(jìn)行計(jì)算和判斷,在條件滿(mǎn)足時(shí)執(zhí)行

for(賦初值;條件表達(dá)式;計(jì)算)<語(yǔ)句>綜合工具還不支持/sundae_meng循環(huán)(looping)語(yǔ)句語(yǔ)法:for(<變量賦初值語(yǔ)句>;<條件表達(dá)式>;<變量增值語(yǔ)句>)

循環(huán)體語(yǔ)句或語(yǔ)句塊;執(zhí)行過(guò)程:(1)執(zhí)行“變量賦初值語(yǔ)句”(2)判斷“條件表達(dá)式”,真:執(zhí)行“循環(huán)體語(yǔ)句或語(yǔ)句塊”,繼續(xù)執(zhí)行第(3)步假:循環(huán)結(jié)束,退出。(3)執(zhí)行“變量增值語(yǔ)句”,轉(zhuǎn)到(2)繼續(xù)執(zhí)行。/sundae_meng例數(shù)據(jù)選擇器的數(shù)據(jù)流型描述。

modulemux2x1_df(A,B,select,OUT);

inputA,B,select;

outputOUT;

assignOUT=select?B:A;endmodule數(shù)據(jù)流型描述條件運(yùn)算符是一種描述組合邏輯功能的方法,用assign連續(xù)賦值語(yǔ)句來(lái)實(shí)現(xiàn)連續(xù)賦值語(yǔ)句完成如下的組合功能:等式右邊的所有變量受持續(xù)監(jiān)控,每當(dāng)這些變量中有任何一個(gè)發(fā)生變化,整個(gè)表達(dá)式被重新賦值并送給等式左端數(shù)據(jù)流型建模/sundae_meng語(yǔ)句的順序執(zhí)行與并行執(zhí)行assign語(yǔ)句之間:并行執(zhí)行(同時(shí)執(zhí)行)過(guò)程塊之間(always,initial):并行執(zhí)行

assign語(yǔ)句與過(guò)程塊之間:并行執(zhí)行模塊中的門(mén)的實(shí)例、模塊實(shí)例語(yǔ)句:并行執(zhí)行過(guò)程塊(always,initial)內(nèi)部串行塊(begin-end):順序執(zhí)行并行塊(fork-join):并行執(zhí)行/sundae_meng混合描述的1位全加器modulefull_add5(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;regcout,m1,m2,m3;

//在always塊中被賦值的變量應(yīng)定義為reg型wires1;xorx1(s1,a,b);

//調(diào)用門(mén)元件always@(aorborcin)

//always塊語(yǔ)句beginm1=a&b;m2=b&cin;m3=a&cin;cout=(m1|m2)|m3;endassignsum=s1^cin;

//assign持續(xù)賦值語(yǔ)句endmodule/sundae_meng可綜合設(shè)計(jì)可綜合指的是所設(shè)計(jì)的指令和代碼能轉(zhuǎn)化為具體的電路網(wǎng)表結(jié)構(gòu)。綜合過(guò)程就是將VerilogHDL語(yǔ)言描述的行為級(jí)或數(shù)據(jù)流電路模型轉(zhuǎn)化為RTL級(jí)功能塊或門(mén)級(jí)電路網(wǎng)表的過(guò)程。而不可綜合的設(shè)計(jì)主要用于設(shè)計(jì)的仿真驗(yàn)證。行為級(jí)或數(shù)據(jù)流電路建模RTL級(jí)功能塊邏輯優(yōu)化優(yōu)化后的門(mén)級(jí)網(wǎng)表RTL級(jí)綜合門(mén)級(jí)綜合RTL級(jí)綜合得到由功能模塊構(gòu)成的電路結(jié)構(gòu)邏輯優(yōu)化器以用戶(hù)設(shè)定的面積和時(shí)間約束為目標(biāo)優(yōu)化電路網(wǎng)表針對(duì)目標(biāo)工藝產(chǎn)生優(yōu)化后的電路門(mén)級(jí)網(wǎng)表結(jié)構(gòu)/sundae_meng設(shè)計(jì)準(zhǔn)則1、將硬件的行為以合理的方式映射為一些進(jìn)程。2、對(duì)于每個(gè)進(jìn)程完成的操作,盡量選擇最有效的算法。3、了解綜合器的性能,特別是了解綜合工具支持的VerilogHDL可綜合子集。以合理的代碼風(fēng)格引導(dǎo)綜合工具生成硬件4、對(duì)于固定值的信號(hào)要用常量代替。5、盡量共享復(fù)雜運(yùn)算,可以共享的數(shù)據(jù)處理用函數(shù)和過(guò)程定義6、明確指出過(guò)程的無(wú)關(guān)態(tài),引導(dǎo)綜合器進(jìn)行優(yōu)化。7、使用能夠滿(mǎn)足需要的最小數(shù)據(jù)寬度。8、用組合邏輯實(shí)現(xiàn)的電路和用時(shí)序邏輯實(shí)現(xiàn)的電路要分配到不同的進(jìn)程中。/sundae_meng9、不要使用枚舉類(lèi)型的屬性。10、Integer應(yīng)加范圍限制。11、通常的可綜合代碼應(yīng)該是同步設(shè)計(jì)。12、除非是關(guān)鍵路徑的設(shè)計(jì),一般不采用調(diào)用門(mén)級(jí)元件來(lái)描述設(shè)計(jì)的方法,建議采用行為語(yǔ)句來(lái)完成設(shè)計(jì)。13、不使用初始化語(yǔ)句;不使用帶有延時(shí)的描述;不使用循環(huán)次數(shù)不確定的循環(huán)語(yǔ)句,如forever,while等。14、用always過(guò)程描述組合邏輯,應(yīng)在敏感信號(hào)列表中列出塊中出現(xiàn)的所有輸入信號(hào)。15、所有的內(nèi)部寄存器都應(yīng)該能夠被復(fù)位。在使用FPGA實(shí)現(xiàn)設(shè)計(jì)時(shí),應(yīng)盡量使用器件的全局復(fù)位端作為系統(tǒng)總的復(fù)位,因?yàn)樵撘_的驅(qū)動(dòng)功能最強(qiáng),到所有邏輯單元的延時(shí)也基本相同,同樣的道理,應(yīng)盡量使用器件的全局時(shí)鐘端作為系統(tǒng)外部時(shí)鐘輸入端。設(shè)計(jì)準(zhǔn)則(續(xù))/sundae_meng4、VHDL介紹VHDL程序的基本單元與構(gòu)成例1.多路選擇器entitymuxisgeneric(m:TIME:=1ns);

port(A,B,T:inBIT;Z:outBIT);endmux;當(dāng)條件T成立時(shí),輸出A路信號(hào);當(dāng)條件T不成立時(shí),輸出B路信號(hào)ABTZMUX/sundae_meng

architectureconnectofmuxis

beginCale:process(A,B,T)

variabletmpl,tmp2,tmp3:BIT;

begin tmp1:=AandT;

tmp2:=Band(notT);

tmp3:=tmp1ortmp2;

Z<=tmp3afterm;

endprocess;endconnect:/sundae_meng例2.半加器--Theentitydeclaration

entity

Half_adderis

port

(XHalf_Sum X:inBit

;YadderCarry Y:inBit

; Sum:outBit

; Carry:outBit

); endHalf_adder; /sundae_meng--Thearchitecturebody: architectureBehavioral_descriptionofHalf_adderis

begin

process

begin Sum<=XxorYafter5Ns; Carry<=XandYafter5Ns;

waitonX,Y;

endprocess;

endBehavioral_description

Sum=X

YCarry=XYXHalf_SumYadderCarry/sundae_meng例3,用半加器構(gòu)造全加器entityFull_adderis

port( A:inBit; B:inBit

; Carry_in:inBit; S:outBit; Carry_out:outBit);

endFull_adder;/sundae_meng

architectureStructureofFull_adderis --signaldeclarations

signalTemp_sum:Bit;

signalTemp_carry_1:Bit;

signalTemp_carry_2:Bit; --localcomponentdeclarations

componentHalf_adder

port(X:inBit; Y:inBit; Sum:outBit; Carry:outBit);

endcomponent;/sundae_meng

componentOr_gate

port(In1:Bit: In2:Bit; Out1:outBit);endcomponent; --componentinstantiationstatements U0:Half_adder

portmap(X=>A,Y=>B,Sum=>Temp_sum,

Carry=>Temp_carry_1); U1:Half_adder

portmap(X=>Temp_sum,Y=>Carry_in Sum=>S,Carry=>Temp_Carry_2); U2:Or_gate

portmap(In1=>Temp_carry_1,In2=>Temp_carry_2,Out1=>Carry_out);endstructure;/sundae_mengVHDL結(jié)構(gòu)(實(shí)體+結(jié)構(gòu)體)entity實(shí)體名is[說(shuō)明語(yǔ)句;][begin

實(shí)體語(yǔ)句部分;]end[實(shí)體名];

Architecture

結(jié)構(gòu)體名of

實(shí)體名is [說(shuō)明語(yǔ)句;]

begin [并行處理語(yǔ)句;]

end[結(jié)構(gòu)體名];說(shuō)明模塊的外觀說(shuō)明模塊的內(nèi)部功能或結(jié)構(gòu)

功能:多路選擇器

結(jié)構(gòu):全加器/sundae_meng一個(gè)實(shí)體可以有多個(gè)不同的結(jié)構(gòu)體(比如有的速度快,有的硬件少)所以:對(duì)應(yīng)于同一實(shí)體的結(jié)構(gòu)體不允許同名,而對(duì)應(yīng)于不同實(shí)體的結(jié)構(gòu)體可以同名。entityFull_adderisarchitectureStructureofFull_adderisarchitectureStructure1ofFull_adderisentitymuxisarchitectureStructureofmuxis/sundae_meng包(Package)、庫(kù)(Library)、

配置(Configuration)在實(shí)體說(shuō)明和結(jié)構(gòu)體中說(shuō)明的數(shù)據(jù)類(lèi)型、常量和子程序等只對(duì)相應(yīng)的結(jié)構(gòu)體可見(jiàn),而不能被其他設(shè)計(jì)實(shí)體使用。為了提供一組可被多個(gè)設(shè)計(jì)實(shí)體共享的類(lèi)型、常量和子程序說(shuō)明,VHDL提供了包(Package)包用來(lái)單純的羅列要用到的信號(hào)定義、常數(shù)定義、數(shù)據(jù)類(lèi)型,元件語(yǔ)句、函數(shù)定義和過(guò)程定義等,它是一個(gè)可編譯的設(shè)計(jì)單元,也是庫(kù)結(jié)構(gòu)中的一個(gè)層次/sundae_meng包(Package

)包分為包說(shuō)明和包體兩部分包說(shuō)明的一般形式是,Package包名is {說(shuō)明語(yǔ)句;}

end[包名];

包體的一般形式是:

Packagebody包名

is {說(shuō)明語(yǔ)句;}end[包名];包說(shuō)明和相應(yīng)包體的名稱(chēng)必須一致包說(shuō)明定義數(shù)據(jù)類(lèi)型,給出函數(shù)的調(diào)用說(shuō)明

包體具體描述實(shí)現(xiàn)該函數(shù)功能的語(yǔ)句(即函數(shù)定義)和數(shù)據(jù)的賦值這種分開(kāi)描述的好處是,當(dāng)函數(shù)的功能需要作某些調(diào)整時(shí),只要改變包體的相關(guān)語(yǔ)句就行了,使重新編譯的單元數(shù)目盡可能少

/sundae_meng可見(jiàn)性包體中的內(nèi)容不能被其它VHDL元件引用,只對(duì)相應(yīng)的包說(shuō)明可見(jiàn),而包說(shuō)明中的內(nèi)容才是通用的和可見(jiàn)的(當(dāng)然還必須用use子句才能提供這種可見(jiàn)性)。下面即為一個(gè)包說(shuō)明及其相應(yīng)包體的例子:PackageLogicis

typeThree_level_logicis(‘0’,‘1’,‘z’);

functionlnvert(input:Three_1evel_logic)returnThree_1evel_logic;endlogic;函數(shù)說(shuō)明(對(duì)外可見(jiàn))/sundae_mengpack

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論