




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、EDA 技術(shù)唐英杰電子信息工程專(zhuān)業(yè)基礎(chǔ)課第五章 Verilog HDL 語(yǔ)言(二)一、 Verilog HDL模型的不同抽象級(jí)別 Verilog HDL模型可以是實(shí)際電路中不同級(jí)別的抽象。 同一個(gè)物理電路,可以在不同的層次上用Verilog HDL 語(yǔ)句來(lái)描述它。 從行為和功能的角度來(lái)描述某一個(gè)電路模塊行為模塊; 從電路結(jié)構(gòu)的角度來(lái)描述該電路模塊結(jié)構(gòu)模塊。抽象的級(jí)別和它們對(duì)應(yīng)的模塊類(lèi)型有5種:1、系統(tǒng)級(jí)2、算法級(jí)3、RTL級(jí)4、門(mén)級(jí)5、開(kāi)關(guān)級(jí)行為級(jí)結(jié)構(gòu)級(jí)第五章 Verilog HDL 語(yǔ)言(二)1、 Verilog HDL門(mén)級(jí)結(jié)構(gòu)描述 用于門(mén)級(jí)描述關(guān)鍵字包括:not(非門(mén))、and(與門(mén))、n
2、and(與非門(mén))、or(或門(mén))、nor(或非門(mén))、xor(異或門(mén))、xnor(異或非門(mén))、buf(緩沖器)以及bufif1、bufif0、notif1、notif0等各種三態(tài)門(mén)。門(mén)級(jí)描述語(yǔ)句格式為 (門(mén)實(shí)例列表); nand #10 nd1(a,data,clock,clear);使用了一個(gè)名為nd1的與非門(mén),輸入為data、clock 、clear 。輸出為a,輸出與輸入的延時(shí)為10個(gè)時(shí)間單位 第五章 Verilog HDL 語(yǔ)言(二) 用門(mén)級(jí)結(jié)構(gòu)描述D觸發(fā)器 第五章 Verilog HDL 語(yǔ)言(二)moduleflop(data,clock,clear,q,qb);inputdata,c
3、lock,clear;outputq,qb;nand#10nd1(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#9nd3(c,a,d), nd7(q,e,qb);not#10iv1(ndata,data), iv2(nclock,clock);endmodule第五章 Verilog HDL 語(yǔ)言(二) 由已經(jīng)設(shè)計(jì)成的模塊構(gòu)成更高一層的模塊 如果已經(jīng)編制一個(gè)模塊,可以在另外的模塊中引用這個(gè)模塊方式:1、 flo
4、p flop_d(d1,clk,clrb,q,qn);2、 flop flop_d(.clock(clk),.q(q),.clear(clrb).qb(qn),.data(d1);第五章 Verilog HDL 語(yǔ)言(二)clrdqclkclrdqclkclrdqclkq0d0clrdqclkd3d2q2q3q1d1clrbclkf4f3f2f1四位寄存器電路結(jié)構(gòu)圖【例】用觸發(fā)器組成帶有清零端的4位寄存器第五章 Verilog HDL 語(yǔ)言(二)include “ flop.v ”modulehardreg(d,clk,clrb,q);inputclk,clrb;input3:0 d;outp
5、ut3:0q;flopf1(d0,clk,clrb,q0,), f2(d1,clk,clrb,q1,), f3(d2,clk,clrb,q2,), f4(d3,clk,clrb,q3,);endmodule第五章 Verilog HDL 語(yǔ)言(二)通過(guò)Verilog HDL語(yǔ)言中的模塊實(shí)例可以引用,可以構(gòu)成任何復(fù)雜結(jié)構(gòu)的電路,這種以結(jié)構(gòu)方式建立的Verilog 模型不僅可以仿真,而且也是可以綜合的,其本質(zhì)是表示電路的具體結(jié)構(gòu)。第五章 Verilog HDL 語(yǔ)言(二)2、 Verilog HDL的行為描述 可以用比較抽象的Verilog 描述方法來(lái)建立模型 【例】用行為描述的方法描述帶有清零端
6、的4位寄存器module hardreg(d,clk,clrb,q);input clk, clrb; input3:0 d;output3:0 q; reg 3:0 q;always (posedge clk or posedge clrb). 第五章 Verilog HDL 語(yǔ)言(二) begin if(clrb) q = 0; else q y) xgy = 1; else xgy = 0; if (xy) xsy = 1; else xsy = 0; end endmodule第五章 Verilog HDL 語(yǔ)言(二) 多路器 module mux_8 ( addr,in1,in2,i
7、n3,in4,in5,in6,in7,in8,mout,ncs);input 2:0 addr;inputwidth-1:0 in1,in2,in3,in4,in5,in6,in7,in8;input ncs;ouput width-1:0 mout;parameter width = 8; always (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs) begin 第五章 Verilog HDL 語(yǔ)言(二) if (!ncs) case (addr) 3b000 mout = in1; 3b001 mo
8、ut = in2; 3b010 mout = in3; 3b011 mout = in4; 3b100 mout = in5; 3b101 mout = in6; 3b110 mout = in7; 3b111 mout = in8; endcase else mout = 0;end endmodule第五章 Verilog HDL 語(yǔ)言(二)三、 復(fù)雜數(shù)字系統(tǒng)的構(gòu)成 數(shù)字邏輯就其本質(zhì)而言,只有組合邏輯和時(shí)序邏輯兩大類(lèi)。 組合邏輯可以用來(lái)完成簡(jiǎn)單的邏輯功能 時(shí)序邏輯則可以用來(lái)產(chǎn)生與運(yùn)算過(guò)程有關(guān)的(時(shí)鐘)多個(gè)控制信號(hào)序列包括存儲(chǔ)運(yùn)算的結(jié)果和取出存儲(chǔ)器中的數(shù)據(jù)在用可綜合的硬件描述語(yǔ)言設(shè)計(jì)的復(fù)雜運(yùn)
9、算邏輯系統(tǒng)中,往往用同步狀態(tài)機(jī)來(lái)產(chǎn)生與時(shí)鐘節(jié)拍密切相關(guān)的多個(gè)控制信號(hào)序列,用它來(lái)控制多路器或數(shù)據(jù)通道的開(kāi)啟/關(guān)閉,來(lái)使有限的組合邏輯運(yùn)算器資源得到充分的運(yùn)行,并寄存有意義的運(yùn)算結(jié)果,或把它們傳送到指定的地方。第五章 Verilog HDL 語(yǔ)言(二)組合邏輯:輸出只是輸入邏輯電平的函數(shù)(有延時(shí)),與電路的原始狀態(tài)無(wú)關(guān)。時(shí)序邏輯:輸出不只是輸入的邏輯電平的函數(shù),還與電路所處的狀態(tài)有關(guān)。 同步時(shí)序邏輯是在同一時(shí)鐘跳變節(jié)拍的前提下,如輸入條件滿(mǎn)足,則進(jìn)入下一狀態(tài),否則仍留在原來(lái)的狀態(tài)的狀態(tài)機(jī)。數(shù)字邏輯電路的構(gòu)成第五章 Verilog HDL 語(yǔ)言(二)組合邏輯:由與、或、非門(mén)組成的網(wǎng)絡(luò)。常用的有:多
10、路器、數(shù)據(jù)通路開(kāi)關(guān)、加法器、乘法器等,沒(méi)有記憶功能。時(shí)序邏輯: 由多個(gè)觸發(fā)器和多個(gè)組合邏輯塊組成的網(wǎng)絡(luò)。常用的有:計(jì)數(shù)器、復(fù)雜的數(shù)據(jù)流動(dòng)控制邏輯、運(yùn)算控制邏輯、指令分析和操作控制邏輯。同步時(shí)序邏輯的設(shè)計(jì)是設(shè)計(jì)復(fù)雜的數(shù)字邏輯系統(tǒng)的核心。第五章 Verilog HDL 語(yǔ)言(二)【例】一個(gè)八位數(shù)據(jù)通路控制器in7ControlSwitchout7in0out0.define ON 1 b 1define OFF 1 b 0 wire ControlSwitch; wire 7:0 out, in; assign out = (ControlSwith= ON) ? in : 8 h00第五章 Ve
11、rilog HDL 語(yǔ)言(二)in 7:0開(kāi)關(guān)out7:0tt31 0215 3262 88 0215 32 00 00第五章 Verilog HDL 語(yǔ)言(二)in7ControlSwitchout7CLOCKDQ7CLOCKin0ControlSwitchout0DQ0out7out0帶寄存器的八位數(shù)據(jù)通路控制器第五章 Verilog HDL 語(yǔ)言(二)define ON 1 b 1define OFF 1 b 0 wire ControlSwitch; wire clock wire 7:0 out, in; always (posedge clock) begin if (Contro
12、lSwith= ON) out = in ; else out 7ns總延遲= Max2,3+4+1=8時(shí)鐘周期必須 4ns總處理數(shù)據(jù)的吞吐量增加#1#1clock組合邏輯和布線(xiàn)的延遲在組合邏輯中的疊加第五章 Verilog HDL 語(yǔ)言(二)全局時(shí)鐘網(wǎng)絡(luò)觸發(fā)器緩沖器 觸發(fā)器1觸發(fā)器n圖1 全局時(shí)鐘網(wǎng)示意圖 圖2 平衡樹(shù)結(jié)構(gòu)示意圖全局時(shí)鐘網(wǎng)和平衡樹(shù)結(jié)構(gòu)第五章 Verilog HDL 語(yǔ)言(二)四、 同步狀態(tài)機(jī)的原理、結(jié)構(gòu)和設(shè)計(jì) 1、為什么要設(shè)計(jì)有限狀態(tài)機(jī)?如果能?chē)?yán)格以時(shí)鐘跳變沿為前提,按排好時(shí)序來(lái)操作邏輯系統(tǒng)中每一個(gè)開(kāi)關(guān)Si,則系統(tǒng)中數(shù)據(jù)的流動(dòng)和處理會(huì)按同一時(shí)鐘節(jié)拍有序地進(jìn)行,可以控制冒險(xiǎn)和競(jìng)
13、爭(zhēng)現(xiàn)象對(duì)邏輯運(yùn)算的破壞,時(shí)延問(wèn)題就能有效地加以解決。 利用同步有限狀態(tài)機(jī)就能產(chǎn)生復(fù)雜的以時(shí)鐘跳變沿為前提的同步時(shí)序邏輯,并提供操作邏輯系統(tǒng)的開(kāi)關(guān)陣列所需要的復(fù)雜控制時(shí)序(具有信號(hào)互鎖和先后次序等要求的)。第五章 Verilog HDL 語(yǔ)言(二)如果我們能設(shè)計(jì)這樣一個(gè)電路:1)能記住自己目前所處的狀態(tài) ; 2)狀態(tài)的變化只可能在同一個(gè)時(shí)鐘的跳變沿時(shí)刻發(fā)生,而不可能發(fā)生在任意時(shí)刻;3)在時(shí)鐘跳變沿時(shí)刻,如輸入條件滿(mǎn)足,則進(jìn)入下一狀態(tài),并記住自己目前所處的狀態(tài),否則仍保留原來(lái)的狀態(tài);4)在進(jìn)入不同的狀態(tài)時(shí)刻,對(duì)系統(tǒng)的開(kāi)關(guān)陣列做開(kāi)啟或關(guān)閉的操作。第五章 Verilog HDL 語(yǔ)言(二)clock
14、10nsS2開(kāi)關(guān)S1tttSnS3tttS4第五章 Verilog HDL 語(yǔ)言(二)有了以上電路,我們就不難設(shè)計(jì)出復(fù)雜的控制序列來(lái)操縱數(shù)字系統(tǒng)的控制開(kāi)關(guān)陣列。能達(dá)到以上要求的電路就是時(shí)序和組合電路互相結(jié)合的產(chǎn)物:同步有限狀態(tài)機(jī)和由狀態(tài)和時(shí)鐘共同控制的開(kāi)關(guān)邏輯陣列。 我們只要掌握有限狀態(tài)機(jī)的基本設(shè)計(jì)方法,加上對(duì)基本電路的掌握,再加上對(duì)數(shù)據(jù)處理的過(guò)程的細(xì)致了解,我們就可以避免由于邏輯器件和布線(xiàn)延遲產(chǎn)生的冒險(xiǎn)競(jìng)爭(zhēng)現(xiàn)象所造成的破壞,設(shè)計(jì)出符合要求的復(fù)雜數(shù)字邏輯系統(tǒng)。第五章 Verilog HDL 語(yǔ)言(二)同步有限狀態(tài)機(jī)ena_2ena_3ena_nena_1clock組合邏輯 1寄存器組組合邏輯
15、2寄存器組組合邏輯 3寄存器組組合邏輯 N寄存器組input_1input_2input_n數(shù)字系統(tǒng)的構(gòu)成示意圖第五章 Verilog HDL 語(yǔ)言(二)2、同步有限狀態(tài)機(jī)的設(shè)計(jì) 什么是有限狀態(tài)機(jī)?有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的硬件時(shí)序電路;其狀態(tài)(即由寄存器組的1和0的組合狀態(tài)所構(gòu)成的有限個(gè)狀態(tài))只能在同一時(shí)鐘跳變沿的情況下才能從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀態(tài);究竟轉(zhuǎn)向哪一狀態(tài)不但取決于各個(gè)輸入值,還取決于當(dāng)前狀態(tài)。狀態(tài)機(jī)可用于產(chǎn)生在時(shí)鐘跳變沿時(shí)刻開(kāi)關(guān)的復(fù)雜的控制邏輯,是數(shù)字邏輯的控制核心第五章 Verilog HDL 語(yǔ)言(二)Mealy 狀態(tài)機(jī)下一個(gè)狀態(tài) = F(當(dāng)前狀態(tài),輸入信號(hào));
16、輸出信號(hào) = G(當(dāng)前狀態(tài),輸入信號(hào));下一狀態(tài)的邏輯 F輸出邏輯 G狀態(tài)寄存器時(shí)鐘信號(hào)clk clk 輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)第五章 Verilog HDL 語(yǔ)言(二)Moor 狀態(tài)機(jī)下一個(gè)狀態(tài) = F(當(dāng)前狀態(tài),輸入信號(hào))輸出信號(hào) = G(當(dāng)前狀態(tài));下一狀態(tài)的邏輯 F輸出邏輯 G狀態(tài)寄存器時(shí)鐘信號(hào)clk clk 輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)圖2. 時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu) (Moor狀態(tài)機(jī))第五章 Verilog HDL 語(yǔ)言(二)簡(jiǎn)單的狀態(tài)機(jī)設(shè)計(jì)舉例有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開(kāi)關(guān)Idle Start Stop Clear A/K1=0 !A A/K2=1 !R
17、eset /K2=0 K1=0!Reset /K2=0 K1=0 (!Reset |!A )/ K2=0 K1=1!Reset /K2=0 K1=0第五章 Verilog HDL 語(yǔ)言(二)定義模塊名和輸入輸出端口;定義輸入、輸出變量或寄存器;定義時(shí)鐘和復(fù)位信號(hào);定義狀態(tài)變量和狀態(tài)寄存器;用時(shí)鐘沿觸發(fā)的always塊表示狀態(tài)轉(zhuǎn)移過(guò)程;在復(fù)位信號(hào)有效時(shí)給狀態(tài)寄存器賦初始值;描述狀態(tài)的轉(zhuǎn)換過(guò)程:符合條件,從一個(gè)狀態(tài)到另外一個(gè)狀態(tài),否則留在原狀態(tài);驗(yàn)證狀態(tài)轉(zhuǎn)移的正確性,必須完整和全面。有限狀態(tài)機(jī)的Verilog描述第五章 Verilog HDL 語(yǔ)言(二)module fsm (Clock, Res
18、et, A, K2, K1);input Clock, Reset, A; /定義時(shí)鐘、復(fù)位和輸入信號(hào)output K2, K1; /定義輸出控制信號(hào)的端口reg K2, K1; /定義輸出控制信號(hào)的寄存器reg 1:0 state ; /定義狀態(tài)寄存器parameter Idle = 2b00, Start = 2b01, Stop = 2b10, Clear = 2b11;/定義狀態(tài)變量參數(shù)值 always (posedge Clock) if (!Reset) begin /定義復(fù)位后的初始狀態(tài)和輸出值 state = Idle; K2=0; K1=0; end【例1】第五章 Veril
19、og HDL 語(yǔ)言(二)else case (state) Idle: begin if (A) begin state = Start; K1=0; end else state = Idle; end Start: begin if (!A) state = Stop; else state = Start; endStop: begin /符合條件進(jìn)入新?tīng)顟B(tài),否則留在原狀態(tài) if (A) begin state = Clear; K2= 1; end else state = Stop; end Clear: begin if (!A) begin state = Idle; K2=0;
20、 K1=1; end else state = Clear; end endcaseendmodule 第五章 Verilog HDL 語(yǔ)言(二)我們還可以用另一個(gè) Verilog HDL模型來(lái)表示同一個(gè)有限狀態(tài),【例2】 用可綜合的Verilog模塊設(shè)計(jì)用獨(dú)熱碼表示狀態(tài)的狀態(tài)機(jī)module fsm (Clock, Reset, A, K2, K1);input Clock, Reset, A;output K2, K1;reg K2, K1;reg 3:0 state ;parameter Idle = 4b1000, Start = 4b0100, Stop = 4b0010, Clear
21、 = 4b0001;第五章 Verilog HDL 語(yǔ)言(二)第五章 Verilog HDL 語(yǔ)言(二)always (posedge clock) if (!Reset) begin state = Idle; K2=0; K1=0; end else case (state) Idle: if (A) begin state = Start; K1=0; end else state = Idle第五章 Verilog HDL 語(yǔ)言(二)Start: if (!A) state = Stop; else state = Start; Stop: if (A) begin state = C
22、lear; K2= 1; end else state = Stop; Clear: if (!A) begin state =Idle; K2=0; K1=1; end else state = Clear;第五章 Verilog HDL 語(yǔ)言(二)default: state = Idle; endcaseendmodule 例2與例1的主要不同點(diǎn)是狀態(tài)編碼,例2采用了獨(dú)熱編碼,而例1則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。 第五章 Verilog HDL 語(yǔ)言(二)在比較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)過(guò)程中,我們往往把狀態(tài)的變化與輸出開(kāi)關(guān)的控制分成兩部分來(lái)考慮。就象前面講過(guò)的Mealy
23、狀態(tài)機(jī)輸出部分的組合邏輯。為了調(diào)試方便,還常常把每一個(gè)輸出開(kāi)關(guān)寫(xiě)成一個(gè)個(gè)獨(dú)立的always組合塊。在調(diào)試多輸出狀態(tài)機(jī)時(shí),這樣做比較容易發(fā)現(xiàn)問(wèn)題和改正模塊編寫(xiě)中出現(xiàn)的問(wèn)題。建議大家在設(shè)計(jì)復(fù)雜的多輸出狀態(tài)機(jī)時(shí)采用下面的風(fēng)格: 第五章 Verilog HDL 語(yǔ)言(二)module fsm (Clock, Reset, A, K2, K1);input Clock, Reset, A;output K2, K1;reg K2, K1;reg 1:0 state, nextstate ;parameter Idle = 2b00, Start = 2b01, Stop = 2b10, Clear =
24、2b11;【例3】第五章 Verilog HDL 語(yǔ)言(二)/- 每一個(gè)時(shí)鐘沿產(chǎn)生一次可能的狀態(tài)變化- always (posedge Clock) begin if (!Reset) state = Idle; else state = nextstate; end/-第五章 Verilog HDL 語(yǔ)言(二)/- 產(chǎn)生下一狀態(tài)的組合邏輯 - always (state or A) case (state) Idle: if (A) nextstate = Start; else nextstate = Idle; Start: if (!A) nextstate = Stop; else
25、nextstate = Start; Stop: if (A) nextstate = Clear; else nextstate = Stop; Clear: if (!A) nextstate = Idle; else nextstate = Clear; default: nextstate =2bxx; endcase第五章 Verilog HDL 語(yǔ)言(二)/- 產(chǎn)生輸出K1的組合邏輯 -always (state or Reset or A) if (!Reset) K1=0; else if (state = Clear & !A) /從Clear轉(zhuǎn)向 Idle K1=1; el
26、se K1= 0; 第五章 Verilog HDL 語(yǔ)言(二)/- 產(chǎn)生輸出K2的組合邏輯 -always (state or Reset or A ) if (!Reset) K2 = 0; else if (state = Stop & A) / 從Stop轉(zhuǎn)向 Clear K2 = 1; else K2 = 0;/-endmodule第五章 Verilog HDL 語(yǔ)言(二)用輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)方法四采用了另一種方法:直接把狀態(tài)碼定義為輸出。也就是把狀態(tài)碼的指定與狀態(tài)機(jī)控制的輸出聯(lián)系起來(lái),把狀態(tài)的變化直接用作輸出,這樣做可以提高輸出信號(hào)的開(kāi)關(guān)速度并節(jié)省電路器件。這種設(shè)計(jì)方法常用
27、在高速狀態(tài)機(jī)中。建議大家在設(shè)計(jì)高速狀態(tài)機(jī)時(shí)采用方法四的風(fēng)格。例中state3 和state0分別表示前面兩個(gè)例子中的輸出K2和K1。第五章 Verilog HDL 語(yǔ)言(二)module fsm (Clock, Reset, A, K2, K1, state);input Clock, Reset, A;output K2, K1;output 4:0 state;reg 4:0 state ;assign K2= state4; / 把狀態(tài)變量的最高位用作輸出K2assign K1= state0; / 把狀態(tài)變量的最低位用作輸出K1【例4】第五章 Verilog HDL 語(yǔ)言(二)para
28、meter /-output coded state assignment - /- K2_i_j_n_K1 Idle = 5b0_0_0_0_0, Start = 5b0_0_0_1_0, Stop = 5b0_0_1_0_0, StopToClear = 5b1_1_0_0_0,Clear = 5b0_1_0_1_0,ClearToIdle = 5b0_0_1_1_1;第五章 Verilog HDL 語(yǔ)言(二)always (posedge Clock) if (!Reset) begin state = Idle; end else case (state) Idle : if (A)
29、state = Start; else state = Idle; Start: if (!A) state = Stop; else state = Start;第五章 Verilog HDL 語(yǔ)言(二)Stop: if (A) state = StopToClear; else state = Stop;StopToClear: state = Clear; Clear: if (!A) state = ClearToIdle; else state = Clear;ClearToIdle: state = Idle;default: state = Idle;endcaseendmodu
30、le第五章 Verilog HDL 語(yǔ)言(二)不同風(fēng)格的描述適合不同規(guī)模的狀態(tài)機(jī)和不同的綜合工具,有的風(fēng)格查錯(cuò)和修改較容易,但寫(xiě)簡(jiǎn)單的狀態(tài)機(jī)時(shí)比較麻煩。Synopsys公司的綜合器建議使用這種風(fēng)格來(lái)描述狀態(tài)機(jī)。 上面四個(gè)例子是同一個(gè)狀態(tài)機(jī)的四種不同的Verilog HDL模型,它們都是可綜合的,在設(shè)計(jì)復(fù)雜程度不同的狀態(tài)機(jī)時(shí)有它們各自的優(yōu)勢(shì)。如用不同的綜合器對(duì)這四個(gè)例子進(jìn)行綜合,綜合出的邏輯電路可能會(huì)有些不同,但邏輯功能是相同的。第五章 Verilog HDL 語(yǔ)言(二)有限狀態(tài)機(jī)設(shè)計(jì)的一般步驟:1、邏輯抽象,得出狀態(tài)轉(zhuǎn)換圖:就是把給出的一個(gè)實(shí)際邏輯關(guān)系表示為時(shí)序邏輯函數(shù)??梢杂脿顟B(tài)轉(zhuǎn)換表來(lái)描述
31、,也可以用狀態(tài)轉(zhuǎn)換圖來(lái)描述。這需要: 分析給定的邏輯問(wèn)題,確定輸入變量,輸出變量以及電路狀態(tài)數(shù)。通常是取原因(或條件)作為輸入變量,取結(jié)果作為輸出變量;定義輸入、輸出邏輯狀態(tài)的含義,并將電路狀態(tài)順序編號(hào);按照要求列出電路的狀態(tài)轉(zhuǎn)換表或畫(huà)出狀態(tài)轉(zhuǎn)換圖這樣就把給定的邏輯問(wèn)題抽象到一個(gè)時(shí)序邏輯函數(shù)了第五章 Verilog HDL 語(yǔ)言(二)2、狀態(tài)化簡(jiǎn): 如果在狀態(tài)轉(zhuǎn)換圖中出現(xiàn)了這樣兩個(gè)狀態(tài):它們?cè)谙嗤妮斎胂罗D(zhuǎn)換到同一狀態(tài)去,并得到相同的輸出,則稱(chēng)它們?yōu)榈葍r(jià)狀態(tài)。顯然等價(jià)狀態(tài)是重復(fù)的,可以合并為一個(gè)。電路的狀態(tài)數(shù)越少,存儲(chǔ)電路也就越簡(jiǎn)單。狀態(tài)化簡(jiǎn)的目的就在于將等價(jià)狀態(tài)盡可能地合并,以得到最簡(jiǎn)的狀態(tài)
32、轉(zhuǎn)換圖。3、狀態(tài)分配: 狀態(tài)分配有稱(chēng)狀態(tài)編碼。通常有很多編碼方法,編碼方案選擇得當(dāng),設(shè)計(jì)的電路可以簡(jiǎn)單;反之,選得不好,則設(shè)計(jì)的電路就會(huì)復(fù)雜許多。在實(shí)際設(shè)計(jì)時(shí),須綜合考慮電路復(fù)雜度與電路性能這兩個(gè)因素。第五章 Verilog HDL 語(yǔ)言(二)在觸發(fā)器資源豐富的FPGA、ASIC設(shè)計(jì)中,采用獨(dú)熱碼(one-hot-coding)既可以使電路性能得到保證又可充分利用其觸發(fā)器數(shù)量多的優(yōu)勢(shì),也可以采取輸出編碼的狀態(tài)指定來(lái)簡(jiǎn)化電路結(jié)構(gòu),并提高狀態(tài)機(jī)的運(yùn)行速度4、選定觸發(fā)器的類(lèi)型并求出狀態(tài)方程、驅(qū)動(dòng)方程和輸出方程; 5、按照方程得出邏輯圖用Verilog HDL來(lái)描述有限狀態(tài)機(jī),可以充分發(fā)揮硬件描述語(yǔ)言
33、的抽象建模能力,使用always塊語(yǔ)句和case(if)等條件語(yǔ)句及賦值語(yǔ)句即可方便地實(shí)現(xiàn)。具體的邏輯化簡(jiǎn)及邏輯電路到觸發(fā)器映射均可由計(jì)算機(jī)自動(dòng)完成,上述設(shè)計(jì)步驟中的第2步及4、5步不再需要很多的人為干預(yù),使電路設(shè)計(jì)工作得到簡(jiǎn)化,效率也有很大的提高。第五章 Verilog HDL 語(yǔ)言(二)五、 設(shè)計(jì)可綜合的狀態(tài)機(jī)的指導(dǎo)原則 1、用verilog HDL語(yǔ)言設(shè)計(jì)可綜合的狀態(tài)機(jī)的指導(dǎo)原則在設(shè)計(jì)采用FPGA實(shí)現(xiàn)的狀態(tài)機(jī)時(shí),建議采用獨(dú)熱碼狀態(tài)機(jī);建議采用case、casex或casez語(yǔ)句來(lái)建立狀態(tài)機(jī)模型,在case 的最后一定要寫(xiě)default,并將狀態(tài)變量設(shè)置為bx; 如果將默認(rèn)狀態(tài)設(shè)計(jì)為某一確
34、定的狀態(tài)行不行? 要注意一個(gè)問(wèn)題:盡管綜合器產(chǎn)生的邏輯和設(shè)置default:state=bx 時(shí)相同,但是狀態(tài)機(jī)的模型綜合前和綜合后的仿真結(jié)果會(huì)不一致。因?yàn)閱?dòng)仿真器時(shí),狀態(tài)機(jī)所有的輸入都不確定,因此立即進(jìn)入default狀態(tài),這樣的設(shè)置便會(huì)將狀態(tài)變量設(shè)為state1,但是實(shí)際硬件電路的狀態(tài)機(jī)在通電后進(jìn)入的狀態(tài)是不確定的,很可能不是state1的狀態(tài),因此還是設(shè)置default:state=bx 與實(shí)際情況相一致。但在有多余狀態(tài)情況下,還是可以通過(guò)綜合指令將默認(rèn)狀態(tài)設(shè)置為某一確定的有效狀態(tài),因?yàn)檫@樣能使?fàn)顟B(tài)機(jī)在偶然進(jìn)入多余狀態(tài)后,能在下一個(gè)時(shí)鐘跳變時(shí)返回正常工作狀態(tài),否則會(huì)引起死鎖。第五章 V
35、erilog HDL 語(yǔ)言(二) 狀態(tài)機(jī)應(yīng)該有一個(gè)異步或同步復(fù)位端,以便在通電時(shí)將硬件電路復(fù)位到有效狀態(tài); 在verilog hdl中,狀態(tài)必須明確賦值,通常使用參數(shù)或宏定義語(yǔ)句加上賦值語(yǔ)句來(lái)實(shí)現(xiàn)Parameter state1 = 2h1,satate2 = 2h2;Current_state = state2;第五章 Verilog HDL 語(yǔ)言(二)2、綜合的一般原則綜合之前一定要進(jìn)行仿真;每一次布局布線(xiàn)之后都要進(jìn)行仿真,在器件編程或流片之前要做最后的仿真;用verilog HDL 描述的異步狀態(tài)機(jī)是不能綜合的;如果要為電平敏感的鎖存器建模,使用連續(xù)賦值語(yǔ)句是最簡(jiǎn)單的方法第五章 Veri
36、log HDL 語(yǔ)言(二)3、語(yǔ)句指導(dǎo)原則 always:每個(gè)always 塊只能有一個(gè)事件控制(event-expression),而且要緊跟在always 關(guān)鍵字的后面;always 塊可以表示時(shí)序邏輯或者組合邏輯,也可以用always 塊既表示電平敏感的透明鎖存器又同時(shí)表示組合邏輯,但是不推薦使用這種描述方法,因?yàn)檫@容易產(chǎn)生錯(cuò)誤和多余的電平敏感的透明鎖存器;帶有posedge或negedge關(guān)鍵字的事件表達(dá)式表示沿觸發(fā)的時(shí)序邏輯,沒(méi)有posedge或negedge關(guān)鍵字的表示組合邏輯或電平敏感的鎖存器,或者兩種都表示;每個(gè)表示時(shí)序的always塊中只能由一個(gè)時(shí)鐘跳變沿觸發(fā),置位或復(fù)位最好
37、也由該時(shí)鐘跳變沿出發(fā);第五章 Verilog HDL 語(yǔ)言(二)每個(gè)always 塊賦值的信號(hào)都必須定義成reg型或整型;always 塊中應(yīng)該避免組合邏輯反饋回路。每次執(zhí)行always 塊時(shí),在生成組合邏輯的always 塊中賦值的所有信號(hào)必須有明確的值;否則,需要設(shè)計(jì)者在設(shè)計(jì)中加入電平敏感的鎖存器來(lái)保持賦值前的最后一個(gè)值。只有這樣,綜合器才能正常生成電路;如果不這樣做,綜合器就會(huì)發(fā)出警告,提示設(shè)計(jì)中插入了鎖存器。 用always 塊設(shè)計(jì)純組合邏輯電路時(shí),在生成組合邏輯的always 塊中參與賦值的所有信號(hào)都必須有明確的值,即在賦值表達(dá)式右端參與賦值的信號(hào)都必須在always (敏感電平列表
38、)中列出。第五章 Verilog HDL 語(yǔ)言(二)賦值:對(duì)一個(gè)寄存器型(reg integer)變量給定的賦值,只允許在一個(gè)always 塊內(nèi)進(jìn)行,如在另一個(gè)always 塊中也對(duì)其賦值,則是非法的;把某信號(hào)賦值為bx,綜合器就把它解釋成無(wú)關(guān)狀態(tài),因而綜合器為其生成的硬件電路最簡(jiǎn)潔。第五章 Verilog HDL 語(yǔ)言(二)4、狀態(tài)機(jī)的置位與復(fù)位 (1)狀態(tài)機(jī)的異步置位與復(fù)位 異步置位與復(fù)位是與時(shí)鐘無(wú)關(guān)。當(dāng)異步置位與復(fù)位信號(hào)到來(lái)時(shí),它們立即分別置觸發(fā)器的輸出為1或0,不需要等到時(shí)鐘沿到來(lái)時(shí)才置位或復(fù)位。狀態(tài)機(jī)的異步置位與復(fù)位是用always 塊和事件控制實(shí)現(xiàn)的。事件控制語(yǔ)法: 事件控制語(yǔ)法:
39、 ( 沿關(guān)鍵詞 時(shí)鐘信號(hào) or 沿關(guān)鍵詞 復(fù)位信號(hào) or 沿關(guān)鍵詞 置位信號(hào) ) 沿關(guān)鍵詞:posedge ,negedge.信號(hào)可以按任意順序列出。第五章 Verilog HDL 語(yǔ)言(二) 事件控制實(shí)例 異步高電平有效的置位(時(shí)鐘上升沿) (posedge clk or posedge set); 異步低電平有效的置位(時(shí)鐘上升沿) (posedge clk or negedge set); 異步低電平有效的置位和高電平有效的復(fù)位(時(shí)鐘上升沿) (posedge clk or negedge set or posedge reset); 第五章 Verilog HDL 語(yǔ)言(二) 帶有異步
40、高電平有效的置位與復(fù)位的always塊: always (posedge clk or posedge set or posedge reset) begin if (reset) begin / 置輸出為0 end else if(set) begin / 置輸出為1 endelse begin / 與時(shí)鐘同步的邏輯 endend 第五章 Verilog HDL 語(yǔ)言(二) 帶有異步高電平有效的置/復(fù)位的D觸發(fā)器: module dff1 (q,qb,d,clk,set,reset); input d, clk,set,reset; output q,qb; reg q,qb; always
41、 (posedge clk or posedge set or posedge reset) begin if (reset) begin q = 0; qb = 1; end第五章 Verilog HDL 語(yǔ)言(二) else begin if (set) begin q = 1; qb = 0; end else begin q = d; qb = d; end endendmodule第五章 Verilog HDL 語(yǔ)言(二)(2)狀態(tài)機(jī)的同步置位與復(fù)位 同步置位與復(fù)位是指只有在時(shí)鐘的有效跳變沿時(shí)刻置位或復(fù)位,信號(hào)才能使觸發(fā)器置位或復(fù)位。因此不要將set和reset信號(hào)名列入always
42、塊的事件控制表達(dá)式,因?yàn)楫?dāng)它們有變化時(shí)不應(yīng)觸發(fā)always塊的執(zhí)行。 相反,always塊的執(zhí)行應(yīng)只由時(shí)鐘有效跳變沿觸發(fā),是否置位或復(fù)位應(yīng)在always塊中檢查set和reset信號(hào)的電平。所以, set和reset的電平維持時(shí)間必須大于時(shí)鐘的間隔時(shí)間,否則set和reset不能每次都能有效地完成置位或復(fù)位的工作。 事件控制語(yǔ)法: ( 沿關(guān)鍵詞 時(shí)鐘信號(hào) )沿關(guān)鍵詞:posedge ,negedge. 第五章 Verilog HDL 語(yǔ)言(二) 事件控制實(shí)例 同步的具有高電平有效的置位與復(fù)位的always塊: always (posedge clk) begin if (reset) begi
43、n / 置輸出為0 end else if(set) begin / 置輸出為1 endelse begin / 與時(shí)鐘同步的邏輯 endend 第五章 Verilog HDL 語(yǔ)言(二) 同步的具有高電平有效的置位與復(fù)位的D觸發(fā)器: module dff2 (q,qb,d,clk,set,reset); input d, clk,set,reset; output q,qb; reg q,qb; always (posedge clk) begin if (reset) begin q = 0; qb = 1; end第五章 Verilog HDL 語(yǔ)言(二) else begin if (
44、set) begin q = 1; qb = 0; end else begin q = d; qb = d; end endendmodule第五章 Verilog HDL 語(yǔ)言(二)第五章 Verilog HDL 語(yǔ)言(二)六、 阻塞和非阻塞賦值的不同 1、阻塞和非阻塞的不同 阻塞和非阻塞賦值的語(yǔ)言結(jié)構(gòu)是Verilog HDL 語(yǔ)言中最難理解的概念之一。 兩個(gè)要點(diǎn):在描述組合邏輯的always塊中使用阻塞賦值,則綜合成組合邏輯的電路結(jié)構(gòu);在描述時(shí)序邏輯的always塊中使用非阻塞賦值,則綜合成時(shí)序邏輯的電路結(jié)構(gòu) 方程式右手方向的表達(dá)式或變量-RHS 方程式左手方向的表達(dá)式或變量-LHS第五
45、章 Verilog HDL 語(yǔ)言(二)(1)阻塞賦值 阻塞賦值操作的符號(hào) = 。 在操作時(shí),先計(jì)算RHS部分的值,此時(shí)賦值語(yǔ)句不允許任何別的語(yǔ)句的干擾,直到先行的賦值完成,即將RHS的值賦值給LHS后,才允許別的賦值語(yǔ)句的執(zhí)行-阻塞的原由。 所謂阻塞的概念是指在同一個(gè)always塊中,后面的賦值語(yǔ)句是在前一句賦值語(yǔ)句結(jié)束后再開(kāi)始賦值的。 如果在一個(gè)過(guò)程塊中阻塞賦值的RHS變量正好是另一個(gè)過(guò)程塊中阻塞賦值的LHS變量,這兩個(gè)過(guò)程塊又用同一個(gè)時(shí)鐘沿觸發(fā),這時(shí)阻塞賦值操作就會(huì)出現(xiàn)問(wèn)題,即如果阻塞賦值的順序安排不好,就會(huì)出現(xiàn)競(jìng)爭(zhēng)。而若這兩個(gè)阻塞賦值操作用同一個(gè)時(shí)鐘沿觸發(fā),則執(zhí)行的順序是無(wú)法確定的。第五
46、章 Verilog HDL 語(yǔ)言(二)【例1】 采用阻塞賦值的反饋振蕩器module fboscl (y1,y2,clk,rst);input clk,rst;output y1,y2;reg y1,y2; always (posedge clk or posedge rst) if (rst) y1 = 0; else y1 = y2; always (posedge clk or posedge rst) if (rst) y2 = 1; else y2 = y1;endmodule第五章 Verilog HDL 語(yǔ)言(二)(2)非阻塞賦值 非阻塞賦值操作的符號(hào) = 。 在操作時(shí),先計(jì)算R
47、HS部分的值,當(dāng)賦值操作時(shí)刻結(jié)束時(shí)更新LHS,在計(jì)算非阻塞賦值的RHS的表達(dá)式和更新LHS期間,其它的Verilog語(yǔ)句,包括其它的非阻塞賦值語(yǔ)句都能同時(shí)計(jì)算RHS表達(dá)式和更新LHS。非阻塞賦值允許其它的語(yǔ)句同時(shí)進(jìn)行操作。 非阻塞賦值的操作由兩個(gè)部分組成: 在賦值時(shí)刻開(kāi)始時(shí),計(jì)算非阻塞賦值RHS表達(dá)式 在賦值時(shí)刻結(jié)束時(shí),更新非阻塞賦值LHS表達(dá)式非阻塞賦值操作只能用于對(duì)寄存器類(lèi)型變量進(jìn)行賦值,因此只能用在initial塊和always塊等過(guò)程塊中,而非阻塞賦值不允許用于連續(xù)賦值第五章 Verilog HDL 語(yǔ)言(二)【例2】 采用阻塞賦值的反饋振蕩器module fboscl (y1,y2,
48、clk,rst);input clk,rst;output y1,y2;reg y1,y2; always (posedge clk or posedge rst) if (rst) y1 = 0; else y1 = y2; always (posedge clk or posedge rst) if (rst) y2 = 1; else y2 = y1;endmodule第五章 Verilog HDL 語(yǔ)言(二)2、Verilog HDL編程要點(diǎn) 時(shí)序電路建模時(shí),用非阻塞賦值;鎖存器電路建模時(shí),用非阻塞賦值;用 always 塊建立組合邏輯模型時(shí),用阻塞賦值;在同一個(gè)always塊中建立時(shí)
49、序和組合邏輯電路時(shí),用非阻塞賦值;在同一個(gè)always塊中不要既用非阻塞賦值又用阻塞賦值;不要在一個(gè)以上的always塊中為同一個(gè)變量賦值;用$strobe系統(tǒng)任務(wù)來(lái)顯示用非阻塞賦值的變量值;在賦值時(shí)不要使用#0延遲。 第五章 Verilog HDL 語(yǔ)言(二)3、自觸發(fā)的always塊 【例1】 使用阻塞賦值的非觸發(fā)振蕩器 module osc1(clk); output clk; reg clk; initial #10 clk = 0; always (clk) # 10 clk = clk;endmodule在阻塞賦值中,計(jì)算RHS表達(dá)式并更新LHS的值,不允許其他語(yǔ)句的干擾,阻塞賦值必須在(clk) 邊沿觸發(fā)到來(lái)之前完成。當(dāng)觸發(fā)事件到來(lái)時(shí),阻塞賦值已經(jīng)完成了,因此沒(méi)有來(lái)自always塊內(nèi)部的觸發(fā)事件來(lái)觸發(fā)(clk) ,不能自振蕩。第五章 Verilog HDL 語(yǔ)言(二) 【例2】 使用非阻塞賦值的自觸發(fā)振蕩器 module osc1(clk); ou
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房屋抵押權(quán)設(shè)立合同
- 教育信息化解決方案項(xiàng)目投資合同
- 物流配送損害免責(zé)聲明
- 教育培訓(xùn)服務(wù)責(zé)任豁免協(xié)議
- 文化產(chǎn)業(yè)投資開(kāi)發(fā)協(xié)議書(shū)
- 攝影工作室拍攝作品著作權(quán)歸屬聲明
- 農(nóng)業(yè)現(xiàn)代化高效節(jié)水灌溉技術(shù)推廣方案
- 企業(yè)產(chǎn)品質(zhì)量危機(jī)處理預(yù)案
- 高考文言文雙文本專(zhuān)練:《史記》《論語(yǔ)》
- 近期項(xiàng)目成果回顧與反思
- 《采購(gòu)管理》教學(xué)課件
- 數(shù)字信號(hào)處理(課件)
- 社會(huì)主義核心價(jià)值觀-團(tuán)課課件
- 城市社會(huì)學(xué)(2015)課件
- 年產(chǎn)2萬(wàn)噸馬來(lái)酸二乙酯技改建設(shè)項(xiàng)目環(huán)評(píng)報(bào)告書(shū)
- 中國(guó)古代文論教程完整版課件
- 中班美工區(qū)角活動(dòng)教案10篇
- SJG 103-2021 無(wú)障礙設(shè)計(jì)標(biāo)準(zhǔn)-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點(diǎn)、關(guān)鍵、和難點(diǎn)工程的施工方案(技術(shù)標(biāo))
- 合肥市城市大腦·數(shù)字底座白皮書(shū)2020
評(píng)論
0/150
提交評(píng)論