chap7 EDA技術(shù)的應(yīng)用_第1頁
chap7 EDA技術(shù)的應(yīng)用_第2頁
chap7 EDA技術(shù)的應(yīng)用_第3頁
chap7 EDA技術(shù)的應(yīng)用_第4頁
chap7 EDA技術(shù)的應(yīng)用_第5頁
已閱讀5頁,還剩152頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章 EDA技術(shù)的應(yīng)用,7.1 組合邏輯電路設(shè)計(jì)應(yīng)用 1. 基本與非門電路 2. 運(yùn)算電路設(shè)計(jì) 3. 編碼器設(shè)計(jì) 4. 譯碼器設(shè)計(jì) 5. 數(shù)據(jù)選擇器設(shè)計(jì) 6. 數(shù)據(jù)比較器設(shè)計(jì) 7. ROM的設(shè)計(jì),1. 基本與非門電路,邏輯式,邏輯符號(hào),真值表,(1). LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand2 IS PORT ( a ,b: IN STD_LOGIC; y : OUT STD_LOGIC ); END nand2; ARCHITECTURE nand-1 OF nand2 IS BEGIN y =a NAND b; END

2、 nand2-1;,1. 基本與非門電路,ARCHITECTURE nand-2 OF nand2 IS BEGIN PROCESS(a,b) VARIABLE comb: STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN comb:=a,(2),常用的運(yùn)算電路有加法器、減法器和乘法器,下面以8位乘法器為例,介紹運(yùn)算電路的設(shè)計(jì)。 A, B是被乘數(shù)和乘數(shù)輸入端,Q是乘積輸出端。 源程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mul IS PORT(a,b :IN integer range 0 to 25

3、5; q :out integer range 0 to 65535); end mul; architecture one of mul is begin q=a*b; end one;,2. 運(yùn)算電路設(shè)計(jì),編碼器分為普通編碼器和優(yōu)先編碼器兩種。在普通編碼器中之允許一個(gè)輸入信號(hào)有效,否則輸出將發(fā)生混亂。下面以十六進(jìn)制編碼鍵盤為例,介紹普通編碼器的設(shè)計(jì)。 在編碼器中, X3.0是行輸入端,Y3.0是列輸入端,沒有鍵按下時(shí),信號(hào)線呈高電平,有鍵按下時(shí),相應(yīng)信號(hào)線呈低電平, S3.0為編碼器輸出端。,3. 編碼器,library ieee; use ieee.std_logic_1164.all;

4、 entity hcoder is port(x,y:in std_logic_vector(3 downto 0); s:out std_logic_vector(3 downto 0); end hcoder;,3. 編碼器,3. 編碼器,architecture struc of hcoder is begin process(x,y) variable xy:std_logic_vector(7 downto 0); begin xy:=(x case xy is,3. 編碼器,3. 編碼器,when B11101110=ssssssssss=B1001;,3. 編碼器,3. 編碼器,

5、when B10111011=sssssss=B0000; end case; end process; end struc;,3. 編碼器,表6-2 8線-3線優(yōu)先編碼器真值表 輸 入 輸 出 din0 din1 din2 din3 din4 din5 din6 din7 output0 output1 output2 x x x x x x x 0 0 0 0 x x x x x x 0 1 1 0 0 x x x x x 0 1 1 0 1 0 x x x x 0 1 1 1 1 1 0 x x x 0 1 1 1 1 0 0 1 x x 0 1 1 1 1 1 1 0 1 x 0 1

6、1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 注:表中的“x”為任意,類似VHDL中的“”值。,【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(0 TO 2) ); END coder; ARCHITECTURE behav OF coder IS SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

7、 PROCESS (din) BEGIN IF (din(7)=0) THEN output = 000 ; ELSIF (din(6)=0) THEN output = 100 ; ELSIF (din(5)=0) THEN output = 010 ; ELSIF (din(4)=0) THEN output = 110 ; ELSIF (din(3)=0) THEN output = 001 ; ELSIF (din(2)=0) THEN output = 101 ; ELSIF (din(1)=0) THEN output = 011 ; ELSE output = 111 ; END

8、 IF ; END PROCESS ; END behav;,譯碼器的邏輯功能是將每個(gè)輸入的二進(jìn)制代碼譯成對應(yīng)的輸出高、低電平信號(hào)。,4. 譯碼器,二進(jìn)制代碼,高低電平信號(hào),4. 譯碼器,library ieee; use ieee.std_logic_1164.all; entity decode38 is port (a,b,c: in std_logic; y: out std_logic_vector (7 downto 0); end decode38; architecture behave of decode38 is signal indata: std_logic_vecto

9、r (2 downto 0); begin Indata=c process(indata) begin case indata is,4. 譯碼器,when 000=yyyyyyyyy=“XXXXXXXX”; end case; end process; end behave;,4. 譯碼器,4. 譯碼器,用VHDL設(shè)計(jì)7段16進(jìn)制譯碼器,用CASE語句完成真值表的功能,向7段數(shù)碼 管輸出信號(hào), 最高位控制 小數(shù)點(diǎn),注意,此語句必須加入,4位加法 計(jì)數(shù)器,7段譯碼器,8位總線輸出,信號(hào)輸出,5. 數(shù)據(jù)選擇器,從一組數(shù)據(jù)中選擇一路信號(hào)進(jìn)行傳輸?shù)碾娐?,稱為數(shù)據(jù)選擇器。,控制信號(hào),輸入信號(hào),輸出信

10、號(hào),數(shù)據(jù)選擇器類似一個(gè)多投開關(guān)。選擇哪一路信號(hào)由相應(yīng)的一組控制信號(hào)控制。,5. 數(shù)據(jù)選擇器,例1 四選一數(shù)據(jù)選擇器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multi_4v IS PORT(sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); Input0,input1,input2,input3 : IN STD_LOGIC; Y : OUT STD_LOGIC ); END multi_4v; ARCHITECTURE a OF multi_4v IS BEGIN,5. 數(shù)據(jù)選擇器,PROCESS (se

11、l,input0,input1,input2,input3) BEGIN IF (sel=00) THEN Y = input0; ELSIF (sel=01) THEN Y = input1; ELSIF (sel=10) THEN Y = input2; ELSIF (sel=11) THEN Y = input3; END IF; END PROCESS; END a;,5. 數(shù)據(jù)選擇器,5. 數(shù)據(jù)選擇器,ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; ARCHI

12、TECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,例2 2選1多路選擇器的4種VHDL描述,ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECT

13、URE one ;,. . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END

14、 ARCHITECTURE one ;,mux21a功能時(shí)序波形,數(shù)據(jù)比較器是一種運(yùn)算電路,它可以對兩個(gè)二進(jìn)制數(shù)或二-十進(jìn)制編碼的數(shù)進(jìn)行比較,得出大于、小與或相等的結(jié)果。下面以8位二進(jìn)制數(shù)據(jù)比較器為例,介紹數(shù)據(jù)比較器的設(shè)計(jì)。 A7.0和B7.0是兩個(gè)數(shù)據(jù)輸入端,F(xiàn)A是“大于”輸出端,FB是“小于”輸出端,FE是“等于”輸出端。當(dāng)A7.0大于B7.0時(shí), FA=1;當(dāng)A7.0小于B7.0時(shí),F(xiàn)B=1; A7.0等于B7.0時(shí),F(xiàn)E=1。,6.數(shù)據(jù)比較器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comp8 IS PORT( A,B :IN

15、 STD_LOGIC_VECTOR(7 DOWNTO 0); FA,FB,FE:OUT STD_LOGIC); END comp8; ARCHITECTURE one OF comp8 IS BEGIN,6.數(shù)據(jù)比較器,PROCESS(A,B) BEGIN IF AB THEN FA=1; FB=0; FE=0; ELSIF AB THEN FA=0; FB=1; FE=0;,6.數(shù)據(jù)比較器,ELSIF A=B THEN FA=0; FB=0; FE=1; END IF; END PROCESS; END one;,6.數(shù)據(jù)比較器,在數(shù)字系統(tǒng)中,按照結(jié)構(gòu)特點(diǎn)分類,只讀存儲(chǔ)器ROM屬于組合邏輯電

16、路。在使用時(shí),ROM中的數(shù)據(jù)只能讀出而不能寫入,但掉電后數(shù)據(jù)不會(huì)丟失,因此常用于存放固化的程序和數(shù)據(jù)。 ROM的設(shè)計(jì)可以使用硬件描述語言合例化一個(gè)指定工藝的ROM兩種方法來實(shí)現(xiàn)。 對于容量不大的ROM,可以用VHDL的CASE語句來實(shí)現(xiàn)。下面是用CASE語句實(shí)現(xiàn)8X8位ROM的源程序:,7. ROM的設(shè)計(jì),LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY from_rom IS PORT(addr:IN INTEGER RANGE 0 TO 7; ena:IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(7 DOWN

17、TO 0); END from_rom; ARCHITECTURE aa OF from_rom IS BEGIN PROCESS (ena, adder) BEGIN,7 ROM的設(shè)計(jì),7. ROM的設(shè)計(jì),IF(ena=1) THEN q q q q q q q q q=“01001000”; END CASE; END IF; END PROCESS; END aa;,7 ROM的設(shè)計(jì),7. ROM的設(shè)計(jì),7.2 時(shí)序邏輯電路設(shè)計(jì)應(yīng)用 時(shí)序邏輯電路由組合邏輯電路和存儲(chǔ)電路兩部分組成,存儲(chǔ)電路由觸發(fā)器構(gòu)成,是時(shí)序邏輯電路不可缺少的部分,電路結(jié)構(gòu)決定了時(shí)序邏輯的特點(diǎn),即任一時(shí)刻的輸出信號(hào)不僅取

18、決于當(dāng)時(shí)的輸入信號(hào),而且還取決于電路的原來狀態(tài)。存儲(chǔ)電路負(fù)責(zé)保存組合邏輯電路的某些輸出值,并將其反饋回同一個(gè)組合邏輯的輸入端或輸出到其他組合邏輯電路的輸入端。記憶特性是時(shí)序邏輯電路的基本特征。 存儲(chǔ)電路是通過各種存儲(chǔ)單元來實(shí)現(xiàn)的,因而存儲(chǔ)單元是構(gòu)成時(shí)序邏輯電路不可或缺的因素。存儲(chǔ)單元按照觸發(fā)方式可以分為電平觸發(fā)和邊沿觸發(fā)兩種。 時(shí)序邏輯電路重要標(biāo)志是具有時(shí)鐘脈沖clock,在時(shí)鐘脈沖的上升沿或下降沿的控制下,時(shí)序邏輯電路才能發(fā)生狀態(tài)變化。,常見的時(shí)序邏輯電路有觸發(fā)器, 鎖存器, 移位寄存器, 計(jì)數(shù)器。 觸發(fā)器是邊沿觸發(fā)的存儲(chǔ)單元,只有當(dāng)時(shí)鐘信號(hào)的沿到來時(shí)存儲(chǔ)單元的值才能發(fā)生變化。鎖存器是電平觸

19、發(fā)的存儲(chǔ)單元。一般情況下,鎖存器完成的操作總是可以用觸發(fā)器來實(shí)現(xiàn)的,而觸發(fā)器可以抑制輸入信號(hào)的毛刺,因而在資源允許的情況下,應(yīng)盡量使用觸發(fā)器。例如在FPGA器件中,觸發(fā)器資源非常豐富,那么在設(shè)計(jì)時(shí)就應(yīng)該注意避免鎖存器的出現(xiàn)。 寄存器與鎖存器相比,從寄存數(shù)據(jù)的角度看,二者的功能是相同的,區(qū)別在于:鎖存器一般是由電平信號(hào)來控制,屬于電平敏感型,而寄存器一般由同步時(shí)鐘信號(hào)控制。兩者有不同的使用場合,主要取決于控制方式及控制信號(hào)和數(shù)據(jù)信號(hào)之間的時(shí)序關(guān)系:若數(shù)據(jù)有效滯后于控制信號(hào)有效,則只能使用鎖存器;若數(shù)據(jù)提前于控制信號(hào),并要求同步操作,則可以選擇寄存器來存放數(shù)據(jù)。,觸發(fā)器是構(gòu)成時(shí)序電路的基本單元,

20、有兩種穩(wěn)定的狀態(tài):0狀態(tài)和1狀態(tài),在信號(hào)作用下,觸發(fā)器的狀態(tài)可相互轉(zhuǎn)換。,1. D觸發(fā)器,D觸發(fā)器的特性表,D,Q n+1,0,Q n,0,0,0,1,0,1,0,1,1,1,1,置0,狀態(tài),置1,CP,1. 時(shí)鐘信號(hào) 將時(shí)鐘信號(hào)作為敏感信號(hào),VHDL程序如下: process (時(shí)鐘信號(hào)名) begin if (時(shí)鐘信號(hào)變化條件)then 順序語句; end if; end process; 時(shí)鐘信號(hào)上升沿的VHDL描述如下: if (clk event and clk= 1 ) then 或wait until rising_edge (clk); 時(shí)鐘信號(hào)下降沿的VHDL描述如下: if

21、 clk event and clk= 0 then 或wait until falling_edge (clk),1. D觸發(fā)器,同步復(fù)位信號(hào)的VHDL描述: process (時(shí)鐘信號(hào)名) begin if (時(shí)鐘信號(hào)變化條件)then if (復(fù)位信號(hào)變化條件) then 狀態(tài)復(fù)位語句; else 順序語句; end if; end if; end process;,異步復(fù)位信號(hào)的VHDL描述: process (復(fù)位信號(hào)名,時(shí)鐘信號(hào)名) begin if (復(fù)位信號(hào)變化條件) then 狀態(tài)復(fù)位語句; elsif (時(shí)鐘信號(hào)變化條件)then 順序語句; end if; end pro

22、cess;,2. 復(fù)位信號(hào),1. D觸發(fā)器,1. D觸發(fā)器,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -類似于在芯片內(nèi)部定義一個(gè)數(shù)據(jù)的暫存節(jié)點(diǎn) BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ;

23、END IF; Q = Q1 ; -將內(nèi)部的暫存數(shù)據(jù)向端口輸出 END PROCESS ; END bhv;,Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ; end process; end test1_body;,LIBRARY IEEE; USE I

24、EEE.std_logic_1164.all; Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is begin process (clk,d) begin if rising_edge(clk) then q = d; end if; end process; end test1_body;,They are all the same,DFF,Entity test1 is port (clk : in bit; d : in bit; q : out bit

25、); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk,d) begin if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) beg

26、in if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,比較用5種不同語句的D觸發(fā)器VHDL程序,library ieee; use ieee.std_logic_1164.all; entity asyn_dff is port (clk, d, preset,clr: in std_logic; q: out std_logic); end asyn_dff; architecture behave of asyn_dff is begin process ( clk, preset, clr) begin

27、if (preset = 1 ) then q= 1; elsif (clr= 1) then q= 0; elsif (clkevent and clk= 1) then q=d; end if ; end process; end behave;,1. D觸發(fā)器,異步復(fù)位/置位的D觸發(fā)器,1. D觸發(fā)器,library ieee; use ieee.std_logic_1164.all; entity syn_dff is port (d, clk, reset: in std_logic; q: out std_logic); end syn_dff; architecture beha

28、ve of syn_dff is begin process (clk) begin if rising_edge (clk) then if (reset= 0 ) then q= 0; else q=d; end if; end if; end process; end behave;,帶有低有效同步復(fù)位端reset的D觸發(fā)器,鎖存器是一種用來暫時(shí)保存數(shù)據(jù)的邏輯部件,下面以具有三態(tài)輸出8D鎖存器為例,介紹鎖存器的設(shè)計(jì)方法。 CLR是復(fù)位控制輸入端,當(dāng)CLR=0時(shí),8位數(shù)據(jù)輸出Q7.0=00000000。ENA是使能控制輸入端,當(dāng)ENA=1時(shí),鎖存器處于工作狀態(tài),輸出Q7.0=D7.0;鎖存

29、器的狀態(tài)保持不變。OE是三態(tài)輸出控制端,當(dāng)OE=1時(shí),輸出為高阻態(tài),即Q7.0=ZZZZZZZZ;OE=0時(shí),鎖存器為正常輸出狀態(tài)。,2. 鎖存器設(shè)計(jì),Library ieee; Use ieee.std_logic_1164.all; Entity latch8 is Port (clr,ena,oe: in std_logic; d: in std_logic_vector(7 downto 0); q: out std_logic_vector(7 downto 0); End latch8; Architecture one of latch8 is signal q_temp: st

30、d_logic_vector(7 downto 0); begin,2. 鎖存器設(shè)計(jì),u1:process(clk,clr,ena,oe) begin if clr=0 then q_temp=“00000000”; elsif clkevent and clk=1 then if (ena=1) then q_temp=d; end if; end if; if oe=1 then q=“ZZZZZZZZ”; else q=q_temp; end if; end process; End one;,2. 鎖存器設(shè)計(jì),移位寄存器除了具有存儲(chǔ)數(shù)碼的功能以外,還具有移位功能。移位是指寄存器里的數(shù)據(jù)

31、能在時(shí)鐘脈沖的作用下,依次向左移或向右移。能使數(shù)據(jù)向左移的寄存器稱為左移移位寄存器,反之為右移移位寄存器,能使數(shù)據(jù)向左移也能向右移的寄存器稱為雙向移位寄存器。 下面以8位雙向移位寄存器為例,介紹移位寄存器的設(shè)計(jì)方法。,3. 移位寄存器設(shè)計(jì),在源程序中, D7.0 為數(shù)據(jù)輸入端,CLR是復(fù)位控制輸入端,當(dāng)CLR=0時(shí),移位寄存器被復(fù)位,寄存器的8位輸出Q7.0=00000000;LOD是預(yù)置控制輸入端,當(dāng)LOD=1且時(shí)鐘CLK的上升沿到來時(shí),寄存器狀態(tài)被輸入數(shù)據(jù)D7.0預(yù)置,即Q7.0= D7.0;S是移位方向控制輸入端,當(dāng)S=1時(shí),是右移移位寄存器,在時(shí)鐘脈沖的控制下,寄存器中的數(shù)據(jù)依次向右移

32、,S=0時(shí),是左移移位寄存器;DIR是右移串入輸入信號(hào),當(dāng)寄存器處于右移工作狀態(tài)時(shí),寄存器的最高位Q7從DIR接收右串入數(shù)據(jù);DIL是左移串入輸入信號(hào),當(dāng)寄存器處于左移狀態(tài)時(shí)。寄存器的最低位Q0從DIL接收左串入數(shù)據(jù)。,3. 移位寄存器設(shè)計(jì),Library ieee; Use ieee.std_logic_1164.all; Entity rlshift is Port( clr,lod,clk,s,dir,dil:in bit; d:in bit_vector(7 downto 0); q:buffer bit_vector(7 downto 0); End rlshift; Archite

33、cture one of rlshift is signal q_temp:bit_vector(7 downto 0); begin,3. 移位寄存器設(shè)計(jì),process(clr,clk,lod,s,dir,dil) begin if clr=0 then q_temp=“00000000”; elsif clkevent and clk=1 then if (lod=1) then q_temp=d; elsif (s=1) then for i in 7 downto 1 loop -實(shí)現(xiàn)右移操作 q_temp(i-1)=q(i); end loop; q_temp(7)=dir; el

34、se,3. 移位寄存器設(shè)計(jì),for i in 0 to 6 loop -實(shí)現(xiàn)左移操作 q_temp(i+1)=q(i); end loop; q_temp(0)=dil; end if; end if; q=q_temp; End process; End one;,3. 移位寄存器設(shè)計(jì),LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LO

35、GIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN - 裝載新數(shù)據(jù) REG8 := DIN; ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); END PROCESS; - 輸出最低位 END behav;,帶

36、有并行置位的移位寄存器,(2)第二個(gè)時(shí)鐘,以及以后的時(shí)鐘信號(hào)都是移位時(shí)鐘,(3)第二個(gè)時(shí)鐘后,QB輸出了右移出的第2個(gè)位1,(1)在第一個(gè)時(shí)鐘到來時(shí),LOAD恰為高電平,工作時(shí)序,計(jì)數(shù)器是在數(shù)字系統(tǒng)中使用最多的時(shí)序電路,它不僅能用于對時(shí)鐘脈沖計(jì)數(shù),還可以用于分頻、定時(shí)、產(chǎn)生節(jié)拍脈沖和脈沖序列以及進(jìn)行數(shù)字運(yùn)算等。 按照計(jì)數(shù)方法分類,計(jì)數(shù)器可以分為加法計(jì)數(shù)器,減法計(jì)數(shù)器和可逆計(jì)數(shù)器(加/減法計(jì)數(shù)器)。 按照計(jì)數(shù)器中各個(gè)觸發(fā)器是否同時(shí)翻轉(zhuǎn)分類,計(jì)數(shù)器可以分為異步計(jì)數(shù)器和同步計(jì)數(shù)器。異步計(jì)數(shù)器是將低位觸發(fā)器的輸出作為高位觸發(fā)器的輸入時(shí)鐘信號(hào),翻轉(zhuǎn)時(shí)刻不同。而同步計(jì)數(shù)器是將同一個(gè)時(shí)鐘輸入到觸發(fā)器,翻轉(zhuǎn)時(shí)

37、刻相同。 按照計(jì)數(shù)器的計(jì)數(shù)容量(連續(xù)輸出1之間所間隔的時(shí)鐘數(shù))不同,分為八進(jìn)制、十進(jìn)制等。,4. 計(jì)數(shù)器,用VHDL設(shè)計(jì)4位計(jì)數(shù)器,4位鎖存器,組合電路加1器,鎖存信號(hào),輸出反饋,綜合后的計(jì)數(shù)器電路RTL圖,LIBRARY ieee; USE ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY ls160 IS PORT( clk:in std_logic; count: buffer std_logic_vector(3 downto 0); tc:out std_logic); END ls160; ARCHIT

38、ECTURE behave OF ls160 IS BEGIN tc=1 when (count=1001 ) else 0;,4. 計(jì)數(shù)器,模10計(jì)數(shù),cale: process(clk) begin if(rising_edge(clk) then if(count=1001)then count=0000; else count=count+1; end if; end if; END PROCESS; END behave;,4. 計(jì)數(shù)器,模10計(jì)數(shù),4. 計(jì)數(shù)器,帶有復(fù)位和時(shí)鐘使能的10進(jìn)制計(jì)數(shù)器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

39、USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10; ARCHITECTURE behav OF CNT10 IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0)

40、 ; -計(jì)數(shù)器復(fù)位 ELSIF CLKEVENT AND CLK=1 THEN -檢測時(shí)鐘上升沿 IF EN = 1 THEN -檢測是否允許計(jì)數(shù) IF CQI 0);-大于9,計(jì)數(shù)值清零 END IF; END IF; END IF; IF CQI = 1001 THEN COUT = 1; -計(jì)數(shù)大于9,輸出進(jìn)位信號(hào) ELSE COUT = 0; END IF; CQ = CQI; -將計(jì)數(shù)值向端口輸出 END PROCESS; END behav;,RTL電路,工作時(shí)序,library ieee; use ieee.std_logic_1164.all; use ieee.std_log

41、ic_unsigned.all; entity cnt60 is port (clk, reset: in std_logic; co : out std_logic; qh,ql : buffer std_logic_vector (3 downto 0); end cnt60; architecture behave of cnt60 is begin co = 1 when ( qh= 0101 and ql= 1001 ) else 0;,4. 計(jì)數(shù)器,模60計(jì)數(shù),process ( clk, reset) begin if (reset= 0) then qh = 0000; ql=

42、 0000; elsif (clkevent and clk= 1 ) then if (ql=9) thenql= 0000; if (qh=5) then qh= 0000; else qh=qh+1; end if; else ql=ql+1; end if; end if; end process; end Behave;,4. 計(jì)數(shù)器,ql:=ql+1; IF (ql=10) THEN ql := 0 ; qh := qh + 1; IF ( qh = 6) THEN qh := 0; CO=1; ELSE CO=0; END IF ; END IF ;,模60計(jì)數(shù),library

43、ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cdu24 is port ( clk:in std_logic; co : out std_logic; mm :out std_logic_vector (7 downto 0); end cdu24 ; architecture aa of cdu24 is signal out1,out2 :integer range 0 to 9; signal out3,out4 :std_

44、logic_vector (3 downto 0); begin process(clk) begin if clkevent and clk=1 then if (out2=2) and (out1=3) then,4. 計(jì)數(shù)器,模24計(jì)數(shù),out1=0; out2=0; co=1; else out1=out1+1; co=0; if out1=9 then out1=0; out2=out2+1; end if; end if; end if; out3= conv_std_logic_vector(out1,4); out4= conv_std_logic_vector(out2,4)

45、; mm=out4 ,4. 計(jì)數(shù)器,模24計(jì)數(shù),4. 計(jì)數(shù)器,5 分頻器,分頻器在數(shù)字系統(tǒng)中經(jīng)常使用,其設(shè)計(jì)方案也有很多種。可以借助計(jì)數(shù)器的進(jìn)位輸出端產(chǎn)生分頻信號(hào),例如,用六十進(jìn)制計(jì)數(shù)器的輸出信號(hào)產(chǎn)生六十分頻信號(hào)。對于分頻信號(hào)而言,無論取自加法計(jì)數(shù)器的進(jìn)位輸出還是減法計(jì)數(shù)器的借位輸出分頻結(jié)果都是一樣的。 例如,時(shí)鐘信號(hào)的頻率為1KHz,利用計(jì)數(shù)器產(chǎn)生的分頻信號(hào)頻率如下表所示,其分頻信號(hào)的頻率分布不均勻,無法獲得1KHz500Hz之間的分頻信號(hào)。,為了解決計(jì)數(shù)器產(chǎn)生的分頻信號(hào)頻率分布不均勻的問題,下面提供一種小數(shù)分頻電路的設(shè)計(jì)方案。例如,時(shí)鐘信號(hào)的頻率為1KHz,需要產(chǎn)生750Hz的分頻信號(hào),計(jì)

46、算其分頻比為6/8。 設(shè)計(jì)思路是在8個(gè)時(shí)鐘信號(hào)中保留6個(gè)時(shí)鐘信號(hào)。具體做法是,首先設(shè)計(jì)一個(gè)8進(jìn)制計(jì)數(shù)器,計(jì)數(shù)器的輸出信號(hào)設(shè)計(jì)成2個(gè)0、6個(gè)1的形式,將該輸出信號(hào)與時(shí)鐘信號(hào)進(jìn)行邏輯與運(yùn)算,與運(yùn)算的結(jié)果就是希望產(chǎn)生的分頻信號(hào)。 例:用VHDL設(shè)計(jì)一個(gè)6/8分頻系數(shù)的分頻電路。計(jì)數(shù)器的功能表如下表所示。,根據(jù)功能表設(shè)計(jì)的程序如下: Library ieee; Use ieee.std_logic_1164.all; Entity fre is Port(clk,reset:in std_logic; outclk:out std_logic); End fre; Architecture be of

47、 fre is type fsm_st is(s0,s1,s2,s3,s4,s5,s6,s7); signal current_state,next_state:fsm_st; signal y,y1: std_logic; begin,Reg:process(reset,clk) begin if reset=1 then current_state y y y y y y y y=1;next_state=s0; end case;,If falling_edge(clk) then y1=y; End if; outclk=y1 and clk; End process; End be;

48、 分頻器的仿真波形如圖??梢钥闯觯?個(gè)周期的時(shí)鐘信號(hào)產(chǎn)生6個(gè)周期的輸出時(shí)鐘,輸出信號(hào)相對于時(shí)鐘而言,該分頻電路產(chǎn)生的是6/8分頻信號(hào)。,6 雙向電路和三態(tài)控制電路設(shè)計(jì),( 1 ) 三態(tài)門設(shè)計(jì),【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END tri_s ; ARCHITECTURE

49、 bhv OF tri_s IS BEGIN PROCESS(enable,datain) BEGIN IF enable = 1 THEN dataout = datain ; ELSE dataout =ZZZZZZZZ ; END IF ; END PROCESS; END bhv;,( 2) 雙向端口設(shè)計(jì),【例】 library ieee; use ieee.std_logic_1164.all; entity tri_state is port (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : ino

50、ut std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0); end tri_state; architecture body_tri of tri_state is begin process(control,q,in1) begin if (control = 0) then x = q ; else q = in1; x=ZZZZZZZZ ; end if; end process; end body_tri;,雙向端口設(shè)計(jì),雙向端口設(shè)計(jì),【例】 (以上部分同上例) process(control,q,in1

51、) begin if (control=0) then x = q ; q = ZZZZZZZZ; else q = in1; x =ZZZZZZZZ; end if; end process; end body_tri;,雙向端口設(shè)計(jì),(3) 三態(tài)總線電路設(shè)計(jì),LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 IS port ( input3, input2, input1, input0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0); enable : IN STD_LOGIC_VECTOR(1

52、DOWNTO 0); output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 IS BEGIN PROCESS(enable,input3, input2, input1, input0 ) BEGIN IF enable = 00 THEN output Z); END IF ; IF enable = 01 THEN output Z); END IF ; IF enable = 10 THEN output Z); END IF ; IF

53、enable = 11 THEN output Z); END IF ; END PROCESS; END multiple_drivers;,三態(tài)總線電路設(shè)計(jì),library ieee; use ieee.std_logic_1164.all; entity tri is port (ctl : in std_logic_vector(1 downto 0); datain1, datain2,datain3, datain4 : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) ); end tri;

54、 architecture body_tri of tri is begin q Z) ; q Z) ; q Z) ; q Z) ; end body_tri;,【例】,7.存儲(chǔ)器的設(shè)計(jì),(1)只讀存儲(chǔ)器 ROM存儲(chǔ)單元中的信息可一次寫入、多次讀出。且當(dāng)ROM存儲(chǔ)芯片掉電時(shí),存儲(chǔ)單元中的信息不會(huì)消失,在電路系統(tǒng)中常用ROM存放固定的程序和數(shù)據(jù)。 (2) 隨機(jī)讀寫存儲(chǔ)器 RAM有讀與寫兩種操作,而且在讀寫上對時(shí)間有較嚴(yán)格的要求。下面給出一個(gè)8X8的雙口SRAM的參數(shù)化的程序。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGI

55、C_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY dpram IS generic(width:integer:=8; depth:ingeter:=8; adder:integer:=3); PORT(datain:IN STD_LOGIC_VECTOR(width-1 DOWNTO 0); dataout:out STD_LOGIC_VECTOR(width-1 DOWNTO 0); clock,we,re:IN STD_LOGIC; wadd:in STD_LOGIC_VECTOR(adder-1 DOWNTO 0); radd:

56、in STD_LOGIC_VECTOR(adder-1 DOWNTO 0); END dpram; ARCHITECTURE aa OF dpram IS Type mem is array(0 to depth-1) of STD_LOGIC_VECTOR(width-1 DOWNTO 0); Signal ramtmp:mem; BEGIN,PROCESS (clock)寫進(jìn)程 BEGIN If (clockevent and clock=1) then if(we=1) then ramtmp(conv_integer(wadd)=datain; End if; End if; End

57、process; PROCESS (clock)讀進(jìn)程 BEGIN If (clockevent and clock=1) then if(re=1) then dataout=ramtmp(conv_integer(radd); End if; End if; End process; End aa;,(3)先進(jìn)先出存儲(chǔ)器 以上三種存儲(chǔ)器都可以采用定制的方式使用宏功能模塊來設(shè)計(jì)輸入。 只要通過設(shè)置參數(shù)便可方便地將宏功能模塊定制為不同的大小。具體的后面詳細(xì)介紹。,7.3 有限狀態(tài)機(jī)設(shè)計(jì) 有限狀態(tài)機(jī)是設(shè)計(jì)時(shí)序邏輯電路的重要描述方法,是實(shí)現(xiàn)高效率高可靠性邏輯控制的重要途徑。 因?yàn)闋顟B(tài)機(jī)是按照預(yù)先設(shè)計(jì)的狀態(tài)順序運(yùn)行的,所以狀態(tài)機(jī)的順序控

溫馨提示

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

評論

0/150

提交評論