




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章VerilogHDL數字邏輯電路設計方法2/26/20251MicroelectronicsSchoolXidianUniversity4.1VerilogHDL語言設計思想和可綜合特性2/26/20252MicroelectronicsSchoolXidianUniversity例4.1-1:用VerilogHDL設計模256(8bits)計數器(a)可綜合程序描述方式modulecounter(count,clk,reset);output[7:0]count;inputclk,reset;reg[7:0]count;always@(posedgeclk)if(!reset)count<=0;elseif(count==8'b11111111)count<=0;elsecount<=count+1;endmodule(b)常見的錯誤描述方式modulecounter(count,clk,reset);output[7:0]count;inputreset,clk;reg[7:0]count;integeri;always@(posedgeclk,reset)beginif(!reset)count<=0;elsefor(i=0;i<=255;i=i+1)count<=count+1;endendmodule同時VerilogHDL的電路描述方式具有多樣性,這也決定了對于電路設計的多樣性。2/26/20253MicroelectronicsSchoolXidianUniversity例4.1-2:用VerilogHDL設計數字多路選擇器(a)采用真值表形式的代碼:moduleMUX(out,data,sel);outputout;input[3:0]data;input[1:0]sel;regout;always@(dataorsel)case(sel) 2'b00:out<=data[0];2'b01:out<=data[1];2'b10:out<=data[2];2'b11:out<=data[3];endcaseendmodule(b)采用邏輯表達式形式的代碼:moduleMUX(out,data,sel);outputout;input[3:0]data;input[1:0]sel;wirew1,w2,w3,w4;assignw1=(~sel[1])&(~sel[0])&data[0];assignw2=(~sel[1])&sel[0]&data[1];assignw3=sel[1]&(~sel[0])&data[2];assignw4=sel[1]&sel[0]&data[3];assignout=w1|w2|w3|w4;endmodule2/26/20254MicroelectronicsSchoolXidianUniversity(c)采用結構性描述的代碼:moduleMUX(out,data,sel);outputout;input[3:0]data;input[1:0]sel;wirew1,w2,w3,w4;not U1(w1,sel[1]); U2(w2,sel[0]);and U3(w3,w1,w2,data[0]); U4(w4,w1,sel[0],data[1]); U5(w5,sel[1],w2,data[2]); U6(w6,sel[1],sel[0],data[3]);or U7(out,w3,w4,w5,w6);endmodule在現階段,作為設計人員熟練掌握VerilogHDL程序設計的多樣性和可綜合性,是至關重要的。作為數字集成電路的基礎,基本數字邏輯電路的設計是進行復雜電路的前提。本章通過對數字電路中基本邏輯電路的VerilogHDL程序設計進行講述,掌握基本邏輯電路的可綜合性設計,為具有特定功能的復雜電路的設計打下基礎。4.2VerilogHDL組合電路設計組合電路的特點是:電路中任意時刻的穩態輸出僅僅取決于該時刻的輸入,而與電路原來的狀態無關。組合電路的設計需要從以下幾個方面考慮:所用的邏輯器件數目最少,器件的種類最少,且器件之間的連線最簡單。這樣的電路稱“最小化”電路;其次,為了滿足速度要求,應使級數盡量少,以減少門電路的延遲;電路的功耗應盡可能的小,工作時穩定可靠。描述組合邏輯電路有四種方式:結構描述、邏輯代數、真值表、抽象描述。2/26/20255MicroelectronicsSchoolXidianUniversity例4.2-1:設計一個3個裁判的表決電路,當兩個或兩個以上裁判同意時,判決器輸出“1”,否則輸出“0”。方法1:真值表方式真值表是對電路功能最直接和簡單的描述方式。根據電路的功能,可以通過真值表直接建立起輸出與輸入之間的邏輯關系。例4.2-1有三個輸入端A、B、C和一個輸出端OUT。2/26/20256MicroelectronicsSchoolXidianUniversityABCOUT000000100100100001111011110111112/26/20257MicroelectronicsSchoolXidianUniversity在VerilogHDL中,可以使用“case”語句對電路進行描述性設計,表4.2-1真值表設計代碼如下:moduledesingn(OUT,A,B,C);outputOUT;inputA,B,C;regOUT;always@(AorBorC)case({A,B,C})3'b000:OUT<=0;3'b001:OUT<=0;3'b010:OUT<=0;3'b100:OUT<=0;3'b011:OUT<=1;3'b101:OUT<=1;3'b110:OUT<=1;3'b111:OUT<=1;endcaseendmodule方法2:邏輯代數方式對于組合電路的另一種表達方法是邏輯代數方法。主要思想是將真值表用卡諾圖表示,然后化簡電路,得出邏輯函數表達式。通過對卡諾圖的化簡,可以得到組合電路邏輯輸出與輸入之間的邏輯函數表達式:
2/26/20258MicroelectronicsSchoolXidianUniversity根據邏輯函數表達式可以很方便寫出采用邏輯代數描述方式的VerilogHDL程序。moduledesingn(OUT,A,B,C);outputOUT;inputA,B,C;assignOUT=(A&B)|(B&C)|(A&C);endmodule2/26/20259MicroelectronicsSchoolXidianUniversity方法3:結構描述方式結構性描述方式是對電路最直接的表示,早期的數字電路設計通常采用的原理圖設計實際上就是一種結構性描述方式。moduledesingn(OUT,A,B,C);outputOUT;inputA,B,C;andU1(w1,A,B);andU2(w2,B,C);andU3(w3,A,C);orU4(OUT,w1,w2,w3);
endmodule方法4:抽象描述方式VerilogHDL還提供了采用抽象描述進行電路設計的方法,可以直接從電路功能出發,編寫代碼。例如判決器設計,將三個輸入的判決相加,當判決成功時相加器之和大于1,即表示投票成功。2/26/202510MicroelectronicsSchoolXidianUniversitymoduledesingn(OUT,A,B,C);outputOUT;inputA,B,C;wire[1:0]sum;regOUT;assignsum=A+B+C;always@(sum)if(sum>1) OUT=1; else OUT=0;endmoduleEDA綜合工具可以將VerilogHDL程序綜合成物理電路形式,通過電路優化,可以得到符合設計要求的最簡化電路。采用Synplify軟件對上面四種方法設計的VerilogHDL程序進行綜合(采用Altera公司StratixII器件),可以得相同的最簡化電路。2/26/202511MicroelectronicsSchoolXidianUniversity4.2.1數字加法器
數字加法器是最為常用的一種數字運算邏輯,被廣泛用于計算機、通信和多媒體數字集成電路中例4.2-2:2輸入1bit信號全加器。如果運算考慮了來自低位的進位那么該運算就為全加運算,實現全加運算的電路稱為全加器。2/26/202512MicroelectronicsSchoolXidianUniversityABC_INSUMC_OUT0000000110010100110110010101011100111111代數邏輯表示為2/26/202513MicroelectronicsSchoolXidianUniversity
對應的電路為圖
SUM=A⊕B⊕C_INVerilogHDL可以用不同的描述方式寫出一位全加器,其綜合電路是相同的,僅僅是描述風格不同。2/26/202514MicroelectronicsSchoolXidianUniversity(1)利用連續賦值語句實現moduleone_bit_fulladder(SUM,C_OUT,A,B,C_IN);input A,B,C_IN;output SUM,C_OUT;assign SUM=(A^B)^C_IN;assignC_OUT=(A&B)|((A^B)&C_IN);//functionofoutputendmodule(2)利用行為描述實現moduleone_bit_fulladder(SUM,C_OUT,A,B,C_IN);output SUM,C_OUT;input A,B,C_IN;assign {C_OUT,SUM}=A+B+C_IN;endmodule采用行為描述可以提高設計的效率,對于一個典型的多位加法器的行為描述設計,僅需改變代碼中輸入和輸出信號的位寬即可,例如一個2輸入8bits加法器,可以采用下面的VerilogHDL程序代碼實現。2/26/202515MicroelectronicsSchoolXidianUniversitymoduleeight_bit_fulladder(SUM,C_OUT,A,B,C_IN);output[7:0] SUM;output C_OUT;input[7:0] A,B;input C_IN;assign{C_OUT,SUM}=A+B+C_IN;endmodule例4.2-3:4位超前進位加法器超前進位加法器是一種高速加法器,每級進位由附加的組合電路產生,高位的運算不需等待低位運算完成,因此可以提高運算速度。根據對于輸入信號位寬為N的全加器,其進位信號是:輸出的加法結果是超前進位標志信號是進位產生函數是2/26/202516MicroelectronicsSchoolXidianUniversity
進位傳輸函數是上述公式中N為加法器位數,在4位加法器中,N=4。由式可以推出各級進位信號表達式,并構成快速進位邏輯電路。2/26/202517MicroelectronicsSchoolXidianUniversity4位超前進位加法器的電路如圖所示2/26/202518MicroelectronicsSchoolXidianUniversity4位超前進位加法器對應的VerilogHDL代碼是:2/26/202519MicroelectronicsSchoolXidianUniversitymodulefour_bits_fast_addder(sum_out,c_out,a,b,c_in);input[3:0] a,b; //theotherofaddnumberinput c_in; //carryinfrombeforeleveloutput[3:0] sum_out; //theaddoftwoinputoutput c_out; //carryouttonextlevelwire[4:0] g,p,c; //wirebetweeneveryc_outandc_inassignc[0]=c_in;assignp=a|b;assigng=a&b;assignc[1]=g[0]|(p[0]&c[0]);assignc[2]=g[1]|(p[1]&(g[0]|(p[0]&c[0])));assignc[3]=g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))));assignc[4]=g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));assignsum_out=p^c[3:0];assignc_out=c[4];endmodule4.2.2數據比較器數據比較器是用來對兩個二進制數的大小進行比較,或檢測是否相等的邏輯電路。數據比較器包含兩個部分:一是比較兩個數的大小;二是檢測兩個數是否一致。例4.2-4:4位數值比較器多位數值比較器的比較過程是由高位到底位逐位進行比較,而且只有在高位相等時,才進行低位比較。4位數值比較器中進行A3A2A1A0和B3B2B1B0的比較時,應首先比較最高位A3和B3。如果A3>B3,那么不管其它幾位數為何值,結果為A>B;若A3<B3,結果為A<B。如果A3=B3,就必須通過比較低一位A2和B2來判斷A和B的大小。如果A2=B2,還必須通過比較更低一位A1和B1來判斷,直到最后一位的比較。如果完全相等,則由前一級結果C確定。2/26/202520MicroelectronicsSchoolXidianUniversity4位數據比較器真值表2/26/202521MicroelectronicsSchoolXidianUniversity輸入輸出A3B3A2B2A1B1A0B0CA>BCA=BCA<BFA>BFA=BFA<BA3>B3xxxxxxxxx100A3<B3xxxxxxxxx001A3=B3A2>B2xxxxxxx100A3=B3A2<B2xxxxxxx001A3=B3A2=B2A1>B1xxxxx100A3=B3A2=B2A1<B1xxxxx001A3=B3A2=B2A1=B1A0>B0xxx100A3=B3A2=B2A1=B1A0<B0xxx001A3=B3A2=B2A1=B1A0=B0CA>BCA=BCA<BCA>BCA=BCA<Bmodulefour_bits_comp1(F,A,B,C);parametercomp_width=4;output[2:0]F;input[2:0]C;input[comp_width-1:0]A;input[comp_width-1:0]B;reg[2:0]F;always@(AorBorC)if(A>B) F=3'b100;elseif(A<B) F=3'b001;else F=C;endmodule4.2.3數據選擇器數據選擇器又稱多路選擇器(Multiplexer,簡稱MUX),它有n位地址輸入、2n位數據輸入,1位數據輸出。每次在輸入地址的控制下,從多路輸入數據中選擇一路輸出,其功能類似于一個單刀多擲開關,如圖所示。2/26/202522MicroelectronicsSchoolXidianUniversity例4.2-5:8選1數據選擇器8選1數據選擇器可以由多個2選1數據選擇器搭成,也可以采用抽象描述方式進行設計。可以采用2選1數據選擇器串行連接,也可以用樹形連接分成三級實現。2/26/202523MicroelectronicsSchoolXidianUniversity(1)多個2選1數據選擇器的結構級描述modulemux8to1_2(d_out,d_in,sel);output d_out;input[7:0] d_in;input[2:0] sel;wire[3:0] w1;wire[1:0] w2;assignw1=sel[0]?{d_in[7],d_in[5],d_in[3],d_in[1]}:{d_in[6],d_in[4],d_in[2],d_in[0]};assignw2=sel[1]?{w1[3],w1[1]}:{w1[2],w1[0]};assignd_out=sel[2]?w2[1]:w2[0];endmodule(2)抽象描述方式對于多路選擇器的設計,可以采用“case”語句直接進行設計,在這種設計方式中,只需考慮選擇信號列表,就可以實現功能更為復雜的數據選擇器。2/26/202524MicroelectronicsSchoolXidianUniversitymodulemux8to1(out,sel,data_in);outputout;input[7:0]data_in;input[3:0]sel;regout;always@(data_inorsel)case(sel)3'b000:out<=data_in[0];3'b001:out<=data_in[1];3'b010:out<=data_in[2];3'b011:out<=data_in[3];3'b100:out<=data_in[4];3'b101:out<=data_in[5];3'b110:out<=data_in[6];3'b111:out<=data_in[7];endcaseendmodule4.2.4數字編碼器用文字、符號或數碼表示特定對象的過程稱為編碼。在數字電路中用二進制代碼表示有關的信號稱為二進制編碼。實現編碼操作的電路叫做編碼器。例4.2-6:3位二進制8-3線編碼器用n位二進制代碼對N=2n個一般信號進行編碼的電路,叫做二進制編碼器。例如n=3,可以對8個一般信號進行編碼。這種編碼器有一個特點:任何時刻只允許輸入一個有效信號,不允許同時出現兩個或兩個以上的有效信號。2/26/202525MicroelectronicsSchoolXidianUniversity右圖是3位二進制8線—3線編碼器框圖3位二進制8線—3線編碼器真值表2/26/202526MicroelectronicsSchoolXidianUniversity輸入輸出I0I1I2I3I4I5I6I7F2F1F01000000000001000000001001000000100001000001100001000100000001001010000001011000000001111modulecode_8to3(F,I);output[2:0]F;input[7:0]I;reg[2:0]F;always@(I)case(I)8'b00000001:F=3'b000;8'b00000010:F=3'b001;8'b00000100:F=3'b010;8'b00001000:F=3'b011;8'b00010000:F=3'b100;8'b00100000:F=3'b101;8'b01000000:F=3'b110;8'b10000000:F=3'b111;default:F=3'bx;endcaseendmodule例4.2-7:8線—3線優先編碼器二進制編碼器電路要求任何時刻只有一個輸入有效,若同時有兩個或更多個輸入信號有效時,將造成輸出混亂狀態,因此在使用過程中有一定局限性。為了克服對于輸入信號的要求,一種方法是采用優先編碼器。優先編碼器允許多個輸入信號同時有效,但它只按其中優先級別最高的有效輸入信號編碼,對級別低的輸入信號不予理睬。2/26/202527MicroelectronicsSchoolXidianUniversity8線—3線優先編碼器功能表2/26/202528MicroelectronicsSchoolXidianUniversity輸入輸出1xxxxXxxx111110xxxxXxx0000100xxxxXx01001100xxxxX011010100xxxx0111011100xxx01111100100xx011111101100x0111111110100011111111111001111111111101功能表說明:=1時,電路處于禁制工作狀態,此時無論8個輸入為何種狀態,三個輸出端均為高電平,和也為高電平,編碼器不工作。當=0時,電路處于正常工作狀態,允許~當中同時幾個輸入端為低電平,即同時有幾路編碼輸入信號有效。在8個輸入中,的優先權最高,的優先權最低。表中出現的3種輸出=111的情況可以用和的不同狀態來區別,即如果=111且=10,則表示電路處于工作狀態而且有編碼信號輸入;如果=111且=01,則表示電路處于工作狀態但沒有輸入編碼信號。由于沒有輸入編碼信號時=0,因此也可以稱為“無編碼輸入”信號。2/26/202529MicroelectronicsSchoolXidianUniversitymodulemux8to3_p(data_out,Ys,Yex,sel,data_in);output[2:0]data_out;outputYs,Yex;input[7:0]data_in;inputsel;reg[2:0]data_out;regYs,Yex;always@(data_inorsel)if(sel){data_out,Ys,Yex}={3'b111,1'b1,1'b1};elsebegincasex(data_in)8'b0???????:{data_out,Ys,Yex}={3'b000,1'b1,1'b0};8'b10??????:{data_out,Ys,Yex}={3'b001,1'b1,1'b0};8'b110?????:{data_out,Ys,Yex}={3'b010,1'b1,1'b0};8'b1110????:{data_out,Ys,Yex}={3'b011,1'b1,1'b0};8'b11110???:{data_out,Ys,Yex}={3'b100,1'b1,1'b0};8'b111110??:{data_out,Ys,Yex}={3'b101,1'b1,1'b0};8'b1111110?:{data_out,Ys,Yex}={3'b110,1'b1,1'b0};8'b11111110:{data_out,Ys,Yex}={3'b111,1'b1,1'b0};8'b11111111:{data_out,Ys,Yex}={3'b111,1'b0,1'b1};endcaseendendmodule例4.2-8:二進制轉化十進制8421BCD編碼器將十進制數0、1、2、3、4、5、6、7、8、9等十個信號編成二進制代碼的電路叫做二進制轉化十進制編碼器。它的輸入是代表0~9這10個數子的狀態信息,有效信號為1(即某信號為1時,則表示要對它進行編碼),輸出是相應的BCD碼,因此也稱10線—4線編碼器。它和二進制編碼器特點一樣,任何時刻只允許輸入一個有效信號。2/26/202530MicroelectronicsSchoolXidianUniversity8421BCD碼編碼表2/26/202531MicroelectronicsSchoolXidianUniversity十進制數DCBA0(Y0)00001(Y1)00012(Y2)00103(Y3)00114(Y4)01005(Y5)01016(Y6)01107(Y7)01118(Y8)10009(Y9)1001moduleBCD8421(data_out,data_in);output[3:0]data_out;input[8:0]data_in;reg[3:0]data_out;always@(data_in)case(data_in)9'b000000000:data_out=4'b0000;9'b000000001:data_out=4'b0001;9'b000000010:data_out=4'b0010;9'b000000100:data_out=4'b0011;9'b000001000:data_out=4'b0100;9'b000010000:data_out=4'b0101;9'b000100000:data_out=4'b0110;9'b001000000:data_out=4'b0111;9'b010000000:data_out=4'b1000;9'b100000000:data_out=4'b1001;default:data_out=4'b0000;endcaseendmodule例4.2-9:8421BCD十進制余3編碼器和8421BCD編碼一樣,余3碼是也一種BCD編碼,這種編碼的特點是,余3碼作十進制加法運算的時候,若2數之和是10,正好等于二進制數的16,于是便從高位自動產生進位信號,因此可以使用余3碼簡化計算。余3碼是8421BCD碼加3,并將其轉換為等價二進制數就得到了該十進制數的余3碼。余3碼編碼表:2/26/202532MicroelectronicsSchoolXidianUniversity十進制數8421BCD碼余0000000111000101002001001013001101104010001115010110006011010017011110108100010119100111002/26/202533MicroelectronicsSchoolXidianUniversitymodulecode_change(B_out,B_in);output[3:0]B_out;input[3:0]B_in;assignB_out=B_in+2'b11;endmodule4.2.5數字譯碼器譯碼是編碼的逆過程,它將二進制代碼所表示的信息翻譯成相應的狀態信息。實現譯碼功能的電路成為譯碼器。2/26/202534MicroelectronicsSchoolXidianUniversity圖為2線—4線譯碼器的邏輯電路及邏輯符號。圖中A1,A0為地址輸入端,A1為高位。、、、為狀態信號輸出端,非號表示低點平有效。E為使能端(或稱選通控制端),低電平有效。當E=0時,允許譯碼器工作,~中只允許一個為有效電平輸出;當E=1時,禁制譯碼器工作,所有輸出~均為高電平。一般使能端有兩個用途:一是可以引入選通脈沖,以抑制冒險脈沖的發生;二是可以用來擴展輸入變量數(功能擴展)。2線—4線譯碼器功能表從表還可以看出,當E=0時,2線—4線譯碼器的輸出函數分別為:,,,,如果用表示i端的輸出,mi表示輸入地址變量A1,A0的一個最小項,則輸出函數可寫成
(i=0,1,2,3)可見,譯碼器的每一個輸出函數對應輸入變量的一組取值,當使能端有效(E=0)時,它正好是輸入變量最小項的非。因此變量譯碼器也稱最小項發生器。2/26/202535MicroelectronicsSchoolXidianUniversityEA1A21XX111100001110011011010110101111102/26/202536MicroelectronicsSchoolXidianUniversitymoduledecode_2to4(Y,E,A);output[3:0]Y;input[1:0]A;inputE;assignY[0]=~(~E&~A[1]&~A[0]);assignY[1]=~(~E&~A[1]&A[0]);assignY[2]=~(~E&A[1]&~A[0]);assignY[3]=~(~E&A[1]&A[0]);endmodule也可以采用抽象描述方式進行設計,VerilogHDL程序代碼是:moduledecode_2to4(Y,E,A);output[3:0]Y;input[1:0]A;inputE;reg[3:0]Y;always@(EorA)case({E,A})3'b1??:Y=4'b0000;3'b000:Y=4'b0001;3'b001:Y=4'b0010;3'b010:Y=4'b0100;3'b011:Y=4'b1000;default:Y=4'b0000;endcaseendmodule4.2.6奇偶校驗器奇偶校驗器的功能是檢測數據中包含“1”的個數是奇數還是偶數。在計算機和一些數字通信系統中,常用奇偶校驗器來檢查數據傳輸和數碼記錄中是否存在錯誤。奇偶校驗包含兩種方式:奇校驗和偶校驗。奇校驗保證傳輸數據和校驗位中“1”的總數為奇數。如果數據中包含奇數個“1”,則校驗位置“0”,如果數據中包含偶數個“1”,則校驗位置“1”。偶校驗保證傳輸數據和校驗位中“1”的總數為偶數。如果數據中包含奇數個“1”,則校驗位置“1”,如果數據中包含偶數個“1”,則校驗位置“0”。奇偶校驗只能檢測部分傳輸錯誤,它不能確定錯誤發生在哪位或哪幾位,所以不能進行錯誤校正。當數據發生錯誤時只能重新發送數據。2/26/202537MicroelectronicsSchoolXidianUniversity例4.2-10:8bits奇偶校驗器8bits奇偶校驗器的原理圖如圖所示:圖中,校驗器的輸入b0~b7由7bits數據和1bit校驗位組成。FOD為判奇輸出,FEV為判偶輸出。當采用奇校驗時,FOD=1,FEV=0;當采用偶校驗時,FOD=0,FEV=1。2/26/202538MicroelectronicsSchoolXidianUniversity2/26/202539MicroelectronicsSchoolXidianUniversity(a)結構性描述代碼:modulechecker(Fod,Fev,b);outputFod,Fev;input[7:0]b;wirew1,w2,w3,w4,w5,w6;xorU1(w1,b[0],b[1]);xorU2(w2,b[2],b[3]);xorU3(w3,b[4],b[5]);xorU4(w4,b[6],b[7]);xorU5(w5,w1,w2);xorU6(w6,w3,w4);xorU7(Fod,w5,w6);notU8(Fev,Fod);endmodule(b)采用抽象性描述代碼:modulechecker(Fod,Fev,b);outputFod,Fev;input[7:0]b;assignFod=^b;assignFev=~Fod;endmodule4.3時序電路設計
與組合邏輯電路不同,時序邏輯電路的輸出不僅與當前時刻輸入變量的取值有關,而且與電路的原狀態,即與過去的輸入情況有關。時序邏輯電路有兩個特點:(1)時序邏輯電路包括組合邏輯電路和存儲電路兩部分,存儲電路具有記憶功能,通常由觸發器組成;(2)存儲電路的狀態反饋到組合邏輯電路輸入端,與外部輸入信號共同決定組合邏輯電路的輸出。2/26/202540MicroelectronicsSchoolXidianUniversity2/26/202541MicroelectronicsSchoolXidianUniversity同步時序電路設計流程:例4.3-1:用VerilogHDL設計一個“111”的序列檢測器,當輸入三個或三個以上“1”時,電路輸出為1,否則為0。(1)狀態轉移圖方法S0:初始狀態,表示電路還沒有收到一個有效的1。S1:表示電路收到了一個1。S2:表示電路收到了連續兩個1。S3:表示電路收到了連續三個1。2/26/202542MicroelectronicsSchoolXidianUniversity2/26/202543MicroelectronicsSchoolXidianUniversitymodulechecker(z,x,clk);parameters0=2'b00,s1=2'b01,s2=2'b11,s3=2'b10;outputz;inputx,clk;reg[1:0]state,next_state;regz;always@(stateorx)case(state)s0:if(x)beginnext_state<=s1;z=0;endelsebeginnext_state<=s0;z=0;ends1:if(x)beginnext_state<=s2;z=0;endelse
beginnext_state<=s0;z=0;ends2:if(x)beginnext_state<=s3;z=1;endelsebeginnext_state<=s0;z=0;ends3:if(x)beginnext_state<=s3;z=1;endelsebeginnext_state<=s0;z=0;endendcasealways@(posedgeclk) state<=next_state;endmodule(2)基于狀態化簡的結構性描述方法
對狀態轉移圖化簡,僅剩三個狀態,需要兩位二進制表示,即需要兩個D觸發器儲存狀態。設Q1表示高位寄存器的輸出,Q0表示地位寄存器的輸出。將狀態的跳轉以及輸出Z用卡諾圖表的形式示出,如下:2/26/202544MicroelectronicsSchoolXidianUniversity由卡諾圖可以得出電路的輸出方程和狀態方程:2/26/202545MicroelectronicsSchoolXidianUniversityQ1n+1=Q0n
Q0n+1=XZ=Q1nQ0nX//序列檢測器模塊modulechecker(z,x,clk);outputz;inputx,clk;wirew1,w2;DFFU1(.clk(clk),.D(x),.Q(w1));DFFU2(.clk(clk),.D(w1),.Q(w2));assignz=x&w1&w2;endmodule//D觸發器模塊moduleDFF(Q,D,clk);outputQ;inputD,clk;regQ; always@(posedgeclk)Q<=D;endmodule(3)VerilogHDL抽象性描述方法在VerilogHDL中還可以對電路進行抽象的描述。實現序列“111”的檢測,可以使用一個三位的移位寄存器,將輸出X作為移位寄存器的輸出,當寄存器中為111時,輸出Z為1。2/26/202546MicroelectronicsSchoolXidianUniversityVerilogHDL程序代碼是:modulechecker(z,x,clk);outputz;inputx,clk;reg[2:0]q;regz; always@(posedgeclk) q<={q[1:0],x}; always@(posedgeclk) if(q==3'b111) z=1; else z=0;endmodule4.3.1觸發器觸發器是時序電路的最基本電路單元,主要有D觸發器、JK觸發器、T觸發器和RS觸發器等。根據功能要求的不同,觸發器還具有置位、復位、使能、選擇等功能。例4.3-2:最簡D觸發器輸入端的數據D在時鐘clk的上升沿被送入觸發器,使得Q=D。其特征方程可描述為Qn+1=Dn。2/26/202547MicroelectronicsSchoolXidianUniversityclkDQnQn+10X000X111X001X11↑000↑010↑101↑111VerilogHDL程序代碼是:module DFF(q,clk,data_in);outputq;inputclk,data_in;regq;always@(posedgeclk) q<=data_in;endmodule例4.3-3:帶復位端D觸發器在D觸發器的實際使用中,有時需要一個復位端(也稱清零端)。2/26/202548MicroelectronicsSchoolXidianUniversity同步清0的D觸發器moduleDFF_rst(q,clk,rst_n,data_in);outputq;inputclk,rst_n,data_in;regq;always@(posedgeclk)if(!rst_n) q<=0;else q<=data_in;endmodule異步清0的D觸發器moduleDFF_srst(q,clk,rst_n,data_in,);outputq;inputclk,rst_n,data_in;regq;always@(posedgeclkornegedgerst_n)if(!rst_n) q<=0;else q<=data_in;endmodule例4.3-4:復雜功能D觸發器同步清零、置1和異步清零、置1共同在一個觸發器上的復雜D觸發器例子。2/26/202549MicroelectronicsSchoolXidianUniversitymoduleDFF_1(q,qb,clk,rst_n1,set1,rst_n2,set2,data_in,);outputq,qb;inputclk,rst_n1,rst_n2,set1,set2,data_in;regq,qb;always@(posedgeclk)if(!rst_n1) q<=0;else q<=data_in;always@(posedgeclkorrst_n2)if(!rst_n2) q<=0;else q<=data_in;endmodulemoduleDFF_1(q,qb,clk,rst_n1,set1,rst_n2,set2,data_in,);outputq,qb;inputclk,rst_n1,rst_n2,set1,set2,data_in;regq,qb;always@(posedgeclk)if(!rst_n1) q<=0;else q<=data_in;always@(posedgeclkorrst_n2)if(!rst_n2) q<=0;else q<=data_in;endmodule例4.3-5:T觸發器T觸發器的邏輯符號如圖4.3-10所示,其邏輯功能為:當時鐘的有效邊沿到來時,如果T=1,則觸發器翻轉;如果T=0,則觸發器的狀態保持不變。R為復位端,異步復位,低電平有效。2/26/202550MicroelectronicsSchoolXidianUniversityT觸發器VerilogHDL程序代碼是:moduleTFF(data_out,T,clk,rst_n);outputdata_out;inputT,clk,rst_n;regdata_out;always@(posedgeclkornegedgerst_n)if(!rst_n) data_out<=1'b0;elseif(T) data_out<=~data_out;endmodule4.3.2計數器例4.3-6:2進制的計數器2/26/202551MicroelectronicsSchoolXidianUniversitymodulecomp2bit(Q,clk,rst_n);outputQ;inputclk,rst_n;regQ;always@(posedgeclkornegedgerst_n)if(!rst_n)Q<=1'b0;elseQ<=~Q;endmodule例4.3-7:任意模值的計數器任意模值M的計數器,第一步需要確定計數器所需要觸發器個數。N個觸發器對應了2N個狀態。應有2N>M。任意模值計數器選取滿足條件的最小N,N為計數器中觸發器的個數。有兩種方法實現:反饋清零法和反饋置數法。2/26/202552MicroelectronicsSchoolXidianUniversity下面是采用反饋清零法設計的模11計數器的VerilogHDL程序代碼:modulecomp_11(count,clk,rst);output[3:0]count;inputclk,rst;reg[3:0]count;always@(posedgeclk)if(rst) count<=4'b0000;elseif(count==4'b1010)count<=4'b0000;elsecount<=count+1;endmodule4.3.3移位寄存器移位寄存器可以用來實現數據的串并轉換,也可以構成移位行計數器,進行計數、分頻,還可以構成序列碼發生器、序列碼檢測器等,它也是數字系統中應用非常廣泛的時序邏輯部件之一。例4.3-8:環形移位寄存器N位環型寄存器由N個移位寄存器組成,它可以實現環型移位2/26/202553MicroelectronicsSchoolXidianUniversity這個例子中,將每個寄存器的輸出作為下一位寄存器的輸入,并將高位寄存器的輸出作為循環的輸入。2/26/202554MicroelectronicsSchoolXidianUniversitymoduleshiftregist1(D,clk,rst_n);parametershiftregist_width=4;output[shiftregist_width-1:0]D;inputclk,rst_n;reg[shiftregist_width-1:0]D;always@(posedgeclk)if(!rst_n)D<=4'b0000;elseD<={D[shiftregist_width-2:0],D[shiftregist_width-1]};endmodule4.3.4序列信號發生器序列信號是數字電路系統中常用的功能單元,按照序列循環長度M和觸發器數目n的關系一般可分為三種:(1)最大循環長度序列碼,M=2n。(2)最長線形序列碼(m序列碼),M=2n-1。(3)任意循環長度序列碼,M<2n。序列信號發生器是能夠產生一組或多組序列信號的時序電路,它可以由純時序電路構成,也可以由包含時序和組合邏輯的混合電路構成。2/26/202555MicroelectronicsSchoolXidianUniversity例4.3-9:用VerilogHDL設計一個產生100111序列的信號發生器。方法(1):由移位寄存器構成由于移位寄存器輸入和輸出信號之間沒有組合電路,不需要進過組合邏輯的反饋運算,因此這種序列產生電路的工作頻率很高。缺點是移位寄存器長度取決于序列長度,因此占用電路的面積很大。2/26/202556MicroelectronicsSchoolXidianUniversitymodulesignal_maker(out,clk,load,D);parameterM=6;outputout;inputclk,load;input[M-1:0]D;reg[M-1:0]Q;always@(posedgeclk)if(load) Q<=D;else Q<={Q[M-2:0],Q[M-1]};assignout=Q[M-1];endmodule方法(2):由移位寄存器和組合邏輯電路構成反饋移位型序列碼發生器的結構框圖如圖所示,它由移位寄存器和組合邏輯網絡組成,從移位寄存器的某一輸出端可以得到周期性的序列碼。其設計按以下步驟進行:(1)根據給定序列信號的循環周期M,確定移位寄存器位數n,2n-1<M≤2n。(2)確定移位寄存器的M個獨立狀態。2/26/202557MicroelectronicsSchoolXidianUniversity將給定的序列碼按照移位規律每n位一組,劃分為M個狀態。若M個狀態中出現重復現象,則應增加移位寄存器位數。用n+1位再重復上述過程,直到劃分為M個獨立狀態為止。(3)根據M個不同的狀態列出移位寄存器的態序表和反饋函數表,求出反饋函數F的表達式。(4)檢查自啟動性能。與上面的序列信號發生器相比,各個寄存器的輸出需要經過反饋網絡,然后才連接到移位寄存器的輸入端。因此,電路的速度必然下降,但反饋網絡的好處在于它可以節省寄存器。對于“100111”序列的信號發生器。首先,確定所需移位寄存器的個數n。因M=6,故n≥3。然后,確定移位寄存器的六個獨立狀態。2/26/202558MicroelectronicsSchoolXidianUniversity按照規律每三位一組,劃分六個狀態為100、001、011、111、111、110。其中狀態111重復出現,故取n=4,并重新劃分狀態,得到:1001、0011、0111、1111、1110、1100。因此確定n=4。第三,列態序表和反饋激勵函數表,求反饋函數F的表達式。首先列出態序表,然后根據每一狀態所需要的移位輸入即反饋輸入信號,列出反饋激勵函數表,如下表所示。求得反饋激勵函數:2/26/202559MicroelectronicsSchoolXidianUniversityQ0Q1Q2Q3F1001100111011111111011100110012/26/202560MicroelectronicsSchoolXidianUniversity反饋移位型序列信號發生器的VerilogHDL程序代碼是:modulesignal_maker(out,clk,load,D);parameterM=4;outputout;inputclk,load;input[M-1:0]D;reg[M-1:0]Q;wirew1;always@(posedgeclk)if(load)Q<=D;elseQ<={Q[M-2:0],w1};assignw1=(~Q[3])|((~Q[1])&(~Q[0]))|(Q[3]&(~Q[2]));assignout=Q[M-1];endmodule方法(3):由計數器構成計數型序列信號發生器和反饋型序列信號發生器大體相同,它們都是由時序電路和組合電路兩部分構成。不同在于,反饋型序列信號發生器的時序狀態由移位寄存器產生,輸出取寄存器的最高位;而在計數型序列信號發生器中,采用計數器代替移位寄存器產生時序狀態,輸出由組合電路產生。2/26/202561MicroelectronicsSchoolXidianUniversity計數型的好處在于,計數器的狀態設置與輸出序列沒有直接關系,不需要像上面一樣,根據輸出確定狀態。只需要將反饋網絡設計好就可以了。因此計數結構對于輸出序列的更改比較方便,而且只要連接到不同的反饋網絡,它可以同時產生多組序列碼。設計過程分為兩步:第一,根據序列碼的長度M設計模M計數器,狀態可以自定;第二,按計數器的狀態轉移關系和序列碼的要求設計組合輸出網絡。對于“100111”序列的信號發生器。序列信號的M值為6,因為需選用模6的計數器。計數器的狀態選擇從000到101。可以得到輸出的組合邏輯真值表。2/26/202562MicroelectronicsSchoolXidianUniversityQ2Q1Q0OUT000100100100011110011011由真值表可畫出輸出Z的卡諾圖,得到輸出函數:VerilogHDL程序代碼是:2/26/202563MicroelectronicsSchoolXidianUniversitymodulesignal_maker(OUT,clk,reset);parameterM=3;outputOUT;inputclk,reset;reg[M-1:0]counter;always@(posedgeclk)if(!reset) counter<=3'b000;elseif(counter==3’b101)counter=3’b000;elsecounter<=counter+1;assignOUT=counter[2]|((~counter[1])&(~counter[0]))|(counter[1]&counter[0]);endmodule例4.3-10:用VerilogHDL設計偽隨機碼發生器隨機碼是一種變化規律與隨機碼類似的二進制代碼,可以作為數字通信中的一個信號源,通過信道發送到接收機,用于檢測數字通信系統錯碼的概率,即誤碼率。在傳統的數字電路設計中,偽隨機序列信號發生器是用移位存型計數器來實現的,反饋網絡輸入信號從移位寄存器的部分輸出端(QN-1~Q0)中取出,它的輸出端F反饋到移位寄存器的串行輸入端。2/26/202564MicroelectronicsSchoolXidianUniversity2/26/202565MicroelectronicsSchoolXidianUniversityNF1021,031,041,052,061,071,084,3,2,0通過不同的反饋網絡,可以形成不同的移存型計數器。以m序列碼為例,反饋函數如左表所示,表中的N是觸發器的級數,F是反饋函數的列表。例如N=4,則反饋函數如下:下面以N=4為例,在15位最長線性序列移存型計數器中,有一個由“0000”構成的死循環,為了打破死循環,可以修改式為根據N=4的最長線形序列移存型計數器的功能實現的偽隨機碼發生器VerilogHDL程序代碼是:2/26/202566MicroelectronicsSchoolXidianUniversitymodulesignal15(out,clk,load_n,D_load);outputout;inputload_n,clk;input[3:0]D_load;reg[3:0]Q;wireF;always@(posedgeclk)if(~load_n)Q<=D_load;elseQ<={Q[2:0],F};assignF=(Q[1]^Q[0])|(~Q[3]&~Q[2]&~Q[1]&~Q[0]);assignout=Q[3];endmodule4.4有限同步狀態機有限狀態機是時序電路的通用模型,任何時序電路都可以表示為有限狀態機。有限狀態機從本質上講是由寄存器與組合邏輯構成的時序電路,各個狀態之間的轉移總是在時鐘的觸發下進行的,狀態信息存儲在寄存器中。因為狀態的個數是有限的所以稱為有限狀態機。同其它時序電路一樣,有限狀態機也是由兩部分組成:存儲電路和組合邏輯電路。存儲電路,用來生成狀態機的狀態;組合邏輯電路,用來提供輸出以及狀態機跳轉的條件。2/26/202567MicroelectronicsSchoolXidianUniversity根據輸出信號的產生方式,有限狀態機可以分為米利型(Mealy)和摩爾型(Moore)兩類。Mealy型狀態機的輸出與當前狀態和輸入有關系,Moore型狀態機的輸出僅依賴當前狀態而與輸入無關。2/26/202568MicroelectronicsSchoolXidianUniversity狀態機編碼方式很多,由此產生的電路也不相同,常見的編碼方式有三種:二進制編碼、格雷編碼和一位獨熱編碼。(1)二進制編碼:狀態寄存器是由觸發器組成的。N個觸發器可以構成2n個狀態。二進制編碼的優點是使用的觸發器個數較少,節省資源;缺點是狀態跳轉時可能有多個bit位同時變化,引起毛刺,造成邏輯錯誤。(2)格雷編碼:格雷編碼和二進制編碼類似。格雷編碼狀態跳轉時只有一個bit位發生變化,減少了產生毛刺和一些暫態的可能。(3)Onehot編碼:是對于n個狀態采用n個bit位來編碼,每個狀態編碼中只有一個bit位為1,如:0001,0010,0100,1000。Onehot編碼增加了使用觸發器的個數,但是這種編碼方便譯碼,可以有效地節省和化簡組合電路。2/26/202569MicroelectronicsSchoolXidianUniversity在VerilogHDL中,有限狀態機的寫法較多,常用的有兩段式和三段式兩種。2/26/202570MicroelectronicsSchoolXidianUniversity(1)狀態機兩段式描述方式://第一個進程,同步時序always模塊,格式化描述次態寄存器遷移到現態寄存器always@(posedgeclkornegedgerst_n)
//異步復位
if(!rst_n)current_state<=IDLE;
else
current_state<=next_state;//注意,使用的是非阻塞賦值
//第二個進程,組合邏輯always模塊,描述狀態轉移條件判斷always@(current_state和輸入信號)
//電平觸發
begin
next_state=x;
//要初始化,使得系統復位后能進入正確的狀態
case(current_state)
S1:if(...)
next_state=S2;
//阻塞賦值
out1<=1'b1;
//注意是非阻塞邏輯...
endcaseend2/26/202571MicroelectronicsSchoolXidianUniversity/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DZ/T 0143-1994衛星遙感圖像產品質量控制規范
- DZ/T 0087-1993深層數字記錄地震儀通用技術條件
- DZ/T 0072-1993電阻率測深法技術規程
- DZ 0007-1991地質儀器機械和電氣裝配通用技術要求
- CJ/T 84-1999垃圾車
- CJ/T 514-2018燃氣輸送用金屬閥門
- CJ/T 459-2014推雪鏟
- CJ/T 408-2012好氧堆肥氧氣自動監測設備
- CJ/T 244-2016游泳池水質標準
- 中級社會工作者社保政策試題及答案
- T/CATCM 032-2024中藥配方顆粒臨床使用指南
- 摩根斯丹利-2025中國汽車綜述 China Autos Overview -2025-05
- 兒童健康管理中心運營方案
- 2025年壓縮機用平衡塊項目市場調查研究報告
- 渣漿泵市場現狀分析及前景預測報告
- 2025年健康監測考試試題及答案詳解
- 2025年(第一季度)電網工程設備材料信息參考價(加密)
- 門窗安裝勞動合同協議
- 項目上市居間合同協議
- GA/T 751-2024公安視頻圖像屏幕顯示信息疊加規范
- 課題申報書:公費師范生本研銜接培養研究
評論
0/150
提交評論