電子信息工程專業(yè)基礎課_第1頁
電子信息工程專業(yè)基礎課_第2頁
電子信息工程專業(yè)基礎課_第3頁
電子信息工程專業(yè)基礎課_第4頁
電子信息工程專業(yè)基礎課_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)唐英杰電子信息工程專業(yè)根底課第五章VerilogHDL言語〔二〕一、VerilogHDL模型的不同籠統(tǒng)級別VerilogHDL模型可以是實踐電路中不同級別的籠統(tǒng)。同一個物理電路,可以在不同的層次上用VerilogHDL語句來描畫它。從行為和功能的角度來描畫某一個電路模塊——行為模塊;從電路構(gòu)造的角度來描畫該電路模塊——構(gòu)造模塊?;\統(tǒng)的級別和它們對應的模塊類型有5種:1、系統(tǒng)級2、算法級3、RTL級4、門級5、開關(guān)級行為級構(gòu)造級第五章VerilogHDL言語〔二〕1、VerilogHDL門級構(gòu)造描畫用于門級描畫關(guān)鍵字包括:not〔非門〕、and〔與門〕、nand〔與非門〕、or〔或門〕、nor〔或非門〕、xor〔異或門〕、xnor〔異或非門〕、buf〔緩沖器〕以及bufif1、bufif0、notif1、notif0等各種三態(tài)門。門級描畫語句格式為<門類型>[<驅(qū)動才干><延時>]〔門實例列表〕;nand#10nd1(a,data,clock,clear);運用了一個名為nd1的與非門,輸入為data、clock、clear。輸出為a,輸出與輸入的延時為10個時間單位第五章VerilogHDL言語〔二〕用門級構(gòu)造描畫D觸發(fā)器

第五章VerilogHDL言語〔二〕module flop(data,clock,clear,q,qb);input data,clock,clear;output q,qb;nand #10 nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand #9 nd3(c,a,d),nd7(q,e,qb);not #10 iv1(ndata,data),iv2(nclock,clock);endmodule第五章VerilogHDL言語〔二〕由曾經(jīng)設計成的模塊構(gòu)成更高一層的模塊假設曾經(jīng)編制一個模塊,可以在另外的模塊中援用這個模塊方式:1、flopflop_d(d1,clk,clrb,q,qn);2、flopflop_d(.clock(clk),.q(q),.clear(clrb)..qb(qn),.data(d1));第五章VerilogHDL言語〔二〕clrdqclkclrdqclkclrdqclkq0d0clrdqclkd3d2q2q3q1d1clrbclkf4f3f2f1四位存放器電路構(gòu)造圖【例】用觸發(fā)器組成帶有清零端的4位存放器第五章VerilogHDL言語〔二〕`include“flop.v〞module hardreg(d,clk,clrb,q);input clk,clrb;input[3:0] d;output[3:0] q;flop f1(d[0],clk,clrb,q[0],),f2(d[1],clk,clrb,q[1],),f3(d[2],clk,clrb,q[2],),f4(d[3],clk,clrb,q[3],);endmodule第五章VerilogHDL言語〔二〕經(jīng)過VerilogHDL言語中的模塊實例可以援用,可以構(gòu)成任何復雜構(gòu)造的電路,這種以構(gòu)造方式建立的Verilog模型不僅可以仿真,而且也是可以綜合的,其本質(zhì)是表示電路的詳細構(gòu)造。第五章VerilogHDL言語〔二〕2、VerilogHDL的行為描畫可以用比較籠統(tǒng)的Verilog描畫方法來建立模型【例】用行為描畫的方法描畫帶有清零端的4位存放器modulehardreg(d,clk,clrb,q);inputclk,clrb;input[3:0]d;output[3:0]q;reg[3:0]q;always@(posedgeclkorposedgeclrb).

第五章VerilogHDL言語〔二〕beginif(clrb)q<=0;elseq<=d;endendmodule第五章VerilogHDL言語〔二〕3、用戶定義的原語用戶定義的原語是從英語userdefinedprimitives直接翻譯而來,簡稱UDP。利用UDP用戶可以定義本人設計的根本邏輯元件的功能,也就是,可以利用UDP來定義有本人特征的用于仿真的根本邏輯元件模塊并建立相應的原語庫。primitiveudp_and(out,a,b);outputout;inputa,b;table//ab:out;00:0;01:0;10:0;11:1;endtableendprimitive第五章VerilogHDL言語〔二〕留意點:UDP只能有一個輸出端,而且必需是端口闡明列表的第一項;UDP可以有多個輸入端,最多允許有10個輸入端;UDP一切端口變量必需是標量,也就是1位的;在UDP的真值表項中,只允許出現(xiàn)0、1、x,不允許出現(xiàn)Z;只需輸出端才可以被定義為存放器型變量;Initial語句用于為時序電路內(nèi)部賦初值,只允許賦0、1、x,默許值為x。第五章VerilogHDL言語〔二〕二、如何編寫和驗證簡單的純組合邏輯模塊數(shù)字邏輯系統(tǒng)的設計是一個非常細致、嚴密和費時間的復雜過程,做這項任務的人員必需具有極其仔細擔任的任務態(tài)度、矯捷的頭腦、頑強的毅力和細致踏實的作風。每個部件模塊的設計任務包括:1、電路模塊的設計2、測試模塊的設計3、設計文檔的編寫和整理測試模塊的設計和文檔編寫是比電路模塊設計更為重要的設計環(huán)節(jié)。測試能否嚴密和完好決議了系統(tǒng)設計的成敗,設計文檔的完好和準確也是系統(tǒng)設計成敗的關(guān)鍵,短少完好的設計闡明文件,就不能維持設計任務的延續(xù)性,給今后的調(diào)試和維護帶來困難。第五章VerilogHDL言語〔二〕加法器moduleADDER4BIT(Ain,Bin,SUM,OVF);input[3:0]Ain,Bin;output[3:0]SUM;

output OVF;assign{OVF,SUM}=Ain+Bin;Endmodule這種描畫方法比較直觀,可以直接用綜合器轉(zhuǎn)換為門級組合邏輯相互銜接的描畫。依然用同樣的測試模塊測試。這種描畫使得邏輯關(guān)系更容易明白。第五章VerilogHDL言語〔二〕乘法器modulemult_8(x,y,product);input[7:0]x,y;output[15:0]product;

assignproduct=x*y;Endmodule第五章VerilogHDL言語〔二〕比較器modulecompare(x,y,xgy,xsy,xey);input[width-1:0]x,y;output[15:0]xgy,xsy,xey;regxgy,xsy,xeyParameterwidth=8;always@(xory)beginif(x==y)xey=1;第五章VerilogHDL言語〔二〕elsexey=0;if(x>y)xgy=1;elsexgy=0;if(x<y)xsy=1;elsexsy=0;endendmodule第五章VerilogHDL言語〔二〕多路器modulemux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs);input[2:0]addr;input[width-1:0]in1,in2,in3,in4,in5,in6,in7,in8;inputncs;ouput[width-1:0]mout;parameterwidth=8;always@(addrorin1orin2orin3orin4orin5orin6orin7orin8orncs)begin

第五章VerilogHDL言語〔二〕if(!ncs)case(addr)3’b000mout=in1;3’b001mout=in2;3’b010mout=in3;3’b011mout=in4;3’b100mout=in5;3’b101mout=in6;3’b110mout=in7;3’b111mout=in8;endcaseelsemout=0;endendmodule第五章VerilogHDL言語〔二〕三、復雜數(shù)字系統(tǒng)的構(gòu)成數(shù)字邏輯就其本質(zhì)而言,只需組合邏輯和時序邏輯兩大類。組合邏輯可以用來完成簡單的邏輯功能時序邏輯那么可以用來產(chǎn)生與運算過程有關(guān)的〔時鐘〕多個控制信號序列包括存儲運算的結(jié)果和取出存儲器中的數(shù)據(jù)在用可綜合的硬件描畫言語設計的復雜運算邏輯系統(tǒng)中,往往用同步形狀機來產(chǎn)生與時鐘節(jié)拍親密相關(guān)的多個控制信號序列,用它來控制多路器或數(shù)據(jù)通道的開啟/封鎖,來使有限的組合邏輯運算器資源得到充分的運轉(zhuǎn),并存放有意義的運算結(jié)果,或把它們傳送到指定的地方。第五章VerilogHDL言語〔二〕組合邏輯:輸出只是輸入邏輯電平的函數(shù)〔有延時〕,與電路的原始形狀無關(guān)。時序邏輯:輸出不只是輸入的邏輯電平的函數(shù),還與電路所處的形狀有關(guān)。同步時序邏輯是在同一時鐘跳變節(jié)拍的前提下,如輸入條件滿足,那么進入下一形狀,否那么仍留在原來的形狀的形狀機。數(shù)字邏輯電路的構(gòu)成第五章VerilogHDL言語〔二〕組合邏輯:由與、或、非門組成的網(wǎng)絡。常用的有:多路器、數(shù)據(jù)通路開關(guān)、加法器、乘法器等,沒有記憶功能。時序邏輯:由多個觸發(fā)器和多個組合邏輯塊組成的網(wǎng)絡。常用的有:計數(shù)器、復雜的數(shù)據(jù)流動控制邏輯、運算控制邏輯、指令分析和操作控制邏輯。同步時序邏輯的設計是設計復雜的數(shù)字邏輯系統(tǒng)的中心。第五章VerilogHDL言語〔二〕【例】一個八位數(shù)據(jù)通路控制器in[7]ControlSwitchout[7]in[0]out[0]…...…...`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wire[7:0]out,in;assignout=(ControlSwith==`ON)?in:8‘h00第五章VerilogHDL言語〔二〕in[7:0]開關(guān)out[7:0]tt3102153262880215320000第五章VerilogHDL言語〔二〕in[7]ControlSwitchout[7]CLOCKDQ[7]CLOCKin[0]ControlSwitchout[0]DQ[0]out[7]out[0]帶存放器的八位數(shù)據(jù)通路控制器第五章VerilogHDL言語〔二〕`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wireclockwire[7:0]out,in;always@(posedgeclock)beginif(ControlSwith==`ON)out<=in;elseout<=out;end第五章VerilogHDL言語〔二〕【例】一個八位三態(tài)數(shù)據(jù)通路控制器outbuf[7]LinkBusSwitchbus[7]第五章VerilogHDL言語〔二〕`defineON1‘b1`defineOFF1‘b0wireLinkBusSwitch;wire[7:0]outbuf;inout[7:0]bus;assignbus=(LinkBusSwitch==`ON)?outbuf:8‘hzzoutbuf[7:0]開bus[7:0]tt310215326288021532ZZZZLinkBusSwitch關(guān)第五章VerilogHDL言語〔二〕防止競爭和冒險由于組合邏輯和布線的延遲引起abcabttcclock第五章VerilogHDL言語〔二〕ba#2#3#4cedba#2#3#4ced總延遲=Max{2,3}+4=7時鐘周期必需>7ns總延遲={Max{2,3}+4+1}=8時鐘周期必需>4ns總處置數(shù)據(jù)的吞吐量添加#1#1clock組合邏輯和布線的延遲在組合邏輯中的疊加第五章VerilogHDL言語〔二〕全局時鐘網(wǎng)絡觸發(fā)器緩沖器觸發(fā)器1觸發(fā)器n圖1全局時鐘網(wǎng)表示圖圖2平衡樹構(gòu)造表示圖全局時鐘網(wǎng)和平衡樹構(gòu)造第五章VerilogHDL言語〔二〕四、同步形狀機的原理、構(gòu)造和設計1、為什么要設計有限形狀機?假設能嚴厲以時鐘跳變沿為前提,按排好時序來操作邏輯系統(tǒng)中每一個開關(guān)Si,那么系統(tǒng)中數(shù)據(jù)的流動和處置睬按同一時鐘節(jié)拍有序地進展,可以控制冒險和競爭景象對邏輯運算的破壞,時延問題就能有效地加以處理。利用同步有限形狀機就能產(chǎn)生復雜的以時鐘跳變沿為前提的同步時序邏輯,并提供操作邏輯系統(tǒng)的開關(guān)陣列所需求的復雜控制時序〔具有信號互鎖和先后次序等要求的〕。第五章VerilogHDL言語〔二〕假設我們能設計這樣一個電路:1〕能記住本人目前所處的形狀;2〕形狀的變化只能夠在同一個時鐘的跳變沿時辰發(fā)生,而不能夠發(fā)生在恣意時辰;3〕在時鐘跳變沿時辰,如輸入條件滿足,那么進入下一形狀,并記住本人目前所處的形狀,否那么仍保管原來的形狀;4〕在進入不同的形狀時辰,對系統(tǒng)的開關(guān)陣列做開啟或封鎖的操作。第五章VerilogHDL言語〔二〕clock10nsS2開關(guān)S1tttSnS3tttS4第五章VerilogHDL言語〔二〕有了以上電路,我們就不難設計出復雜的控制序列來支配數(shù)字系統(tǒng)的控制開關(guān)陣列。能到達以上要求的電路就是時序和組合電路相互結(jié)合的產(chǎn)物:同步有限形狀機和由形狀和時鐘共同控制的開關(guān)邏輯陣列。我們只需掌握有限形狀機的根本設計方法,加上對根本電路的掌握,再加上對數(shù)據(jù)處置的過程的細致了解,我們就可以防止由于邏輯器件和布線延遲產(chǎn)生的冒險競爭景象所呵斥的破壞,設計出符合要求的復雜數(shù)字邏輯系統(tǒng)。第五章VerilogHDL言語〔二〕同步有限形狀機ena_2ena_3ena_nena_1clock組合邏輯1存放器組組合邏輯2存放器組組合邏輯3存放器組組合邏輯N存放器組input_1input_2input_n數(shù)字系統(tǒng)的構(gòu)成表示圖第五章VerilogHDL言語〔二〕2、同步有限形狀機的設計什么是有限形狀機?有限形狀機是由存放器組和組合邏輯構(gòu)成的硬件時序電路;其形狀〔即由存放器組的1和0的組合形狀所構(gòu)成的有限個形狀〕只能在同一時鐘跳變沿的情況下才干從一個形狀轉(zhuǎn)向另一個形狀;終究轉(zhuǎn)向哪一形狀不但取決于各個輸入值,還取決于當前形狀。形狀機可用于產(chǎn)生在時鐘跳變沿時辰開關(guān)的復雜的控制邏輯,是數(shù)字邏輯的控制中心第五章VerilogHDL言語〔二〕Mealy形狀機

下一個形狀=F(當前形狀,輸入信號);

輸出信號=G(當前形狀,輸入信號);下一形狀的邏輯F輸出邏輯G形狀存放器時鐘信號clkclk輸入輸入輸出當前形狀鼓勵信號第五章VerilogHDL言語〔二〕Moor形狀機

下一個形狀=F(當前形狀,輸入信號)

輸出信號=G(當前形狀);下一狀態(tài)的邏輯F輸出邏輯G形狀存放器時鐘信號clkclk輸入輸入輸出當前形狀鼓勵信號圖2.時鐘同步的形狀機構(gòu)造(Moor形狀機)第五章VerilogHDL言語〔二〕簡單的形狀機設計舉例有限形狀機的圖形表示圖形表示:形狀、轉(zhuǎn)移、條件和邏輯開關(guān)IdleStartStopClearA/K1=0!AA/K2=1!Reset/K2=0K1=0!Reset/K2=0K1=0〔!Reset|!A〕/K2=0K1=1!Reset/K2=0K1=0第五章VerilogHDL言語〔二〕定義模塊名和輸入輸出端口;定義輸入、輸出變量或存放器;定義時鐘和復位信號;定義形狀變量和形狀存放器;用時鐘沿觸發(fā)的always塊表示形狀轉(zhuǎn)移過程;在復位信號有效時給形狀存放器賦初始值;描畫形狀的轉(zhuǎn)換過程:符合條件,從一個形狀到另外一個形狀,否那么留在原形狀;驗證形狀轉(zhuǎn)移的正確性,必需完好和全面。有限形狀機的Verilog描畫第五章VerilogHDL言語〔二〕modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;//定義時鐘、復位和輸入信號outputK2,K1;//定義輸出控制信號的端口regK2,K1;//定義輸出控制信號的存放器reg[1:0]state;

//定義形狀存放器parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;//定義形狀變量參數(shù)值always@(posedgeClock)if(!Reset)begin//定義復位后的初始形狀和輸出值state<=Idle;K2<=0;K1<=0;end【例1】第五章VerilogHDL言語〔二〕elsecase(state)Idle:beginif(A)beginstate<=Start;K1<=0;endelsestate<=Idle;endStart:beginif(!A)state<=Stop;elsestate<=Start;endStop:begin//符合條件進入新形狀,否那么留在原形狀if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;end

Clear:beginif(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;endendcaseendmodule第五章VerilogHDL言語〔二〕我們還可以用另一個VerilogHDL模型來表示同一個有限形狀,【例2】用可綜合的Verilog模塊設計用獨熱碼表示形狀的形狀機modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[3:0]state;

parameterIdle=4’b1000,Start=4’b0100,Stop=4’b0010,Clear=4’b0001;第五章VerilogHDL言語〔二〕第五章VerilogHDL言語〔二〕always@(posedgeclock)if(!Reset)beginstate<=Idle;K2<=0;K1<=0;endelsecase(state)Idle:if(A)beginstate<=Start;K1<=0;endelsestate<=Idle第五章VerilogHDL言語〔二〕Start:if(!A)state<=Stop;elsestate<=Start;Stop:if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;Clear:if(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;第五章VerilogHDL言語〔二〕default:state<=Idle;endcaseendmodule

[例2]與[例1]的主要不同點是形狀編碼,[例2]采用了獨熱編碼,而[例1]那么采用Gray碼,終究采用哪一種編碼好要看詳細情況而定。第五章VerilogHDL言語〔二〕在比較復雜的形狀機設計過程中,我們往往把形狀的變化與輸出開關(guān)的控制分成兩部分來思索。就象前面講過的Mealy形狀機輸出部分的組合邏輯。為了調(diào)試方便,還經(jīng)常把每一個輸出開關(guān)寫成一個個獨立的always組合塊。在調(diào)試多輸出形狀機時,這樣做比較容易發(fā)現(xiàn)問題和矯正模塊編寫中出現(xiàn)的問題。建議大家在設計復雜的多輸出形狀機時采用下面的風格:

第五章VerilogHDL言語〔二〕modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]state,nextstate;

parameterIdle=2'b00,Start=2'b01,Stop=2'b10,Clear=2'b11;【例3】第五章VerilogHDL言語〔二〕//--------每一個時鐘沿產(chǎn)生一次能夠的形狀變化-----------always@(posedgeClock)beginif(!Reset)state<=Idle;elsestate<=nextstate;end//-------------------------------------------------------第五章VerilogHDL言語〔二〕//------產(chǎn)生下一形狀的組合邏輯-------------------------always@(stateorA)case(state)Idle:if(A)nextstate=Start;elsenextstate=Idle;Start:if(!A)nextstate=Stop;elsenextstate=Start;Stop:if(A)nextstate=Clear;elsenextstate=Stop;Clear:if(!A)nextstate=Idle;elsenextstate=Clear;default:nextstate=2'bxx;endcase第五章VerilogHDL言語〔二〕//----產(chǎn)生輸出K1的組合邏輯--------------always@(stateorResetorA)if(!Reset)K1=0;elseif(state==Clear&&!A)//從Clear轉(zhuǎn)向IdleK1=1;elseK1=0;第五章VerilogHDL言語〔二〕//---產(chǎn)生輸出K2的組合邏輯---------------always@(stateorResetorA)if(!Reset)K2=0;elseif(state==Stop&&A)//從Stop轉(zhuǎn)向ClearK2=1; elseK2=0;//------------------------------------------endmodule第五章VerilogHDL言語〔二〕用輸出指定的碼表示形狀的形狀機方法四采用了另一種方法:直接把形狀碼定義為輸出。也就是把形狀碼的指定與形狀機控制的輸出聯(lián)絡起來,把形狀的變化直接用作輸出,這樣做可以提高輸出信號的開關(guān)速度并節(jié)省電路器件。這種設計方法常用在高速形狀機中。建議大家在設計高速形狀機時采用方法四的風格。例中state[3]和state[0]分別表示前面兩個例子中的輸出K2和K1。第五章VerilogHDL言語〔二〕modulefsm(Clock,Reset,A,K2,K1,state);inputClock,Reset,A;outputK2,K1;output[4:0]state;reg[4:0]state;

assignK2=state[4];//把形狀變量的最高位用作輸出K2assignK1=state[0];//把形狀變量的最低位用作輸出K1【例4】第五章VerilogHDL言語〔二〕parameter//-------outputcodedstateassignment---//--------K2_i_j_n_K1–Idle=5'b0_0_0_0_0,Start=5'b0_0_0_1_0,Stop=5'b0_0_1_0_0,StopToClear=5'b1_1_0_0_0,Clear=5'b0_1_0_1_0,ClearToIdle=5'b0_0_1_1_1;

第五章VerilogHDL言語〔二〕always@(posedgeClock)if(!Reset)beginstate<=Idle;endelsecase(state)Idle:if(A)state<=Start;elsestate<=Idle;Start:if(!A)state<=Stop;elsestate<=Start;第五章VerilogHDL言語〔二〕Stop:if(A)state<=StopToClear;elsestate<=Stop;StopToClear:state<=Clear;Clear:if(!A)state<=ClearToIdle;elsestate<=Clear;ClearToIdle:state<=Idle;default:state<=Idle;endcaseendmodule第五章VerilogHDL言語〔二〕不同風格的描畫適宜不同規(guī)模的形狀機和不同的綜合工具,有的風格查錯和修正較容易,但寫簡單的形狀機時比較費事。Synopsys公司的綜合器建議運用這種風格來描畫形狀機。

上面四個例子是同一個形狀機的四種不同的VerilogHDL模型,它們都是可綜合的,在設計復雜程度不同的形狀機時有它們各自的優(yōu)勢。如用不同的綜合器對這四個例子進展綜合,綜合出的邏輯電路能夠會有些不同,但邏輯功能是一樣的。第五章VerilogHDL言語〔二〕有限形狀機設計的普通步驟:1、邏輯籠統(tǒng),得出形狀轉(zhuǎn)換圖:就是把給出的一個實踐邏輯關(guān)系表示為時序邏輯函數(shù)。可以用形狀轉(zhuǎn)換表來描畫,也可以用形狀轉(zhuǎn)換圖來描畫。這需求:分析給定的邏輯問題,確定輸入變量,輸出變量以及電路形狀數(shù)。通常是取緣由〔或條件〕作為輸入變量,取結(jié)果作為輸出變量;定義輸入、輸出邏輯形狀的含義,并將電路形狀順序編號;按照要求列出電路的形狀轉(zhuǎn)換表或畫出形狀轉(zhuǎn)換圖這樣就把給定的邏輯問題籠統(tǒng)到一個時序邏輯函數(shù)了第五章VerilogHDL言語〔二〕2、形狀化簡:假設在形狀轉(zhuǎn)換圖中出現(xiàn)了這樣兩個形狀:它們在一樣的輸入下轉(zhuǎn)換到同一形狀去,并得到一樣的輸出,那么稱它們?yōu)榈葍r形狀。顯然等價形狀是反復的,可以合并為一個。電路的形狀數(shù)越少,存儲電路也就越簡單。形狀化簡的目的就在于將等價形狀盡能夠地合并,以得到最簡的形狀轉(zhuǎn)換圖。3、形狀分配:形狀分配有稱形狀編碼。通常有很多編碼方法,編碼方案選擇得當,設計的電路可以簡單;反之,選得不好,那么設計的電路就會復雜許多。在實踐設計時,須綜合思索電路復雜度與電路性能這兩個要素。第五章VerilogHDL言語〔二〕在觸發(fā)器資源豐富的FPGA、ASIC設計中,采用獨熱碼〔one-hot-coding)既可以使電路性能得到保證又可充分利用其觸發(fā)器數(shù)量多的優(yōu)勢,也可以采取輸出編碼的形狀指定來簡化電路構(gòu)造,并提高形狀機的運轉(zhuǎn)速度4、選定觸發(fā)器的類型并求出形狀方程、驅(qū)動方程和輸出方程;5、按照方程得出邏輯圖用VerilogHDL來描畫有限形狀機,可以充分發(fā)揚硬件描畫言語的籠統(tǒng)建模才干,運用always塊語句和case〔if〕等條件語句及賦值語句即可方便地實現(xiàn)。詳細的邏輯化簡及邏輯電路到觸發(fā)器映射均可由計算機自動完成,上述設計步驟中的第2步及4、5步不再需求很多的人為干涉,使電路設計任務得到簡化,效率也有很大的提高。第五章VerilogHDL言語〔二〕五、設計可綜合的形狀機的指點原那么1、用verilogHDL言語設計可綜合的形狀機的指點原那么在設計采用FPGA實現(xiàn)的形狀機時,建議采用獨熱碼形狀機;建議采用case、casex或casez語句來建立形狀機模型,在case的最后一定要寫default,并將形狀變量設置為’bx;假設將默許形狀設計為某一確定的形狀行不行?要留意一個問題:雖然綜合器產(chǎn)生的邏輯和設置default:state=’bx時一樣,但是形狀機的模型綜合前和綜合后的仿真結(jié)果會不一致。由于啟動仿真器時,形狀機一切的輸入都不確定,因此立刻進入default形狀,這樣的設置便會將形狀變量設為state1,但是實踐硬件電路的形狀機在通電后進入的形狀是不確定的,很能夠不是state1的形狀,因此還是設置default:state=’bx與實踐情況相一致。但在有多余形狀情況下,還是可以經(jīng)過綜合指令將默許形狀設置為某一確定的有效形狀,由于這樣能使形狀機在偶爾進入多余形狀后,能在下一個時鐘跳變時前往正常任務形狀,否那么會引起死鎖。第五章VerilogHDL言語〔二〕形狀機應該有一個異步或同步復位端,以便在通電時將硬件電路復位到有效形狀;在veriloghdl中,形狀必需明確賦值,通常運用參數(shù)或宏定義語句加上賦值語句來實現(xiàn)Parameterstate1=2’h1,satate2=2’h2;………Current_state=state2;第五章VerilogHDL言語〔二〕2、綜合的普通原那么綜合之前一定要進展仿真;每一次規(guī)劃布線之后都要進展仿真,在器件編程或流片之前要做最后的仿真;用verilogHDL描畫的異步形狀機是不能綜合的;假設要為電平敏感的鎖存器建模,運用延續(xù)賦值語句是最簡單的方法第五章VerilogHDL言語〔二〕3、語句指點原那么always:每個always塊只能有一個事件控制@(event-expression),而且要緊跟在always關(guān)鍵字的后面;always塊可以表示時序邏輯或者組合邏輯,也可以用always塊既表示電平敏感的透明鎖存器又同時表示組合邏輯,但是不引薦運用這種描畫方法,由于這容易產(chǎn)生錯誤和多余的電平敏感的透明鎖存器;帶有posedge或negedge關(guān)鍵字的事件表達式表示沿觸發(fā)的時序邏輯,沒有posedge或negedge關(guān)鍵字的表示組合邏輯或電平敏感的鎖存器,或者兩種都表示;每個表示時序的always塊中只能由一個時鐘跳變沿觸發(fā),置位或復位最好也由該時鐘跳變沿出發(fā);第五章VerilogHDL言語〔二〕每個always塊賦值的信號都必需定義成reg型或整型;always塊中應該防止組合邏輯反響回路。每次執(zhí)行always塊時,在生成組合邏輯的always塊中賦值的一切信號必需有明確的值;否那么,需求設計者在設計中參與電平敏感的鎖存器來堅持賦值前的最后一個值。只需這樣,綜合器才干正常生成電路;假設不這樣做,綜合器就會發(fā)出警告,提示設計中插入了鎖存器。用always塊設計純組合邏輯電路時,在生成組合邏輯的always塊中參與賦值的一切信號都必需有明確的值,即在賦值表達式右端參與賦值的信號都必需在always@(敏感電平列表〕中列出。第五章VerilogHDL言語〔二〕賦值:對一個存放器型〔reginteger)變量給定的賦值,只允許在一個always塊內(nèi)進展,如在另一個always塊中也對其賦值,那么是非法的;把某信號賦值為‘bx,綜合器就把它解釋成無關(guān)形狀,因此綜合器為其生成的硬件電路最簡約。第五章VerilogHDL言語〔二〕4、形狀機的置位與復位〔1〕形狀機的異步置位與復位異步置位與復位是與時鐘無關(guān)。當異步置位與復位信號到來時,它們立刻分別置觸發(fā)器的輸出為1或0,不需求等到時鐘沿到來時才置位或復位。形狀機的異步置位與復位是用always塊和事件控制實現(xiàn)的。事件控制語法:事件控制語法:@(<沿關(guān)鍵詞時鐘信號or沿關(guān)鍵詞復位信號or沿關(guān)鍵詞置位信號〉)沿關(guān)鍵詞:posedge,negedge.信號可以按恣意順序列出。第五章VerilogHDL言語〔二〕事件控制實例異步高電平有效的置位〔時鐘上升沿〕@(posedgeclkorposedgeset);異步低電平有效的置位〔時鐘上升沿〕@(posedgeclkornegedgeset);異步低電平有效的置位和高電平有效的復位〔時鐘上升沿〕@(posedgeclkornegedgesetorposedgereset);第五章VerilogHDL言語〔二〕帶有異步高電平有效的置位與復位的always塊:always@(posedgeclkorposedgesetorposedgereset)beginif(reset)begin//置輸出為0endelseif(set)begin//置輸出為1endelsebegin//與時鐘同步的邏輯endend第五章VerilogHDL言語〔二〕帶有異步高電平有效的置/復位的D觸發(fā)器:moduledff1(q,qb,d,clk,set,reset);inputd,clk,set,reset;outputq,qb;regq,qb;always@(posedgeclkorposedgesetorposedgereset)beginif(reset)beginq<=0;qb<=1;end第五章VerilogHDL言語〔二〕elsebeginif(set)beginq<=1;qb<=0;endelsebeginq<=d;qb<=~d;endendendmodule第五章VerilogHDL言語〔二〕〔2〕形狀機的同步置位與復位同步置位與復位是指只需在時鐘的有效跳變沿時辰置位或復位,信號才干使觸發(fā)器置位或復位。因此不要將set和reset信號名列入always塊的事件控制表達式,由于當它們有變化時不應觸發(fā)always塊的執(zhí)行。相反,always塊的執(zhí)行應只由時鐘有效跳變沿觸發(fā),能否置位或復位應在always塊中檢查set和reset信號的電平。所以,set和reset的電平維持時間必需大于時鐘的間隔時間,否那么set和reset不能每次都能有效地完成置位或復位的任務。事件控制語法:@(<沿關(guān)鍵詞時鐘信號〉)沿關(guān)鍵詞:posedge,negedge.第五章VerilogHDL言語〔二〕事件控制實例同步的具有高電平有效的置位與復位的always塊:always@(posedgeclk)beginif(reset)begin//置輸出為0endelseif(set)begin//置輸出為1endelsebegin//與時鐘同步的邏輯endend第五章VerilogHDL言語〔二〕同步的具有高電平有效的置位與復位的D觸發(fā)器:moduledff2(q,qb,d,clk,set,reset);inputd,clk,set,reset;outputq,qb;regq,qb;always@(posedgeclk)beginif(reset)beginq<=0;qb<=1;end第五章VerilogHDL言語〔二〕elsebeginif(set)beginq<=1;qb<=0;endelsebeginq<=d;qb<=~d;endendendmodule第五章VerilogHDL言語〔二〕第五章VerilogHDL言語〔二〕六、阻塞和非阻塞賦值的不同1、阻塞和非阻塞的不同阻塞和非阻塞賦值的言語構(gòu)造是VerilogHDL言語中最難了解的概念之一。兩個要點:在描畫組合邏輯的always塊中運用阻塞賦值,那么綜合成組合邏輯的電路構(gòu)造;在描畫時序邏輯的always塊中運用非阻塞賦值,那么綜合成時序邏輯的電路構(gòu)造

方程式右手方向的表達式或變量--------RHS方程式左手方向的表達式或變量--------LHS第五章VerilogHDL言語〔二〕〔1〕阻塞賦值阻塞賦值操作的符號=。在操作時,先計算RHS部分的值,此時賦值語句不允許任何別的語句的干擾,直到先行的賦值完成,即將RHS的值賦值給LHS后,才允許別的賦值語句的執(zhí)行-------阻塞的原由。所謂阻塞的概念是指在同一個always塊中,后面的賦值語句是在前一句賦值語句終了后再開場賦值的。假設在一個過程塊中阻塞賦值的RHS變量正好是另一個過程塊中阻塞賦值的LHS變量,這兩個過程塊又用同一個時鐘沿觸發(fā),這時阻塞賦值操作就會出現(xiàn)問題,即假設阻塞賦值的順序安排不好,就會出現(xiàn)競爭。而假設這兩個阻塞賦值操作用同一個時鐘沿觸發(fā),那么執(zhí)行的順序是無法確定的。第五章VerilogHDL言語〔二〕【例1】采用阻塞賦值的反響振蕩器modulefboscl(y1,y2,clk,rst);inputclk,rst;outputy1,y2;regy1,y2;always@(posedgeclkorposedgerst)if(rst)y1=0;elsey1=y2;always@(posedgeclkorposedgerst)if(rst)y2=1;elsey2=y1;endmodule第五章VerilogHDL言語〔二〕〔2〕非阻塞賦值非阻塞賦值操作的符號<=。在操作時,先計算RHS部分的值,當賦值操作時辰終了時更新LHS,在計算非阻塞賦值的RHS的表達式和更新LHS期間,其它的Verilog語句,包括其它的非阻塞賦值語句都能同時計算RHS表達式和更新LHS。非阻塞賦值允許其它的語句同時進展操作。非阻塞賦值的操作由兩個部分組成:在賦值時辰開場時,計算非阻塞賦值RHS表達式在賦值時辰終了時,更新非阻塞賦值LHS表達式非阻塞賦值操作只能用于對存放器類型變量進展賦值,因此只能用在‘initial’塊和‘a(chǎn)lways’塊等過程塊中,而非阻塞賦值不允許用于延續(xù)賦值第五章VerilogHDL言語〔二〕【例2】采用阻塞賦值的反響振蕩器modulefboscl(y1,y2,clk,rst);inputclk,rst;outputy1,y2;regy1,y2;always@(posedgeclkorposedgerst)if(rst)y1<=0;elsey1<=y2;always@(posedgeclkorposedgerst)if(rst)y2<=1;elsey2<=y1;endmodule第五章VerilogHDL言語〔二〕2、VerilogHDL編程要點時序電路建模時,用非阻塞賦值;鎖存器電路建模時,用非阻塞賦值;用always塊建立組合邏輯模型時,用阻塞賦值;在同一個always塊中建立時序和組合邏輯電路時,用非阻塞賦值;在同一個always塊中不要既用非阻塞賦值又用阻塞賦值;不要在一個以上的always塊中為同一個變量賦值;用$strobe系統(tǒng)義務來顯示用非阻塞賦值的變量值;在賦值時不要運用#0延遲。第五章VerilogHDL言語〔二〕3、自

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論