組合與時(shí)序邏輯電路設(shè)計(jì)演示文檔
《組合與時(shí)序邏輯電路設(shè)計(jì)演示文檔》由會(huì)員分享,可在線閱讀,更多相關(guān)《組合與時(shí)序邏輯電路設(shè)計(jì)演示文檔(78頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
201801,.,第4章 組合與時(shí)序邏輯電路設(shè)計(jì),201801,.,主要內(nèi)容,◆ 一、基本組合電路設(shè)計(jì) ◆ 二、基本時(shí)序電路設(shè)計(jì),201801,.,1、組合邏輯電路概念: 是由門電路組合而成的具有某種功能的電路,電路中沒有記憶單元,沒有反饋電路,輸入決定輸出。,每個(gè)輸出變量是輸入變量的邏輯函數(shù),每個(gè)時(shí)刻的輸出狀態(tài)僅與當(dāng)時(shí)輸入有關(guān),與輸入的原狀態(tài)無關(guān)。,一、 基本組合電路設(shè)計(jì),201801,.,2、組合邏輯電路設(shè)計(jì)方法,①傳統(tǒng)邏輯電路設(shè)計(jì)方法,②Verilog HDL邏輯電路設(shè)計(jì)方法,只需根據(jù)實(shí)際的邏輯功能用Verilog HDL語(yǔ)言對(duì)其進(jìn)行描述就可以,然后仿真得到結(jié)果,觀察是否符合實(shí)際邏輯功能。,常用三種描述方法是:結(jié)構(gòu)描述法、數(shù)據(jù)流和行為描述方法。,傳統(tǒng)方法通常采用邏輯電路圖輸入方式,由底層到高層進(jìn)行設(shè)計(jì)。缺點(diǎn)是效率低,設(shè)計(jì)設(shè)計(jì)時(shí)間長(zhǎng),容易出錯(cuò)。前面章節(jié)介紹的各種算數(shù)路徑電路、數(shù)字選擇電路等均是典型組合電路例子,下面通過程序輸入法設(shè)計(jì)較復(fù)雜組合邏輯電路。,201801,.,簡(jiǎn)單組合電路設(shè)計(jì)(可采用結(jié)構(gòu)描述和數(shù)據(jù)流描述),門級(jí)結(jié)構(gòu)描述 module gate1(F,A,B,C,D); input A,B,C,D; output F; wire F1,F2;// 中間變量可以省略定義 nand(F1,A,B); //調(diào)用門元件 and(F2,B,C,D); or(F,F1,F2); endmodule,數(shù)據(jù)流描述 module gate2(F,A,B,C,D); input A,B,C,D; output F; assign F=~(A endmodule,201801,.,3、典型組合電路設(shè)計(jì),⑴多位二進(jìn)制加法器設(shè)計(jì) 由于位數(shù)較多采用結(jié)構(gòu)描述和層次調(diào)用相對(duì)復(fù)雜,所以直接采用行為描述進(jìn)行設(shè)計(jì)。,例4.1 8位二進(jìn)制加法器設(shè)計(jì),201801,.,仿真結(jié)果,這種描述設(shè)計(jì)比較抽象但簡(jiǎn)單,無需了解內(nèi)部是怎樣的邏輯實(shí)現(xiàn)方式。,201801,.,⑵BCD編解碼器設(shè)計(jì),BCD碼是一種二進(jìn)制數(shù)字編碼形式,利用4位二進(jìn)制單元存儲(chǔ)一位十進(jìn)制的數(shù)碼,使得二進(jìn)制與十進(jìn)制轉(zhuǎn)換得以快速進(jìn)行。BCD碼有多種編碼方式,現(xiàn)采用8421碼編碼。,如圖in0~in9代表對(duì)應(yīng)0~9共10個(gè)數(shù)字輸入端,輸入高電平為有效輸入,out0~out3對(duì)應(yīng)輸出的BCD碼。,201801,.,BCD編碼器真值表,201801,.,由BCD碼真值表可得其輸入與輸出的邏輯關(guān)系為:,out0=in8+in9 out1=in4+in5+in6+in7 out2=in2+in3+in6+in7 out3=in1+in3+in5+in7+in9,可以根據(jù)上述輸入與輸出的邏輯關(guān)系采用結(jié)構(gòu)描述和數(shù)據(jù)流描述實(shí)現(xiàn)該BCD編碼器邏輯電路功能。,201801,.,module BCD_Enc(in,out); input[9:0] in; output[3:0] out; reg[3:0]out; always @(in) //always過程語(yǔ)句 begin case(in) 10‘b00_0000_0001:out=0; 10‘b00_0000_0010:out=1; 10‘b00_0000_0100:out=2; 10‘b00_0000_1000:out=3; 10‘b00_0001_0000:out=4; 10‘b00_0010_0000:out=5; 10‘b00_0100_0000:out=6; 10‘b00_1000_0000:out=7; 10‘b01_0000_0000:out=8; 10‘b10_0000_0000:out=9; endcase end endmodule,BCD碼編碼器程序,例4.2,201801,.,仿真結(jié)果如圖:,可見輸出完全由輸入決定,為組合邏輯電路。,下面的譯碼器設(shè)計(jì)電路功能正好與編碼器相反設(shè)計(jì)過程,詳細(xì)設(shè)計(jì)作業(yè)。,201801,.,module bcd_enc(in,out); input[9:0]in; output[3:0]out; assign out=func_enc(in); //函數(shù)調(diào)用 function [3:0] func_enc; //函數(shù)定義 input[9:0] in; case(in) 10'b00_0000_0001:func_enc=0; 10'b00_0000_0010:func_enc=1; 10'b00_0000_0100:func_enc=2; 10'b00_0000_1000:func_enc=3; 10'b00_0001_0000:func_enc=4; 10'b00_0010_0000:func_enc=5; 10'b00_0100_0000:func_enc=6; 10'b00_1000_0000:func_enc=7; 10'b01_0000_0000:func_enc=8; 10'b10_0000_0000:func_enc=9; endcase endfunction endmodule,也可以通過以下函數(shù)調(diào)用方法實(shí)現(xiàn):,例4.3,201801,.,⑶BCD加法器設(shè)計(jì),對(duì)多位BCD碼做加法與減法運(yùn)算時(shí),當(dāng)結(jié)果對(duì)應(yīng)的BCD值超寬9或低位向前有進(jìn)位或借位時(shí)就要進(jìn)行+6與-6修正。,【例4.5】 一位BCD碼加法器設(shè)計(jì)程序 module add4_bcd(cout,sum,ina,inb,cin); input cin; input[3:0] ina,inb; output[3:0] sum; reg[3:0] sum; output cout; reg cout; reg[4:0] temp; always @(ina,inb,cin) //always過程語(yǔ)句 begin temp9) {cout,sum}<=temp+6; //兩重選擇的IF語(yǔ)句 else {cout,sum}<=temp; end endmodule,201801,.,一位BCD碼加法器仿真結(jié)果,作業(yè):設(shè)計(jì)一位BCD碼減法器。,201801,.,⑷ 74LS138譯碼器的Verilog描述,【例4.6】74LS138譯碼器 module ttl74138(a,y,g1,g2a,g2b); input[2:0] a; input g1,g2a,g2b; output reg[7:0] y; always @(*) begin if(g1 end endmodule,201801,.,⑸8線—3線優(yōu)先編碼器74LS148的Verilog描述,【例4.7】 module ttl74148(din,ei,gs,eo,dout); input[7:0] din; input ei; output reg gs,eo; output reg[2:0] dout; always @(ei,din) begin if(ei) begin dout<=3'b111;gs<=1'b1;eo<=1'b1; end else if(din==8'b111111111) begin dout<=3'b111;gs<=1'b1;eo<=1'b0;end else if(!din[7]) begin dout<=3'b000;gs<=1'b0;eo<=1'b1;end else if(!din[6]) begin dout<=3'b001;gs<=1'b0;eo<=1'b1;end else if(!din[5]) begin dout<=3'b010;gs<=1'b0;eo<=1'b1;end else if(!din[4]) begin dout<=3'b011;gs<=1'b0;eo<=1'b1;end else if(!din[3]) begin dout<=3'b100;gs<=1'b0;eo<=1'b1;end else if(!din[2]) begin dout<=3'b101;gs<=1'b0;eo<=1'b1;end else if(!din[1]) begin dout<=3'b110;gs<=1'b0;eo<=1'b1;end else begin dout<=3'b111;gs<=1'b0;eo<=1'b1;end end endmodule,201801,.,【例4.8】 module parity(even_bit,odd_bit,a); input[7:0] a; output even_bit,odd_bit; assign even_bit=^a; //是規(guī)約運(yùn)算符,異或 //生成偶校驗(yàn)位 assign odd_bit=~even_bit; //生成奇校驗(yàn)位 endmodule,⑹奇偶校驗(yàn)位生成電路,201801,.,⑺通用奇偶校驗(yàn)發(fā)生器,module parity_gen(bout,ain); input[7:0] ain; output [8:0] bout; assign temp=^ain; assign bout={temp,ain} ; endmodule //1的個(gè)數(shù)為偶首位加0,否則加1,【例4.9】,201801,.,二、 Verilog基本時(shí)序電路設(shè)計(jì),1、時(shí)序電路概述,時(shí)序邏輯電路:電路的任意時(shí)刻的輸出狀態(tài)不僅取決于該時(shí)刻的輸入狀態(tài),還與電路的原狀態(tài)有關(guān)。所以時(shí)序電路都有記憶功能。,時(shí)序電路狀態(tài)的改變只發(fā)生在時(shí)鐘邊緣觸發(fā)的一瞬間,該時(shí)刻的輸入決定輸出,其它時(shí)間都是由系統(tǒng)當(dāng)前狀態(tài)決定。,201801,.,2、時(shí)序電路設(shè)計(jì)方法,時(shí)序電路一般都是采用過程語(yǔ)句進(jìn)行硬件描述,采用邊沿或電平觸發(fā)進(jìn)行控制。常見的時(shí)序電路有各種觸發(fā)器、鎖存器、寄存器、移位寄存器、分頻器和計(jì)數(shù)器等。下面將對(duì)各種時(shí)序電路進(jìn)行Vierlog設(shè)計(jì)。,⑴基本觸發(fā)器的Vierlog描述,【例4.10】 一位D觸發(fā)器的Verilog描述 module dff(Q,D,clk); input D,clk; output reg Q; always @(posedge clk) begin Q<=D; end endmodule,①D觸發(fā)器,201801,.,【例4.11】 JK觸發(fā)器 module jkff_rs(clk,j,k,q); input clk,j,k; output reg q; always @(posedge clk) begin case({j,k}) 2'b00:q<=q; 2'b01:q<=1'b0; 2'b10:q<=1'b1; 2'b11:q<=~q; default:q<=1'bx; endcase end endmodule,②JK觸發(fā)器描述,,,,,,,,作業(yè):設(shè)計(jì)RS和T觸發(fā)器,并仿真。,201801,.,⑵寄存器和鎖存器的Vierlog設(shè)計(jì) 觸發(fā)器是時(shí)序邏輯電路中最基本的存儲(chǔ)單元。由于寄存器和鎖存器均由觸發(fā)器組成,并帶有復(fù)位或置位等功能。下面介紹的寄存器和鎖存器均由D觸發(fā)器構(gòu)成。,當(dāng)D和Q定義多位矢量時(shí),可形成多位寄存器。,①寄存器設(shè)計(jì),A:一位簡(jiǎn)單寄存器設(shè)計(jì):一個(gè)D觸發(fā)器就是一位寄存器,如例4.10程序描述。,不帶復(fù)位端口的簡(jiǎn)單寄存器可以由一個(gè)在always語(yǔ)句中被賦值的變量描述,并且該always語(yǔ)句的敏感列表中只包含一個(gè)邊沿敏感的信號(hào)。在描述寄存器的always語(yǔ)句中,應(yīng)該使用非阻塞賦值(Non-blocking assignment)來給變量賦值,以保證生成正確的寄存器電路,并且在仿真中避免產(chǎn)生競(jìng)爭(zhēng)(Simulation race)。,201801,.,異步寄存器設(shè)計(jì),B:帶異步復(fù)位和使能的一位寄存器設(shè)計(jì):,可見寄存器的復(fù)位和使能都不受時(shí)鐘控制,只要滿足條件就可能發(fā)生復(fù)位的過程為異步控制過程。即各輸入控制相對(duì)獨(dú)立。,例4.12 帶異步復(fù)位和使能的一位寄存器,201801,.,【例4.13】 帶異步清0/異步置1(低電平有效)的一位寄存器 module dff_asyn(q,qn,d,clk,set,reset); input d,clk,set,reset; output reg q,qn; always @(posedge clk , negedge set , negedge reset) begin if(~reset) begin q<=1'b0;qn<=1'b1; end //異步清0,低電平有效 else if(~set) begin q<=1'b1;qn<=1'b0; end //異步置1,低電平有效 else begin q<=d;qn<=~d; end end endmodule,異步寄存器設(shè)計(jì),201801,.,帶異步復(fù)位或置位端口的寄存器可以由一個(gè)在always語(yǔ)句中被賦值的變量描述,并且該always語(yǔ)句的敏感列表中包含至少兩個(gè)邊沿敏感的信號(hào),但不包含任何電平敏感的信號(hào)。此外,該always語(yǔ)句必須包含一個(gè)if條件語(yǔ)句,來指定寄存器的第一個(gè)異步賦值行為(如異步復(fù)位、置位等等),以及可選的else if嵌套條件語(yǔ)句來指定額外的異步賦值行為。最后一個(gè)else語(yǔ)句用于指定同步的寄存器賦值行為。異步賦值語(yǔ)句的輸入信號(hào)通常連接到寄存器的復(fù)位或置位端口,而同步賦值語(yǔ)句的輸入信號(hào)則連接在寄存器的數(shù)據(jù)輸入端口,即通常所說的D端口。,異步寄存器設(shè)計(jì),201801,.,C:帶同步復(fù)位的一位寄存器設(shè)計(jì):,可見復(fù)位的發(fā)生是由時(shí)鐘決定的,也就是說無論復(fù)位和使能都在時(shí)鐘統(tǒng)一控制下進(jìn)行的過程為同步寄存器。,例4.14 帶同步復(fù)位的一位寄存器,同步寄存器設(shè)計(jì),201801,.,【例4.15】 帶同步清0/同步置1(低電平有效)的一位寄存器 module dff_syn(q,qn,d,clk,set,reset); input d,clk,set,reset; output reg q,qn; always @(posedge clk) begin if(~reset) begin q<=1'b0;qn<=1'b1;end //同步清0,低電平有效 else if(~set) begin q<=1'b1;qn<=1'b0;end //同步置1,低電平有效 else begin q<=d; qn<=~d; end end endmodule,同步寄存器設(shè)計(jì),201801,.,②鎖存器設(shè)計(jì),在描述鎖存器時(shí),always語(yǔ)句中所有賦值表達(dá)式等號(hào)右邊參與賦值的信號(hào)必須全部在敏感列表中列出,并且應(yīng)該使用非阻塞賦值(Non-blocking assignment)來給鎖存器變量賦值。該變量在always語(yǔ)句中存在有沒有賦值的情況。,A: 一位簡(jiǎn)單鎖存器,注意這里采用觸發(fā)條件是電平觸發(fā)(與寄存器采用的邊緣觸發(fā)不同),并且條件語(yǔ)句是不完備的。,201801,.,B: 含清0控制的鎖存器及其Verilog表述,201801,.,module sel(CLK,D,Q); input CLK,D; output reg Q; always @ (CLK or D) if (CLK) Q <= D; else Q <= 1'b0; endmodule,注意觸發(fā)器與組合邏輯電路區(qū)別,都采用過程語(yǔ)句描述,又都是電平觸發(fā),區(qū)別是觸發(fā)器不用完備的賦值,而組合電路必須將所有可能的賦值都考慮到。,// 變量Q不會(huì)生成鎖存器,而是生產(chǎn)組合邏輯,因?yàn)樵赼lways語(yǔ)句中,q沒有存在不被賦值的情況,即條件判別的所有分支都給Q指定了賦值語(yǔ)句。,201801,.,3、時(shí)序電路設(shè)計(jì)典型應(yīng)用,⑴移位寄存器設(shè)計(jì) 由于存放二進(jìn)制數(shù)據(jù)、信息的電路稱為寄存器。用移位方式存儲(chǔ)數(shù)據(jù)的寄存器,稱為移位寄存器。可以在移位脈沖作用下將寄存器內(nèi)部的二進(jìn)制數(shù)據(jù)順序向左或向右移動(dòng),實(shí)現(xiàn)數(shù)據(jù)的串、并行轉(zhuǎn)換和處理等操作。,①單向移位寄存器工作原理,是將寄存器的數(shù)據(jù)在相鄰位之間單方向移動(dòng)過程,分為左移移位寄存器和右移移位寄存器。串行輸入數(shù)據(jù)一般是從低位開始輸入。,如下4位移位寄存器,首先初始復(fù)位,4個(gè)觸發(fā)器輸出均為0,以后每一個(gè)CP上升沿到來,將D=1101數(shù)據(jù)右移一次,4個(gè)CP后,串行輸入完畢。,201801,.,右移輸出例表,在CP脈沖作用下,輸入一個(gè)脈沖,數(shù)據(jù)就向右移動(dòng)一位。輸出可以有兩種方式:一種是數(shù)據(jù)從右端Q0依次輸出,稱為串行輸出,這種輸出至少需要8個(gè)時(shí)鐘脈沖才能完成輸出;另一種是由Q3 、Q2、Q1 、Q0端同時(shí)輸出,稱為并行輸出,這種輸出只需4個(gè)時(shí)鐘脈沖就可同時(shí)輸出。所以并行輸出比串行輸出速度快。,201801,.,②雙向移位寄存器工作原理,如上圖,雙向移位寄存器就是數(shù)據(jù)既可以從Q3輸入實(shí)現(xiàn)右移操作,相反也可以從Q0輸入實(shí)現(xiàn)向左操作的過程。,下圖為4位雙向移位寄存器,通過控制dir實(shí)現(xiàn)左移和右移。si為串行輸入口,set為置位端,clk為時(shí)鐘輸入端,clr為清零端。,201801,.,可見實(shí)現(xiàn)雙向控制的邏輯電路是非常復(fù)雜,位數(shù)越大越復(fù)雜,采用傳統(tǒng)方式設(shè)計(jì)就容易出現(xiàn)錯(cuò)誤。下面采用Verilog硬件描述方法進(jìn)行設(shè)計(jì)。,//移位寄存器shft_reg module shft_reg(data_out,clk,clr,set,dir,si); output[3:0] data_out; input clk,clr,set,dir,si; reg[3:0]data_out; always @(posedge clk)begin if(!clr)data_out<=4’b0000; else if(!set)data_out<=4’b1111; else if(dir)data_out<={si,data_out[3:1]}; else data_out<={data_out[2:0],si}; End endmodule,201801,.,上圖演示的是si給定0時(shí),dir=0左移操作,si給定1時(shí),dir=1右移操作的過程仿真結(jié)果。,通過Verilog語(yǔ)言描述設(shè)計(jì)的雙向移位寄存器比傳統(tǒng)設(shè)計(jì)相對(duì)簡(jiǎn)單,這充分體現(xiàn)硬件描述語(yǔ)言的優(yōu)勢(shì)。,201801,.,生成的雙向移位寄存器邏輯功能示意圖(RTL),201801,.,⑵計(jì)數(shù)器設(shè)計(jì),計(jì)數(shù)器能夠累計(jì)輸入脈沖個(gè)數(shù),包含若干個(gè)觸發(fā)器,并按預(yù)定順序改變各觸發(fā)器的狀態(tài),是一種應(yīng)用廣泛的時(shí)序電路,按照各個(gè)觸發(fā)器狀態(tài)翻轉(zhuǎn)的時(shí)間,可分為同步和異步計(jì)數(shù)器;按照計(jì)數(shù)過程中的數(shù)字的增減規(guī)律,可分為加法、減法和可逆計(jì)數(shù)器;按照計(jì)數(shù)器循環(huán)長(zhǎng)度,可分為二進(jìn)制和N進(jìn)制計(jì)數(shù)器。,①二進(jìn)制計(jì)數(shù)器設(shè)計(jì),//異步使能二進(jìn)制計(jì)數(shù)器: module count_w(en,clk,reset,out); input clk,reset,en; parameter WIDTH=2; //參數(shù)定義output[WIDTH-1:0] out; reg[WIDTH-1:0] out; always @(posedge clk or negedge reset) if(!reset) out<=0; else if(en) out<=out+1; endmodule,當(dāng)width=2時(shí),為二位二進(jìn)制加法計(jì)數(shù)器。,也稱四進(jìn)制加法計(jì)數(shù)器,201801,.,module jsq_b(en,clk,reset,out); input clk,reset,en; parameter WIDTH=4; //參數(shù)定義 output[WIDTH-1:0] out; reg[WIDTH-1:0] out; always @(posedge clk ) if(reset) out<=0; else if(en) out<=out+1; endmodule,當(dāng)width=4時(shí),為4位同步復(fù)位和使能的二進(jìn)制加法計(jì)數(shù)器,201801,.,當(dāng)width為任意N位二進(jìn)制值時(shí),則可實(shí)現(xiàn)N位二進(jìn)制加法計(jì)數(shù)器。也可以設(shè)為減法計(jì)數(shù)器。,N=4時(shí)的四位加法計(jì)數(shù)器仿真結(jié)果,也可稱為16進(jìn)制加法計(jì)數(shù)器。,如何實(shí)現(xiàn)10進(jìn)制加法計(jì)數(shù)器?,右圖可見,只有選擇0000~1001這10個(gè)狀態(tài)作為10進(jìn)制的基本狀態(tài),并構(gòu)成循環(huán)。其它狀態(tài)均是無效狀態(tài),如果不加以限制就是普通的二進(jìn)制加法計(jì)數(shù)器(或稱16進(jìn)制加法計(jì)數(shù)器),201801,.,10進(jìn)制加法計(jì)數(shù)器電路結(jié)構(gòu)圖,201801,.,同步十進(jìn)制加法計(jì)數(shù)器,//clr為清零輸入端,//C為進(jìn)位輸出端,//為避免進(jìn)入無效狀態(tài),初始清零,可見這種硬件描述設(shè)計(jì)比直接電路設(shè)計(jì)相對(duì)簡(jiǎn)單,凸顯這種設(shè)計(jì)的優(yōu)越性。,201801,.,生成的10進(jìn)制加法計(jì)數(shù)器電路RTL,201801,.,二位十進(jìn)制計(jì)數(shù)器設(shè)計(jì),通常采用多位十進(jìn)制計(jì)數(shù)器進(jìn)行計(jì)數(shù),優(yōu)點(diǎn)是輸出便于顯示控制。,201801,.,⑶分頻器設(shè)計(jì),分頻器是數(shù)字系統(tǒng)設(shè)計(jì)中的基本電路,也是FPGA設(shè)計(jì)中頻繁使用的基本單元之一,盡管目前在大部分設(shè)計(jì)中還廣泛使用集成鎖相環(huán)(PLL)來進(jìn)行時(shí)鐘的分頻、倍頻以及相移設(shè)計(jì)。但是,對(duì)于時(shí)鐘要求不太嚴(yán)格的場(chǎng)合,通過自行設(shè)計(jì)分頻器進(jìn)行時(shí)鐘分頻的方法仍然非常流行。首先,這種方法可以節(jié)省鎖相環(huán)資源,其次,這種方式只消耗不多的邏輯單元就可以達(dá)到對(duì)時(shí)鐘的操作的目的。,分頻器就是使得單位時(shí)間內(nèi)的脈沖次數(shù)減小的電路,亦即降低脈沖頻率。降低1/2倍頻率的為二分頻器,降低1/4倍頻率的為4分頻器,以此類推。,①偶數(shù)倍分頻器設(shè)計(jì),201801,.,由上圖可知每輸入一個(gè)脈沖,觸發(fā)器狀態(tài)翻轉(zhuǎn)一次,每翻轉(zhuǎn)兩次,觸發(fā)器的輸出可以得到一個(gè)完整的矩形波,即觸發(fā)器翻轉(zhuǎn)兩次所用的前沿脈沖來自原始時(shí)鐘信號(hào)的兩個(gè)周期波形。所以,一個(gè)D觸發(fā)器實(shí)現(xiàn)了2分頻電路,兩個(gè)D觸發(fā)器可實(shí)現(xiàn)4分頻器電路,以此增加觸發(fā)器個(gè)數(shù)可以得到8、16、32等類型的觸發(fā)器。,偶數(shù)分頻器工作原理:,A:簡(jiǎn)單偶數(shù)倍分頻器設(shè)計(jì):,201801,.,2/4分頻器Verilog描述程序:可實(shí)現(xiàn)2和4分頻功能,module div_2_4(reset,clk_in,clk2_out,clk4_out); input clk_in,reset; output clk2_out,clk4_out; reg clk2_out,clk4_out; always @(posedge clk_in) //時(shí)鐘上升沿觸發(fā) begin if(~reset)begin //同步復(fù)位 clk2_out<=0; clk4_out<=0; end else begin clk2_out<= ~clk2_out ; if(~ clk2_out) clk4_out<= ~clk4_out ; end end endmodule,201801,.,2/4分頻器仿真結(jié)果,如再加入一個(gè)觸發(fā)器可以得到什么分頻器結(jié)果?可見這種方法只能得到2、4、8、16、32等偶數(shù)倍分頻器。考慮如何得到其它更多偶數(shù)倍分頻器設(shè)計(jì)?如6、10、12、14等分頻器。,2T,4T,一般偶數(shù)倍分頻器可以通過待分頻的時(shí)鐘觸發(fā)計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)器從0計(jì)數(shù)到N/2-1時(shí),輸出時(shí)鐘進(jìn)行翻轉(zhuǎn)并給計(jì)數(shù)器一個(gè)復(fù)位信號(hào),以使下一個(gè)時(shí)鐘從零開始計(jì)數(shù),以此循環(huán),就可以實(shí)現(xiàn)任意的偶數(shù)倍分頻。,B:一般任意偶數(shù)分頻器設(shè)計(jì):,201801,.,1/6分頻參考程序,module div_6(reset,clk_in,clk6_out); input clk_in,reset; output clk6_out; reg clk6_out; parameter WIDTH=2; reg [WIDTH:0]temp; always @(posedge clk_in) begin if(~reset)begin clk6_out2) begin clk6_out<= ~clk6_out ; temp<=0; end end end endmodule,201801,.,1/6分頻仿真結(jié)果,,,想一想?如何得到奇數(shù)倍的分頻電路設(shè)計(jì)。,作業(yè):設(shè)計(jì)1/10分頻器,并給出仿真結(jié)果。,6T,,,201801,.,②奇數(shù)倍分頻器設(shè)計(jì),當(dāng)分頻器系數(shù)N為奇數(shù)時(shí),考慮采用雙計(jì)數(shù)器計(jì)數(shù),兩個(gè)計(jì)數(shù)器同時(shí)計(jì)數(shù),一個(gè)對(duì)輸入時(shí)鐘信號(hào)的上升沿計(jì)數(shù),另一個(gè)則對(duì)信號(hào)的下降沿計(jì)數(shù)。計(jì)數(shù)器從0到N-1循環(huán)計(jì)數(shù),且計(jì)數(shù)器的計(jì)數(shù)值小于(N-1)/2時(shí)輸出1,計(jì)數(shù)值大于或等于(N-1)/2時(shí)輸出0。在這樣的控制方式下,分頻后輸出的波形恰好相差1/2時(shí)鐘周期,將兩個(gè)波形進(jìn)行或(OR)操作后,即可得到所要的波形(占空比50%)。,201801,.,三分頻器實(shí)現(xiàn)原理圖,,,,,,,,,,,,,,,,,T,3T,,,采集上升沿,計(jì)數(shù)小于(N-1)/2置1,否則置0,,采集下升沿,計(jì)數(shù)小于(N-1)/2置1,否則置0,N=3,從0到N-1重復(fù)計(jì)數(shù),將采集的上升和下降沿進(jìn)行相“或”運(yùn)算,得到1/3分頻輸出。,201801,.,占空比為50%的三分頻器Verilog描述程序,module fen3(clkin,qout1,qout2,clkout); input clkin; output reg qout1,qout2; output clkout; wire clkout; assign clkout=qout1|qout2; always @(posedge clkin) begin : blk1 reg[1:0] cnt; if(clkin==1'b1)begin if(cnt1) cnt<=0;end end end,always @(negedge clkin) begin : blk2 reg[1:0] cnt; if(clkin==1'b0)begin if(cnt1) cnt<=0;end end end endmodule,201801,.,三分頻器Verilog仿真結(jié)果,,,3T,201801,.,module fen3(clkin,qout1,qout2,clkout); input clkin; output qout1,qout2; output clkout; reg qout1,qout2; wire clkout; assign clkout=qout1|qout2; always @(posedge clkin) begin:blk1 reg [1:0] cnt; if(clkin==1’b1))begin if(cnt==2)begin cnt<=0; qout1<=1’b1; end else begin cnt- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 組合 時(shí)序 邏輯 電路設(shè)計(jì) 演示 文檔
鏈接地址:http://italysoccerbets.com/p-372447.html