版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第2章邏輯電路及verilog HDL簡介主要內(nèi)容 基本邏輯門和常用邏輯門 用Verilog HDL實現(xiàn)基本的邏輯操作 4 種風(fēng)格的Verilog HDL描述邏輯門級的Verilog HDL數(shù)據(jù)流風(fēng)格的Verilog HDL功能描述風(fēng)格的Verilog HDL 常用的組合邏輯電路及其設(shè)計多路選擇器設(shè)計譯碼器設(shè)計 32位移位器設(shè)計 時序電路的設(shè)計方法D鎖存器D觸發(fā)器狀態(tài)轉(zhuǎn)移圖及時序電路設(shè)計2.1 基本邏輯門和常用邏輯門數(shù)字邏輯電路是實現(xiàn)數(shù)字計算機的物質(zhì)基數(shù)字邏輯電路是實現(xiàn)數(shù)字計算機的物質(zhì)基礎(chǔ)。礎(chǔ)。若將其做在一塊集成電路上(被完整封裝,看不到內(nèi)部結(jié)構(gòu)),稱為數(shù)字集成電路,它是現(xiàn)代計算機的基本元件。
2、數(shù)字集成電路的基本元件是邏輯門,邏輯門由晶體管組成。這里只簡介MOS晶體管(金屬-氧化物-半導(dǎo)體場效應(yīng)管)組成的邏輯門。MOS晶體管 按物質(zhì)是否導(dǎo)電,可以分為:導(dǎo)體(雙向?qū)щ姡┙^緣體(不導(dǎo)電)半導(dǎo)體 同時具備導(dǎo)體和絕緣體兩種特性,其特性取決于在物體兩端所施加電壓的方向,當(dāng)在一個方向上有正的電壓存在時,可以允許電流流過(導(dǎo)體特性);而在相反的方向上施加一定大小的電壓時,該物體中不會產(chǎn)生電流(絕緣體特性),即該物體只能在單個方向上導(dǎo)電。 半導(dǎo)體分為二極管MOS晶體管(三極管中的一種) N溝道MOS晶體管 P溝道MOS晶體管 N-MOS晶體管的符號如下源極S漏極D柵極G源極S(VS)漏極D(VD)柵
3、極G(VG) 在數(shù)字電路中,MOS管工作于開關(guān)狀態(tài),相當(dāng)于一個可控開關(guān)。MOS管狀態(tài)開關(guān)狀態(tài)數(shù)字電路狀態(tài)導(dǎo)通達(dá)到飽和接通0(L低電平)截止斷開1(H高電平) 穩(wěn)定狀態(tài)下不允許工作于導(dǎo)通而又不飽和的狀態(tài)(電壓不允許處在不高、不低的模糊狀態(tài))。 高電平或低電平的具體數(shù)值與電路結(jié)構(gòu)、材料等有關(guān),下表為MOS數(shù)字電路的高低電平的典型值。 在數(shù)字電路中,MOS管相當(dāng)于一個開關(guān),可控信號是VG。如NMOS管,當(dāng)VGSVH時NMOS管導(dǎo)通。電源電壓(V)高電平(H)低電平(L)典型值范圍典型值范圍VD=55=30=20-與與-或?;?。非門(NOT)非門的主要功能是對輸入信號求反。其布爾表達(dá)式為 f= aVD
4、DRafNMOS非門VDDafCMOS非門RKU輸入a a輸出 f f 斷(0)亮(1)合(1)滅(0)非門真值表xf非門符號 目前的集成電路以CMOS電路為主。 CMOS的優(yōu)點功耗小從輸入信號發(fā)生變化到輸出信號變化的延遲時間小,因而速度快。 非門的波形圖如下。fa不考慮延遲fa實際電路延遲時間td二輸入二輸入與門與或門 與門與或門真值表RK1UK2RK1UK2輸入輸出K1K2燈斷(0) 斷(0) 滅(0)斷(0) 合(1) 滅(0)合(1) 斷(0) 滅(0)合(1) 合(1) 亮(1)與門:燈亮=K1K2輸入輸出K1K2燈斷(0) 斷(0) 滅(0)斷(0) 合(1) 亮(1)合(1) 斷
5、(0) 亮(1)合(1) 合(1) 亮(1)或門:燈亮=K1+K2二輸入二輸入與非門和或非門 與非門和或非門真值表輸入輸出K1K2燈斷(0) 斷(0) 亮(1)斷(0) 合(1) 滅(0)合(1) 斷(0) 滅(0)合(1) 合(1) 滅(0)輸入輸出K1K2燈斷(0) 斷(0) 亮(1)斷(0) 合(1) 亮(1)合(1) 斷(0) 亮(1)合(1) 合(1) 滅(0)RK1UK2RK1UK2或非門:燈亮=K1+K2與非門:燈亮=K1K2二輸入二輸入與非門電路圖VDDRbNMOS與非門affVDDbCMOS與非門aCMOS或非門fVDDba邏輯功能的表示和等效電路邏輯功能表示: 布爾代數(shù)式、
6、卡諾圖、真值表、線路邏輯圖下圖是非門、二輸入二輸入與門、二輸入二輸入或門等的圖形符號。 非門非門 與門與門 與非門與非門 或門或門 或非門或非門AYBA B Y 0 0 0 0 1 0 1 0 0 1 1 1A B Y 0 0 1 0 1 1 1 0 1 1 1 0Y=AB Y= AB Y=A+B Y=A+B 真值表真值表YYYAAABBBAY真值表和邏輯表達(dá)式的對應(yīng)關(guān)系與門與門與非門與非門ABA B Y 0 0 0 0 1 0 1 0 0 1 1 1A B Y 0 0 1 0 1 1 1 0 1 1 1 0Y = A B Y = A B ABY 用用與邏輯與邏輯寫出真值表中寫出真值表中每一橫
7、行中輸出為每一橫行中輸出為 1 1 的的邏輯表達(dá)式;邏輯表達(dá)式; 用用或邏輯或邏輯匯總真值表中匯總真值表中全部輸出為全部輸出為 1 1 的邏輯。的邏輯。 不必理睬那些輸出為不必理睬那些輸出為 0 0的各行的內(nèi)容,它們已的各行的內(nèi)容,它們已經(jīng)隱含在通過經(jīng)隱含在通過 1 1、2 2 兩兩步寫出的表達(dá)式中。步寫出的表達(dá)式中。Y= A * B + A * B + A * BY真值表真值表二輸入異或門和同或門 二輸入異或門是指輸入的二個變量相異時輸出為1,否則輸出為0。 二輸入同或門是指輸入的二個變量相同時輸出為1,否則輸出為0。 可以看出兩者的關(guān)系為非的關(guān)系。 真值表如下:ABY00001110111
8、0ABY001010100111異或門真值表異或門真值表同或門真值表同或門真值表異或門表達(dá)式異或門表達(dá)式 Y=AB+AB=A B同或門表達(dá)式同或門表達(dá)式 Y=AB+AB=A B 緩沖器緩沖器只能簡單地把輸入信號傳送到輸出器。主要用于當(dāng)某個信號所驅(qū)動的負(fù)載特別大時能給出較大的電流,或為了避免延遲時間過長。 三態(tài)門電路三態(tài)門電路圖和真值表如下:f電路圖SaSMOS管af備注1導(dǎo)通00f=a1110截止X(任意)zf=z(高阻態(tài)) 三態(tài)門電路是一種構(gòu)建計算機總線接口的理想電路,具有信號驅(qū)動能力強、傳輸速度快的特性,又有集電極開路電路的輸出可以“線與”的優(yōu)點。 用于實現(xiàn)從多個數(shù)據(jù)輸入中選擇其一的場合。
9、A B C/G1 /G2 /G3總線總線例如,當(dāng)控制信號例如,當(dāng)控制信號 /G1/G1為低電平,為低電平, /G2 /G2 和和 /G3/G3為高電平時,三態(tài)門的為高電平時,三態(tài)門的輸入輸入 A A 被送到總線上,被送到總線上,另外兩個三態(tài)門的輸出另外兩個三態(tài)門的輸出處于高阻態(tài)。處于高阻態(tài)。 2.2 t Verilog HDL實現(xiàn)基本的邏輯 下面先用C語言程序舉例說明二個邏輯變量進(jìn)行邏輯與操作,并將它們的真值表打印出來,要求使用函數(shù)來完成。A B Z=and(a,b) 0 0 0 0 1 0 1 0 0 1 1 1邏輯與真值表邏輯與真值表Using C function code/logic
10、and functionbool and1(bool a,bool b) return a & b;/test fileincludeint main() int i,x,y;for(i=0;i4;i+) x=i%2; y=i/2;printf(“%d & %d=%dn”,x,y,and1(x,y);return 0;Verilog HDL code/source codemodule and1(x,y,z); input x,y; output z; assign z=x&y;endmodule注釋注釋模塊名模塊名模塊端口定義模塊端口定義分號結(jié)束分號結(jié)束端口功端口功能描述能描述功能定義功能定
11、義 其他的邏輯運算類推 模塊代碼寫好后,首先看看它是否符合Verilog HDL的語法規(guī)則編譯。 為了確認(rèn)代碼是否能完成所期望的任務(wù),還要對它進(jìn)行檢查。檢查的方法是給輸入信號指定所有可能的輸入組合,讓模塊的主體“計算”出相應(yīng)的輸出。然后抒計算出的輸出與所期待的輸出進(jìn)行比較,檢查它們是否正確。計算代碼輸出的任務(wù)由Verilog HDL“仿真器” 完成。 為此需要編寫測試模塊,測試模塊大致由三部分組成。調(diào)用被測試的模塊用各種輸入組合來測試結(jié)果指定輸出文件名(Quartus II不需要)Testbench code/testbench codemodule and1_tb; reg 1:0 i; r
12、eg x,y; wire z; initial for(i=0;i=3;i=i+1) begin #10 x=i%2;y=i/2; end and1 m(.x(x),.y(y),.z(z); endmodule無輸入輸出無輸入輸出數(shù)據(jù)位數(shù)數(shù)據(jù)位數(shù)2位位寄存器類型寄存器類型初始化變量初始化變量線網(wǎng)類型線網(wǎng)類型10延時單延時單位后輸出位后輸出生成實例并代生成實例并代入?yún)?shù)運行入?yún)?shù)運行 2.3 邏輯門的CMOS晶體管實現(xiàn)以及晶體管的Verilog HDL 略2.4 四種風(fēng)格的Verilog HDL描述 2.4.1 晶體管開關(guān)級的Verilog HDL 下面以CMOS反向器(非門)的Verilog
13、HDL代碼為例進(jìn)行說明。module cmosnot(f,a); input a; output f; supply1 vdd; supply0 gnd; pmos p1(f,vdd,a); nmos n1(f,gnd,a);endmodule測試代碼include cmosnot.vmodule cmosnot_tb; reg a,b; wire f; cmosnot not_1(f,a); initial begin a=1; #1 a=0; #1 a=1; #1 $finish; end initial begin $dumpfile(test.vcd); $dumpvars; $mon
14、itor(%gt a=%b;f=%b,$time,a,f); /disply end endmodule2.4.2 邏輯門級的Verilog HDL 下面給出兩種邏輯門級的二選一多路器電路。使用三態(tài)門使用普通的與非門bufif0bufif1a0a1sya0a1ssna0_sna1_sy多路選擇器(三態(tài)門)電路多路選擇器(與或非門)電路模塊代碼/三態(tài)門實現(xiàn)module mux2X1_3s(a0,a1,s,y) input s,a0,a1; output y; bufif0 b0(y7,a0,s); bufif1 b0(y7,a1,s);endmodule/與或非門實現(xiàn)module mux2x1_
15、gate(a0,a1,s,y) input s,a0,a1; output y; not i0(sn,s); and i1(a0_sn,a0,s); and i2(a1_s,a1,s); and i3(y,a0_sn,a1_s);endmodule 2.4.3 數(shù)據(jù)流風(fēng)格的Verilog HDL 數(shù)據(jù)流風(fēng)格的Verilog HDL不指定任何特定的器件。 主要特征是使用assign語句對變量賦值。 賦值語句的特點是等式右邊的輸入變量一旦發(fā)生變化,立即反映到等式左邊的輸出變量。 使用assign賦值時,對一個變量只能賦值一次。模塊代碼/邏輯表達(dá)式風(fēng)格module mux2X1_dataflow(a
16、0,a1,s,y); input s,a0,a1; output y; assign y=s&a0|s&a1;endmodule/三目運算符?:形式module mux2x1_gate(a0,a1,s,y); input s,a0,a1; output y; assign y=s?a0:a1;endmodule2.4.4 功能描述風(fēng)格的Verilog HDL 功能描述是Verilog HDL中層次最高的描述方法。 特點:靠“算法”設(shè)計電路的操作。 下面給出二選一多路器的部分版本。Always_if_elsemodule mux2x1_if_else(a0,a1,s,y) input s,a0,
17、a1; output y; reg y;/ycannot be a net always (s or a0 or a1) begin if(s) begin y=a1; end else begin y=a0; endendendmoduleAlways_casemodule mux2x1_case(a0,a1,s,y) input s,a0,a1; output y; reg y;/ycannot be a net always (s or a0 or a1) begin case(s) 1b0:y=a0; 1b1:y=a1; endcaseendendmodulefunctionmodul
18、e mux2x1_function(a0,a1,s,y) input s,a0,a1; output y; assign y=sel(a0,a1,s); function sel; input a,b,c;/note the order case(c) 1b0:sel=a; 1b1:sel=b; endcase endfunctionendmoduleif(c) sel=b; else sel=a;邏輯電路的分類按是否有時序,分為: 組合邏輯電路的輸出狀態(tài)只取決于當(dāng)前輸入信號的狀態(tài),與過去的輸入信號的狀態(tài)無關(guān)。例如與門、加法器,譯碼器,編碼器,數(shù)據(jù)選擇器等電路。 時序邏輯電路的輸出狀態(tài)不僅和當(dāng)
19、前的輸入信號的狀態(tài)有關(guān),還與以前的輸入信號的狀態(tài)有關(guān),即時序邏輯電路有記憶功能。最基本的記憶電路是觸發(fā)器,包括電平觸發(fā)器和邊沿觸發(fā)器,由基本觸發(fā)器可以構(gòu)成寄存器,計數(shù)器等部件。從器件的集成度和功能區(qū)分:低集成度的、只提供專用功能的器件。 加法器和算術(shù)邏輯單元 譯碼器和編碼器 數(shù)據(jù)選擇器 觸發(fā)器和寄存器、計數(shù)器高集成度的、現(xiàn)場可編程的通用功能電路(陣列邏輯電路) 存儲器芯片 RAM 和 ROM 通用陣列邏輯 GAL 復(fù)雜的可編程邏輯器件 CPLD: MACH器件 現(xiàn)場可編程門陣列 FPGA 器件2.5 常用的組合電路及其設(shè)計 常見的組合邏輯電路有加法器、譯碼器、數(shù)據(jù)選擇器等。2.5.1 半加器
20、不考慮進(jìn)位輸入時,兩數(shù)碼Xn,Yn相加稱為半加。功能表如下。XnYnHn000011101110半加和Hn的表達(dá)式如下:Hn=XnYn+XnYn=XnYn 半加器可用反相門及與或非門來實現(xiàn),也可用異或門來實現(xiàn)。用與、或、非門構(gòu)成的半加器用異或門構(gòu)成的半加器2.5.2 全加器 由Xn,Yn及低位來的進(jìn)位輸入Cn-1相加的器件稱為全加器,下表是其真值表。由表可得全加和Fn和進(jìn)位輸出Cn的表達(dá)式:F Fn n=X=Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1 +X+Xn nY Yn nC Cn-1n-1C Cn n=X
21、=Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1 +X+Xn nY Yn nC Cn-1n-1全加器邏輯圖全加器邏輯圖Cn FnFAXn Yn Cn-1全加器符號全加器符號2.5. 3 加法器 串行加法器從低位向高位,每一次只完成一位二進(jìn)制數(shù)的加法運算,完成兩個n位數(shù)相加,需要進(jìn)行n+1步加法運算。完成串行加法的加法器稱為串行加法器。 串行加法器是由一位全加器、一個進(jìn)位觸發(fā)器及二個帶移位的寄存器構(gòu)成。 優(yōu)點是結(jié)構(gòu)簡單,缺點是速度太慢。 串行進(jìn)位的并行加法器并行加法是指全字長的兩個相加數(shù)同時相加,一步就能完成運算的加
22、法。完成并行加法的加法器稱為并行加法器。兩個n位數(shù)相加,如果考慮符號,并行加法器由n+1個全加器構(gòu)成。特點是把n+1個全加器的進(jìn)位輸入與進(jìn)位輸出首尾連接起來。缺點是速度受進(jìn)位的影響,進(jìn)位數(shù)越多,速度越慢。Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1F0F1F2F3C-1C0C1C2C3X0X1X2X3Y0Y1Y2Y3串行進(jìn)位的并行加法器Q3 Q2 Q1 Q0X寄存器Q3 Q2 Q1 Q0Y寄存器4位串行進(jìn)位的并行加法器的邏輯電路圖Adder code/adder.vmodule adder(cout,s
23、um,a,b,cin); parameter bit_width=4; outputbit_width-1:0 sum; output cout; input cin; input bit_width-1:0 a,b; assign cout,sum=a+b+cin;endmodule /assign語句為總是執(zhí)行后面語句,與時間無關(guān)。/ 把括號內(nèi)作為一個整體看待。Adder testbench codemodule adder_tb; parameter bit_width=4; wire bit_width-1:0 sum; wire cout; reg cin; reg bit_widt
24、h-1:0 a,b; integer i,k; initial begin k=1bit_width;cin=0; for(i=0;i=k*k;i=i+1) begin #100 a=i/k;b=i%k; end end adder m(.cout(cout),.sum(sum),.a(a),.b(b),.cin(cin);endmodule2.5.4 譯碼器 譯碼器有n個輸入變量,有=2n個輸出。當(dāng)輸入為某一組合時,對應(yīng)的有且僅有一個輸出為“1”,其余輸出均為“0”。 譯碼器的用途是把輸入代碼翻譯成相應(yīng)的控制電位,以實現(xiàn)代碼所要求的操作。二輸入四輸出譯碼器的邏輯圖真值表二輸入四輸出譯碼器二輸
25、入四輸出譯碼器 譯碼器中常設(shè)置“使能”控制端,當(dāng)該端為“1”時,譯碼器功能被禁止,此時所有輸出均為“0”。 使能端的主要功能是用來擴充輸入變量數(shù)(級連)。輸入輸入輸出輸出E#ABY0Y1Y2Y300010000010100010001001100011XX0000encoder codemodule encoder(en,in,yout); parameter bit_width=4; input en; output (1bit_width)-1:0 yout; /1-valid 0-invalid inputbit_width-1:0 in; reg (1bit_width)-1:0 yo
26、ut; initial yout=0; always (en or in) if(en=1) yout=0; else yout=1in; /技巧endmoduleEncoder testbench codetimescale 1ns/1nsmodule encoder_tp; parameter bit_width=4; reg en; wire (1bit_width)-1:0 yout; /1-valid 0-invalid reg bit_width-1:0 in; integer i,k; encoder encode(.en(en),.in(in),.yout(yout); ini
27、tial begin en=1;k=1bit_width; #100 en=0; for(i=0;ik;i=i+1) #100 in=i; #100 en=1; #2000 $stop; end endmodule使能端的應(yīng)用舉例 用1個3位二進(jìn)制計數(shù)器(無使能端)、2個2-4譯碼器來控制八個發(fā)光二極管依次從右到左地連續(xù)發(fā)光,即一個燈滅,另一個燈才亮。 解: 電路圖如下 2-4譯碼器 /E1 2-4譯碼器 /E0 Q2 Q1 Q03位二進(jìn)制計數(shù)器清零R時鐘CP啟動電路與輸入輸出Q2/E1 /E00101012.5.5 數(shù)據(jù)(多路)選擇器 數(shù)據(jù)選擇器又稱多路開關(guān),它能在選擇信號的作用下,從多個輸
28、入通道中選擇某一個通道的數(shù)據(jù)作為輸出。 下圖是“雙四通道選一”數(shù)據(jù)選擇器的邏輯圖和真值表。其中S0,S1是通道選擇信號,E是使能端,D0-D3是輸入數(shù)據(jù)。 使能 E# 的作用和譯碼器中相似,可用它來擴展選擇器的通道數(shù)。“雙四通道選一”數(shù)據(jù)選擇器的邏輯圖和功能表真值表輸入輸入輸出輸出S1S0D3D2D1D0E#YXXXXXX1000XXXD00D001XXD1X0D110XD2XX0D211D3XXX0D3Data selector code/data_selector.v/data_selector.vmodule data_selector(s,en,data0,data1,data2,da
29、ta3,yout);module data_selector(s,en,data0,data1,data2,data3,yout); parameter bit_width=4; parameter bit_width=4; outputbit_width-1:0 yout; outputbit_width-1:0 yout; inputbit_width-1:0 data0,data1,data2,data3; inputbit_width-1:0 data0,data1,data2,data3; input 1:0 s; input en; input 1:0 s; input en; r
30、eg bit_width-1:0 yout; reg bit_width-1:0 yout; always(s or en or data0 or data1 or data2 or data3) always(s or en or data0 or data1 or data2 or data3) begin begin if(en=1) yout=4bz; if(en=1) yout=4bz; else case (s) else case (s) 2b00:yout=data0; 2b00:yout=data0; 2b01:yout=data1; 2b01:yout=data1; 2b1
31、0:yout=data2; 2b10:yout=data2; 2b11:yout=data3; 2b11:yout=data3; endcase endcase end end endmoduleendmodule高阻態(tài)高阻態(tài)Data selector testbench codetimescale 1ns/1nstimescale 1ns/1nsmodule data_selector_tb;module data_selector_tb; parameter bit_width=4; parameter bit_width=4; wire bit_width-1:0 yout; wire
32、bit_width-1:0 yout; reg bit_width-1:0 data0,data1,data2,data3; reg bit_width-1:0 data0,data1,data2,data3; reg en; reg 1:0 s; integer i; reg en; reg 1:0 s; integer i;initial begininitial begin en=1;data0=4;data1=5;data2=6;data3=7; en=1;data0=4;data1=5;data2=6;data3=7; #100 en=0; #100 en=0; for(i=0;i=
33、4;i=i+1) begin #100 s=i; end for(i=0;i=4;i=i+1) begin #100 s=i; end end end data_selector data_selector m(.s(s),.en(en),.data0(data0),.data1(data1),.data2(data2),.dm(.s(s),.en(en),.data0(data0),.data1(data1),.data2(data2),.data3(data3),.yout(yout);ata3(data3),.yout(yout);endmodule endmodule P40 多路選擇
34、器代碼module mux4x32(data0,data1,data2,data3,s,yout);module mux4x32(data0,data1,data2,data3,s,yout); parameter bit_width=32; parameter bit_width=32; outputbit_width-1:0 yout; outputbit_width-1:0 yout; inputbit_width-1:0 data0,data1,data2,data3; inputbit_width-1:0 data0,data1,data2,data3; input 1:0 s; i
35、nput 1:0 s; reg bit_width-1:0 yout; reg bit_width-1:0 yout; always(s or data0 or data1 or data2 or data3) always(s or data0 or data1 or data2 or data3) begin begin case (s) case (s) 2b00:yout=data0; 2b00:yout=data0; 2b01:yout=data1; 2b01:yout=data1; 2b10:yout=data2; 2b10:yout=data2; 2b11:yout=data3;
36、 2b11:yout=data3; endcase endcase end endendmoduleendmoduleTest Code include mux4x32.vinclude mux4x32.vmodule mux4x32_tb;module mux4x32_tb; parameter bit_width=32; parameter bit_width=32; reg 1:0 i; reg 1:0 i; reg bit_width-1:0 x,y,m,n; reg bit_width-1:0 x,y,m,n; wire bit_width-1:0 z; wire bit_width
37、-1:0 z; mux4x32 mux4x32 mux4(.data0(x),.data1(y),.data2(m),.data3(n),.s(i),.yout(z); mux4(.data0(x),.data1(y),.data2(m),.data3(n),.s(i),.yout(z); initial begin initial begin x=32h2345; x=32h2345; y=32h5678; y=32h5678; m=x+1; m=x+1; n=y+32h10; n=y+32h10; for(i=0;i=3;i=i+1) begin #1 ; end for(i=0;i1;
38、if(direc=0) x=x1; else else x=x1; x=x1; end end out=x; out=x; end endendmoduleendmoduleLogic shift testbech codetimescale 1ns/1nstimescale 1ns/1nsmodule shift_lr_tb;module shift_lr_tb; reg 7:0 in; reg 7:0 in; wire 7:0 out1; wire 7:0 out1; reg direction,clk,en; reg direction,clk,en; initial begin ini
39、tial begin en=0; en=0; #1 clk=0;direction=1;in=8b0001_0000; #1 clk=0;direction=1;in=8b0001_0000; #1 en=1; #1 en=1; #19 en=0; #19 en=0; end end always #100 clk=clk; always #100 clk=clk; shift_lr shift_lr m(.in(in),.out(out1),.clk(clk),.en(en),.direction(direction);m(.in(in),.out(out1),.clk(clk),.en(e
40、n),.direction(direction); endmoduleendmoduleP46移位器代碼shift.vmodule shift(d,sa,right,arith,sh);module shift(d,sa,right,arith,sh); input 31:0 d; input 31:0 d; input 4:0 sa; input 4:0 sa; input right,arith; input right,arith; output 31:0 sh; output 31:0 sh; reg 31:0 sh; reg 31:0 sh; always always* * beg
41、in begin if(!right) begin sh=dsa; end if(!right) begin sh=dsa; / else if(!arith) sh=dsa; /shift right logicshift right logic else else sh=$signed(d) sh=$signed(d)sa;/sa;/shift right arithmeticshift right arithmetic end end endmoduleendmodule2.6.6 計數(shù)器 計數(shù)器按時鐘作用方式,分為同步和異步兩大類,其中同步計數(shù)器線路略復(fù)雜但性能更好,用于脈沖分頻和需要
42、計數(shù)的場合,例如二進(jìn)制或十進(jìn)制計數(shù)。以二進(jìn)制計數(shù)器為例說明。 Q3 Q2 Q1 Q0Q3Q2Q1Q000000001000100100010001100110100010001010101011001100111011110001000100110011010101010111011110011001101110111101110111111110000 注意:Q即為輸入端D。 四位同步二進(jìn)制計數(shù)器圖如下。 根據(jù)真值表寫出表達(dá)式,并化簡,得出以下邏輯表達(dá)式:Q0=Q0Q1=Q1Q0+Q1Q0Q2= Q2Q1+Q2Q0+Q2Q1Q0Q3= Q3Q1+Q3Q2+Q3Q0+Q3Q2Q1Q0Q/Q/S
43、CPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RCPQ0Q1Q2Q3或門或門或門Counter codemodule counter(clk,rst,c,out); parameter bit_width=4; input rst,clk; output c;/carry outputbit_width-1:0 out; reg c; regbit_width-1:0 out; integer i; initial i=1bit_width;左移運算左移運算 always (posedge clk or negedge rst)always (posedge clk or
44、 negedge rst) begin begin if(!rst) begin outbit_width-1:0=0; if(!rst) begin outbit_width-1:0=0; c=0; endc=0; end else begin else begin if(outbit_width-1:0=i-1) if(outbit_width-1:0=i-1) begin c=1;outbit_width-1:0=0;end begin c=1;outbit_width-1:0=0;end else else begin begin outbit_width-1:0=outbit_wid
45、th-1:0+1;c=0;outbit_width-1:0=outbit_width-1:0+1;c=0; end end end end end end endmoduleendmoduleCounter testbench codetimescale 1ns/1nstimescale 1ns/1nsmodule counter_tp;module counter_tp; parameter bit_width=4; parameter bit_width=4; reg clk,rst; wire cout; reg clk,rst; wire cout; wirebit_width-1:0
46、 out; wirebit_width-1:0 out; counter cnt16(.clk(clk),.rst(rst),.c(cout),.out(out); counter cnt16(.clk(clk),.rst(rst),.c(cout),.out(out); always #20 clk=clk; always #20 clk=clk; initial initial begin begin clk=0; rst=0; clk=0; rst=0; #10 rst=1; #10 rst=1; #30 rst=0; #30 rst=0; #40 rst=1; #40 rst=1; #
47、2000 $stop; #2000 $stop; end endendmoduleendmodule2.6.7 狀態(tài)圖及時序電路設(shè)計 下面設(shè)計一個平常的鐘。需求分析需求分析 為了說明其設(shè)計原理,在此做一些簡化。秒鐘只有6個狀態(tài),即計到6向分針進(jìn)位,同時置為0。分針只有6個狀態(tài),即計到6向時針進(jìn)位,同時置為0。時針只有12個狀態(tài),即計到12時時針置0。能夠清零。帶使能端。能夠顯示時、分、秒,且動態(tài)的變化。 下面畫出基本原理圖如下。Q2 Q1 Q0六進(jìn)制計數(shù)器0carry clkenable /rstQ2 Q1 Q0六進(jìn)制計數(shù)器1carry clkenable /rstQ2 Q1 Q0六進(jìn)制計數(shù)器
48、2carry clkenable /rstQ2 Q1 Q0六進(jìn)制計數(shù)器3carry clkenable /rst顯示部分及電路顯示部分及電路顯示部分及電路12時鐘清零使能2個3位二進(jìn)制轉(zhuǎn)換成2個4位二進(jìn)制電路00顯示部分及電路時針顯示分針顯示秒針顯示 從圖中可以看出,需要設(shè)計:六進(jìn)制計數(shù)器三輸入的顯示部分及其電路四輸入的顯示部分及其電路,并判斷是否等于12 下面先設(shè)計六進(jìn)制計數(shù)器。 這里采用狀態(tài)轉(zhuǎn)移圖方法設(shè)計六進(jìn)制計數(shù)器。 首先給每個狀態(tài)起一個名字,分別用S0S5表示計數(shù)器的值05。則狀態(tài)轉(zhuǎn)移圖如下。 其中 u 為輸入。當(dāng)u= 時,狀態(tài)發(fā)生變化。書上是當(dāng)u=1/0時,狀態(tài)變化。u=u= u=
49、u= u= u= carry 如果將u換成脈沖clk,且根據(jù)原理圖和狀態(tài)轉(zhuǎn)移圖,可以編寫六進(jìn)制計數(shù)器的代碼如下:module counter6(enable,clk,q,rst,carry);input enable,clk,rst;output 2:0 q;output carry;reg 2:0 q;reg carry;always (posedge clk or negedge rst) begin if(!rst) begin q=3b000;carry=0; end else if (enable) begin if(q=5) begin carry=!carry;q=3b000;end else begin q=q+3b001;end endendendmodule 顯示部分采用七段數(shù)碼管,它的顯示構(gòu)成如下圖所示。agdbcfe 設(shè)數(shù)碼管輸入為低電平時亮,為高電平時不亮,則顯示數(shù)字09的gfedcba編碼如表所示。輸出輸入顯示數(shù)字gfe dcba0100 00001111 10012010 01003011 000040
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東工商職業(yè)技術(shù)大學(xué)《生物制藥過程自動化技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東第二師范學(xué)院《系統(tǒng)化品牌設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東潮州衛(wèi)生健康職業(yè)學(xué)院《名案研討》2023-2024學(xué)年第一學(xué)期期末試卷
- 《總分析誤差》課件
- 《干部管理技能精座》課件
- 廣安職業(yè)技術(shù)學(xué)院《中醫(yī)眼科學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 共青科技職業(yè)學(xué)院《品牌與形象》2023-2024學(xué)年第一學(xué)期期末試卷
- 幼兒大班學(xué)做小學(xué)生課件
- 贛南醫(yī)學(xué)院《中國畫史論導(dǎo)讀二》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南醫(yī)學(xué)院《HTML5移動應(yīng)用開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 人教版5年級上冊音樂測試(含答案)
- 中國電信-空地一體5G增強低空網(wǎng)絡(luò)白皮書2024
- 2023-2024學(xué)年江蘇省連云港市贛榆區(qū)九年級(上)期末英語試卷
- 八年級上冊道德與法治期末試卷3(開卷)
- 機械工程學(xué)科研究前沿
- 朝鮮戶籍制度
- 汽車電器DFMEA-空調(diào)冷暖裝置
- 河北省滄州市2023-2024學(xué)年高一上學(xué)期期末考試語文試題(含答案解析)
- 2024屆四川省成都市中考數(shù)學(xué)第一輪復(fù)習(xí)之中考考點研究《一次函數(shù)與反比例函數(shù)綜合問題》教學(xué)
- 2023AECOPD診治中國專家共識
- 2024-2025年上半學(xué)期(三年級)教科版上冊科學(xué)平時訓(xùn)練試卷【可打印】
評論
0/150
提交評論