![第四章不同抽象級別veriloghdl模型_第1頁](http://file4.renrendoc.com/view/5cb251c96e61451ea55f0a20995eed62/5cb251c96e61451ea55f0a20995eed621.gif)
![第四章不同抽象級別veriloghdl模型_第2頁](http://file4.renrendoc.com/view/5cb251c96e61451ea55f0a20995eed62/5cb251c96e61451ea55f0a20995eed622.gif)
![第四章不同抽象級別veriloghdl模型_第3頁](http://file4.renrendoc.com/view/5cb251c96e61451ea55f0a20995eed62/5cb251c96e61451ea55f0a20995eed623.gif)
![第四章不同抽象級別veriloghdl模型_第4頁](http://file4.renrendoc.com/view/5cb251c96e61451ea55f0a20995eed62/5cb251c96e61451ea55f0a20995eed624.gif)
![第四章不同抽象級別veriloghdl模型_第5頁](http://file4.renrendoc.com/view/5cb251c96e61451ea55f0a20995eed62/5cb251c96e61451ea55f0a20995eed625.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章不同抽象級別的VerilogHDL模前系統(tǒng)級算法級RTL門級(ga開關(guān)級(switch-在本章的各節(jié)中通過許多實(shí)際的VerilogHDL模塊的設(shè)計(jì)來了解不同抽象級別模塊的結(jié)構(gòu)和可RTL常重要的。而對于電路基本部件(如門、緩沖器、驅(qū)動器等)庫的設(shè)計(jì)者而言,則需要掌握用戶自定義源語元件(UDP)和開關(guān)級的描述。在本中由于篇幅有限,只簡單介紹了UDP,略去了開關(guān)級的描述。一個復(fù)雜電路的完整VerilogHDL模型是由若干個VerilogHDL模塊構(gòu)成的,每一個模塊又可以由若干個子模塊構(gòu)成。這些模塊可以分別用不同抽象級別的VerilogHDL描述,在一個模塊中也可以有多種級別的描述。利用VerilogHDL語言結(jié)構(gòu)所提供的這種功能就可以構(gòu)造一個模塊間的清晰層次結(jié)構(gòu)來描述一個邏輯網(wǎng)絡(luò)是由許多邏輯門和開關(guān)所組成,因此用邏輯門的模型來描述邏輯網(wǎng)絡(luò)是最直觀的。VerilogHDLVerilogHDL中有關(guān)門類型的關(guān)鍵字共有26個之多,在本中只介紹最基本的八個。有關(guān)其它的門類型關(guān)鍵字,讀者可以通過翻閱VerilogHDL語言參考書,在設(shè)計(jì)的實(shí)踐中逐步掌握。下面列出了八 nand與非門 或非 xnor異或非門 門與開關(guān)的說明語法可以用標(biāo)準(zhǔn)的語句格式和一個簡單的實(shí)例加以說明。門語句的格式如下:<門的類型>[<驅(qū)動能力><延時(shí)>]<門實(shí)例1>[,<門實(shí)例2>,…<門實(shí)例門的類型是門語句所必需的它可以是VerilogHDL語定的26種門類型中的任意一種驅(qū)動能力和延時(shí)是可選項(xiàng)可根據(jù)不同的情況選不同的值或不選門實(shí)例1是在本模塊中的第一個這種類型的門,而門實(shí)例n是的第n個這種類型的門有關(guān)驅(qū)動能力的選項(xiàng)在以后的章節(jié)里再詳細(xì)加以介紹.最后用一個具體的例子來說明門類型的:nand#10nd1(a,d這說明在模塊中了一個名為nd1的與非門(nand),輸入為dlock和clear,輸出為a,輸出與輸入的延時(shí)為10個單位時(shí)間。用門級結(jié)構(gòu)描述D觸發(fā)下面的例子是用VerilogHDL語言描述的D型主從觸發(fā)器模塊,通過這個例子,可以學(xué)習(xí)門級結(jié)構(gòu) nand#10 nand#9nd3(c,a,d), #10在這個VerilogHDL結(jié)構(gòu)描述的模塊中,flop定義了模塊名,設(shè)計(jì)上層模塊時(shí)可以用這個名(flop)調(diào)用這個模塊;module,input,output,endmodule等都是關(guān)鍵字;nand表示與非門;#10表示10個單位時(shí)間的延時(shí);nd1,nd2,,nd8,iv1,iv2分別為圖4.1.2參數(shù)分別為圖4.1.2圖4.1.2 D型主從觸發(fā)器的電路結(jié)構(gòu),如果已經(jīng)編制了一個模塊,如4.1.2.中的flop,可以在另外的模塊中這個模塊的方法與門類型的實(shí)例非常類似。只需面寫上已編的模塊名,緊跟著寫上的實(shí)例名,按順序?qū)懮?,flopf1op_d(d1,clk,clrb,q,flopflop_d(.clock(clk),.這兩個例子都表示實(shí)例f1op_d已編模塊flop。從上面的兩個例子可以看出時(shí)f1op_d的端口信號與flop的端口對應(yīng)有兩種不同的表示方法。模塊的端口名可以按序排列也可以不必按序排列,如果模塊的端口名按序排列,只需按序列出實(shí)例的端口名。(見例1)例的端口信號和被模塊的端口信號必需一一列出(見例2)。下面的例子中了4.1.2中已設(shè)計(jì)的模塊flop,用它構(gòu)成一個四位寄存器 output[3:0] 在上面這個結(jié)構(gòu)描述的模塊中,hardregf1,f2,f3,f4分別為圖5其后面括號中的參數(shù)分別為圖5中各基本部件的輸入輸出信號請注意當(dāng)f1到f4實(shí)例已編模塊flop時(shí),由于不需要flop端口中的qb口,故在時(shí)把它省去,但逗號仍需要留著。顯而易見,通過VerilogHDL模塊的調(diào)用,可以構(gòu)成任何復(fù)雜結(jié)構(gòu)的電路。這種以結(jié)構(gòu)方式所建立的硬 dqdqdq圖4.1.3 四位寄存器電路結(jié)構(gòu)4.1.4用戶定義的原語用戶定義的原語是從英語UserDefinedPrimitives直接翻譯過來的,在VerilogHDL中常用它的縮自己特色的用于仿真的基本邏輯元件模塊并建立相應(yīng)的原語庫。這樣,就可以與調(diào)用VerilogHDL似,只是不用module而改用primitive開始,不用endmodule而改用endprimitive結(jié)束。在Verilog的語法中還規(guī)定了UDP的形式定義和必須遵守的幾個要點(diǎn),與一般模塊有不同之處,在下面定義UDP的語primitive(輸出端口名,輸入端口名1,輸入端口名outputinput輸入端口名1,2,…;reg輸出端口名; 輸出端口寄存器或時(shí)序邏輯寄存器賦初值(0,1,或 ; ; ; :… :VerilogHDL4.2.1僅用于產(chǎn)生仿真測試信號的VerilogHDL為了對已設(shè)計(jì)的模塊進(jìn)行檢驗(yàn)往往需要產(chǎn)生一系列信號作為輸出,輸入到已設(shè)計(jì)的模塊,并檢查已設(shè)計(jì)模塊的輸出看它們是否符合設(shè)計(jì)要求這就要求編寫測試模塊也稱作測試文件常用帶.tf擴(kuò)展名的文件來描述測試模塊。下面的VerilogHDL行為描述模型用于產(chǎn)生時(shí)鐘信號,以驗(yàn)證電路功能。其輸出的仿真信號共有2個,分別是時(shí)鐘clkresetclkresetreset信號輸出一個復(fù)位信號之后,維持在高電平。這能可利用下面的語句來實(shí)現(xiàn): #3#5以后每隔5個時(shí)間單位,時(shí)鐘就翻轉(zhuǎn)一次,這能可利用下面的語句來實(shí)現(xiàn)always#5clk=modulegen_clk(clk,outputclk;outputreset;regclk,reset;reset=1;//initialstate#3reset=#5reset=1;always#5clk=~clk;用這種方法所建立的模型主要用于產(chǎn)生仿真時(shí)測試下一級電路所需的信號,如下一級電路有輸出反饋到上一級電路,并對上一級電路有影響時(shí),也可以在這個模型中再加入輸入信號,用于接收下一級電路的反饋信號??梢岳眠@個反饋信號再在這個模塊中編制相應(yīng)的輸出信號,這樣就比用簡單的波形描述信號能更好地仿真實(shí)際電路。不僅要包括時(shí)鐘信號(clock)、數(shù)據(jù)(data[3:0])、清零信號(clearb)的變化,還需四位寄存器(hardreg)模塊,以觀測各種組合信號輸入到該四位寄存器(hardreg)模塊后,它的輸出(q[3:0])的變化。這個測試文件完整的源程序如下:modulehardreg_top;regclock,clearb;reg[3:0]data;wire[3:0]`definestim#100data=4'b //宏定義stim,可使源程序簡潔eventend__pass; hardregreg_4bit(.d(data),.clk(clock),.clrb(clearb),.把本模塊中產(chǎn)生的測試信號dlock、clearb輸入實(shí)例reg_4bit以觀察輸出信號qout.實(shí)例reg_4bit了clock=0;clearb=1;always#50clock=~clock;always@(end__pass)clearb=always@(posedge$display("attime%0dclearb=%bdata=%dqout=%d",$time,clearb,data,類似于C語言的printf 宏定義stim,等同于#100data=4'b0001;。注意時(shí)要用`符號...#200->end_延遲200個單位時(shí)間,觸發(fā)事件end_ #time上面簡單地介紹了利用VerilogHDL門級結(jié)構(gòu)建模來設(shè)計(jì)復(fù)雜數(shù)字電路的最基本的思路而實(shí)用的電路設(shè)計(jì)往往并沒有那么簡單。常需要利用多種方法來建立電路模型,既利用電路圖輸入的方法又利用VerilogHDL各種建模的方法,發(fā)揮各自在不同類型電路描述中的長處。而且要在層次管理工具的協(xié)調(diào)下把各個既獨(dú)立又互相聯(lián)系的模塊組織成復(fù)雜的大型數(shù)字電路,才能有效地設(shè)計(jì)出高質(zhì)量的數(shù)字電路。4.2.2.VerilogHDL建模在TOP-DOWN設(shè)計(jì)中的作用和行為建模的可綜合性問VerilogHDL行為描述建模不僅可用于產(chǎn)生仿真測試信號對已設(shè)計(jì)的模塊進(jìn)行檢測,也常常用于復(fù)雜數(shù)字邏輯系統(tǒng)的頂層設(shè)計(jì),也就是通過行為建模把一個復(fù)雜的系統(tǒng)分解成可操作的若干個模塊,每個模塊之間的邏輯關(guān)系通過行為模塊的仿真加以驗(yàn)證。雖然這些子系統(tǒng)在設(shè)計(jì)的這一階段還不都是電路邏輯,也未必能用綜合器把它門直接轉(zhuǎn)換成電路邏輯,但還是能把一個大的系統(tǒng)合理地分解為若干個較小的子系統(tǒng)。然后,每個子系統(tǒng)再用可綜合風(fēng)格的VerilogHDL模塊(門級結(jié)構(gòu)或RTL級或算法級或系統(tǒng)級的模塊)或電路圖輸入的模塊加以描述。當(dāng)然這種描述可以分很多個層次來進(jìn)行,但最終的目的是要設(shè)計(jì)出具體的電路來,所以在任何系統(tǒng)的設(shè)計(jì)過程中接近底層的模塊往往都是門級結(jié)構(gòu)或RTL級的VerilogHDL模塊或電路圖輸入的模塊。由于VerilogHDL高級行為描述用于綜合的歷史還只有短短的幾年,可綜合風(fēng)格的VHDL和VerilogHDL的語法只是它們自己語言的一個子集。又由于HDL的可綜合性研究近年來發(fā)展很快,可綜合子集的國際標(biāo)準(zhǔn)目前尚未最后形成注[1],因此各廠商的綜合器所支持的可綜合HDL子集也略有所不同。本中有關(guān)可綜合風(fēng)格的VerilogHDL的內(nèi)容,只著重介紹門級邏輯結(jié)構(gòu)、RTL級和部分算法級的描述,而系統(tǒng)級(數(shù)據(jù)流級)的綜合由于還不太成熟,暫不作介紹。所謂邏輯綜合就其實(shí)質(zhì)而言是設(shè)計(jì)流程中的一個階段,在這一階段中將較高級抽象層次的描述自動地HDL程序轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,而并非真實(shí)具體的門級電路。而真實(shí)具體的電路還需要利用ASIC和FPGA制造廠商的布局布線工具根據(jù)綜合后生成的標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。為了能轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,HDL程序的編寫必須符合特定綜合器所要求的風(fēng)格注[1]。由于門級結(jié)構(gòu)、RTL級的HDL程序的綜合是很成熟的技術(shù),所有的綜合器都支持這兩個級別HDL程序的綜合,因而是本書綜合方面介紹的重點(diǎn)。注[1]:請參閱參考資料用VerilogHDL建模進(jìn)行TOP-DOWN設(shè)計(jì)的實(shí)下面是一個用VerilogHDL的建模來設(shè)計(jì)一個用于教學(xué)的經(jīng)簡化的只有八條指令、字長為一字節(jié)的處理單元(CPU)大家知道RISU是一個復(fù)雜的數(shù)字邏輯電路,但是它基本部件的邏輯并不復(fù)雜,可把它分割成九個基本部件累加(ACCUMULATORRISC算術(shù)運(yùn)算單(RISC_ALU數(shù)據(jù)控制(DTRL動態(tài)器(RAM)、指令寄存器(INSTRUCTIONREGISTER)、狀態(tài)控制器(STATECONTROLLER)、(PROGRAMMCOUNTER(ADDRMUX(CLKGENVerilogHDL把各基本部件的功能描述清楚,并把每個部件的輸入輸出之間的邏輯關(guān)系通過仿真加以驗(yàn)證,并不是很RISC_CPU的VerilogHDL整體模型經(jīng)各部件之間的邏輯關(guān)系后再逐塊用可綜合風(fēng)格的VerilogHDL語法檢查并改寫為可綜合的VerilogHDL果仿真結(jié)果正確,電路就設(shè)計(jì)完畢。下面就是這些基本部件的VerilogHDL模塊:累加器用寄存器(ACCUMULATOR
moduleregister(r,clk,data,ena,rst);output[7:0]r;input[7:0]data;inputclk,ena,rst;wireload;andDFFDFFDFFDFFDFFDFFDFFDFF其中DFF和and都是Verilog語言中保留的關(guān)鍵字分別表示帶復(fù)位端的DRISC算術(shù)運(yùn)算單元
moduleriscalu(alu_out,zero,opcode,data,accum,clock);output[7:0]alu_out;reg[7:0]alu_out;outputzero;input[2:0]opcode;input[7:0]data,accum;inputclock;`defineZdly`defineALUdlywire#`Zdly//***即zero=1'b1ifaccum==0,elsealways@(negedgeclock)3'b000:#`ALUdlyalu_out=accum;//PassAccumulator3'b001:#`ALUdlyalu_out=accum;//PassAccumulator3'b010:#`ALUdlyalu_out=data+accum;//ADD3'b011:#`ALUdlyalu_out=data&accum;//AND3'b100:#`ALUdlyalu_out=data^accum;//XOR3'b101:#`ALUdlyalu_out=data; //PassData3'b110:#`ALUdlyalu_out=accum;//PassAccumulator
3'b111:#`ALUdlyalu_out=accum;//PassAccumulatordefault:begin$display("UnknownOPcode");#`ALUdlyalu_out=8'bXX;數(shù)據(jù)控制器(DDDmoduledtrl(data,alu_out,fetem_rd,clk2);output[7:0]data;input[7:0]inputfetch,mem_rd,assigndata=((!fetch&!mem_rd&!clk2)?alu_out:8'bz);動態(tài)器 `timescalemodulemem(data,addr,read,write);inout[7:0]data;input[4:0]addr;inputread,write;reg[7:0]wire[7:0]data=(read?memory[addr]:8'bZZZZZZZZalways@(posedgewrite)指令寄存器(INSTRUCTIONRR
moduleregister(r,clk,data,ena,rst);output[7:0]r;input[7:0]data;inputclk,ena,rst;wireload;andDFFDFFDFFDFFDFFDFFDFFDFFd0(r[0],,load,data[0],rst);狀態(tài)控制器 K 2 `timescalemodulecontrol(load_acc,mem_rd,mem_wr,inc_pc,load_pc,load_ir,halt,opcode,fetch,zero,clk,clk2,reset);outputload_acc,mem_rd,mem_wr,inc_pc,load_pc,load_ir,halt;regload_acc,mem_rd,mem_wr,inc_pc,load_pc,load_ir,halt;input[2:0]opcode;inputfetch,zero,clk,clk2,`defineHLT`defineSKZ`defineADD`defineAND`defineXOR`defineLDA`defineSTO`defineJMPalways@(posedgefetch)always@(negedgereset)disablealways@(posedgereset)@(posedgefetch)ctl_cycle;taskctl_cycle;//state0—Address//state1—InstructionFetch@(posedgeclk)@(negedgeclk)@(posedge//state4—SecondAddressSetup@(negedgeclk)//state5—OperandFetch@(posedgeclk)//state6—ALUoperation@(negedgeclk)elseif((opcode==`SKZ)&&(zero))elseif((opcode==`ADD)||(opcode==`AND)||(opcode==`XOR)||(opcode//state7—StoreResult@(posedgeclk)if(opcode==`JMP)elseif(opcode==`STO)elseif((opcode==`SKZ)&&(zero))elseif((opcode==`ADD)||(opcode==`AND)||(opcode==`XOR)|| //taskctl_cycle程序計(jì)數(shù)器
Behaviorofa5-bit`timescalemodulecounter(cnt,clk,data,rst,load);output[4:0]cnt;input[4:0]data;inputclk,rst,load;reg[4:0]cnt;//asynchronousresetalways@(rst)always@(posedgeif(load==1) //loadcountercnt<=data; //(load!=1)thereforeincrementif(cnt==5'h1F)//counterrollover地址多路器Fmoduleaddrmux(addr,pc_addr,ir_addr,fetch);output[4:0]addr;input[4:0]pc_addr,ir_addr;inputfetch;assignaddr=(fetch?pc_addr:ir_addr);時(shí)鐘發(fā)生器
***Afree-runningmultiphaseclockocillatorfor***VerificationofRisU***Thismodulegenerates4clockswiththe***8080moduleclkgen(fetch,clk2,clk,alu_clk);outputfetch,clk2,clk,alu_clk;reg`defineperiodassignalu_clk=(fetch|clk2|clk);forever#(`period/2)clk=~clk;forever#(`period) clk2=~clk2;forever#(`period*2)fetch=~fetch;最后,用一個頂層模塊把這些基本部件聯(lián)系起來,下面所列出的就是這個頂層模塊的VerilogHDL的結(jié)`timescale1ns/100psmodulerisc_top;wirereset,load_acc,load_ir,load_pc,halt,zero;wireclock,clk2,alu_clock,fetch,inc_pc;wire[7:0]alu_out,accum,data,opcode_iraddr;wire[4:0]addr,ir_addr,pc_addr;wire[2:0]assign{opcode,ir_addr}=registeraccumulator(.r(accum),.clk(clock),riscalurisc_alu(.alu_out(alu_out),.opcode(opcode),.data(data),.accum(accum),.clock(clock)dtrldata_control(.fetch(fetch),.mem_rd(mem_rd),.clk2(clk2));memram_mem(.data(data),.addr(addr),.read(mem_rd),.write(mem_wr));registerinstr_register(.data(data),.ena(load_ir),.rst(reset)controlstate_controler(.inc_pc(inc_pc),.halt(halt),/r
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國天然鈾行業(yè)市場發(fā)展態(tài)勢及前景戰(zhàn)略研判報(bào)告
- 2025年精制蕓豆項(xiàng)目可行性研究報(bào)告
- 湖北經(jīng)濟(jì)學(xué)院法商學(xué)院《計(jì)算機(jī)輔助設(shè)計(jì)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西工程職業(yè)學(xué)院《現(xiàn)代農(nóng)業(yè)技術(shù)導(dǎo)論(養(yǎng)殖類)》2023-2024學(xué)年第二學(xué)期期末試卷
- 公務(wù)員出國申請書
- 電廠廢水回收利用技術(shù)研究與實(shí)踐
- 公派出國 申請書
- 電力設(shè)備的定期檢查與維護(hù)培訓(xùn)
- 2024年網(wǎng)絡(luò)劇市場評估分析及發(fā)展前景調(diào)查戰(zhàn)略研究報(bào)告
- 電子商務(wù)發(fā)展趨勢與網(wǎng)絡(luò)市場營銷策略
- 《革蘭陽性球菌》課件
- 加油站合規(guī)化管理運(yùn)行
- 廣東省廣州市2023年中考道德與法治試卷(含答案)
- 高中化學(xué)教材(人教版)課本實(shí)驗(yàn)(回歸課本)
- 安徽省蕪湖市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含解析
- 項(xiàng)目工程質(zhì)量管理體系
- USB-3.1-TYPE-C-培訓(xùn)資料公開課獲獎?wù)n件
- 《機(jī)械制圖(多學(xué)時(shí))》中職全套教學(xué)課件
- 兒科體格檢查課件
- 北京能源集團(tuán)有限責(zé)任公司招聘筆試題庫2024
評論
0/150
提交評論