第五章基本數(shù)字電路的EDA實現(xiàn)_第1頁
第五章基本數(shù)字電路的EDA實現(xiàn)_第2頁
第五章基本數(shù)字電路的EDA實現(xiàn)_第3頁
第五章基本數(shù)字電路的EDA實現(xiàn)_第4頁
第五章基本數(shù)字電路的EDA實現(xiàn)_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、基本數(shù)字電路的EDA實現(xiàn) 基本門電路; 觸發(fā)器; 編碼器; 譯碼器; 計數(shù)器; 移位寄存器; 有限狀態(tài)機用查表法和邏輯算符法實現(xiàn)表 所示的真值表。 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY gates IS PORT( a,b: IN STD_LOGIC; cand,cor,cxor:OUT STD_LOGIC);END gates;ARCHITECTURE a OF gates ISSIGNAL din:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN dincand=0;cor=0;cxorcand=0;cor=1;

2、cxorcand=0;cor=1;cxorcand=1;cor=1;cxornull; END CASE; END PROCESS;END a;描述邏輯功能時直接使用了AND、OR、XOR等邏輯算符LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY gates IS PORT(a,b: IN STD_LOGIC; cand,cor,cxor:OUT STD_LOGIC);END gates;ARCHITECTURE a OF gates ISSIGNAL din:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN cand=a AN

3、D b; cor=a OR b; cxor= a XOR b;END a; 上面兩種方法不同,但均能得到相同的邏輯結果,二者的仿真結果均如圖5-2所示。 將前面的程序通過系統(tǒng)編程下載入本書配套的CPLD電路板進行硬件驗證,按照以下步驟進行。(1)確定管腳對應關系: 輸入信號ab與按鍵K1K0一一對應;輸出信號cand、cor、cxor分別與發(fā)光二極管D2D0一一對應。(2)由QUARTUSII進行管腳分配: K1K0在MAXII芯片上對應的管腳號依次為2726;D2D0在MAXII芯片上對應的管腳號依次為8688。(3)電平定義以D2D0的亮代表輸出信號對應位的電平為1、D2D0的“滅”代表輸

4、出信號對應位的電平為0;按鍵K1K0按下時相當于輸入信號為低電平,不按時相當輸入信號為高電平。(4)輸入驗證以只按下K0為例,表示輸入信號a=0而b=1,此時與門對應的輸出二極管D2應處于滅狀態(tài),或門對應的輸出二極管D1應處于亮狀態(tài),異或門對應的輸出二極管D0應處于亮狀態(tài),程序中對應的其他情況同理。 觸發(fā)器的設計觸發(fā)器的設計 觸發(fā)器為具有記憶功能的裝置,可儲存兩種不同的狀態(tài):“0”或“1”。借助輸入狀態(tài)的改變,可改變儲存的狀態(tài),但由于系統(tǒng)需要同步變化,故通常用計時脈沖的上升沿觸發(fā)儲存數(shù)據(jù)的改變,其他時刻觸發(fā)器是被“鎖住”的。觸發(fā)器常被利用在計數(shù)器,寄存器等場合。 D觸發(fā)器是觸發(fā)器中最常用的觸發(fā)

5、器,其他的數(shù)字電路包括其他觸發(fā)器都可以由D觸發(fā)器外加一部分組合邏輯電路轉換而來?;居|發(fā)器的特征方程為 Q n+1 = D異步復位/置位端、同步使能D觸發(fā)器真值表 從表可以看出,當預置位端prn(或復位端clrn)有效時(低電平),無論時鐘和數(shù)據(jù)輸入信號d的電平情況,輸出都為高電平(或低電平)。而當二者同為低電平,即預置位端與復位端同時有效時,輸出不定,用“X”表示。當預置位端PRN與復位端CLRN均無效時,隨著上升沿的到來,輸出邏輯與輸入端d邏輯值相同。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dffe2 ISPORT( d ,clk ,

6、clrn ,prn ,ena :INSTD_LOGIC; q :OUT STD_LOGIC );END dffe2;ARCHITECTURE a OF dffe2 ISBEGIN PROCESS(clk,prn,clrn,ena,d) BEGIN IF prn=0 THEN q=1;ELSIF clrn=0 THEN q=0;ELSIF clkevent AND clk=1 THEN IF ena=1 then q=d; END IF; END IF; END PROCESS;END a; 將該程序下載入本書配套的CPLD電路板進行硬件驗證,按照以下步驟進行。(1)確定管腳對應關系:輸入信號p

7、rn、clrn、ena、d與按鍵K0K3一一對應;輸出信號q 與發(fā)光二極管D0對應。(2)由QUARTUSII進行管腳分配: K0K3在MAXII芯片上對應的管腳號依次為2629;D0在MAXII芯片上對應的管腳號為88。(3)電平定義 :以D0的亮代表輸出信號對應位的電平為1、D0的“滅”代表輸出信號對應位的電平為0;按鍵K3K0按下時相當于輸入信號為低電平, 不按時相當輸入信號為高電平。(4)按照表5-3列舉的情況按鍵,可得到相應的結果。 如當K3按下時,表明預置位信號有效,此時只要K2不按,則無論其他按鍵是否按下,發(fā)光二極管D0必定為亮狀態(tài),表明D觸發(fā)器的輸出為 1。編碼器的設計編碼器的

8、設計 數(shù)字系統(tǒng)所需處理的輸入信號經(jīng)常只能提供一位二進制位,即高電平或低電平信號,而一個系統(tǒng)的輸入電平信號一般有很多,數(shù)字系統(tǒng)怎樣區(qū)分這些高、低電平輸入信號,就是編碼器所需解決的問題。所謂編碼,就是取一定二進制位數(shù)為一組,把每組二進制碼按一定的規(guī)律編排,使每組代碼代表某個輸入信號。當多個信號同時到達數(shù)字系統(tǒng)要求處理時,需要根據(jù)事先擬定的處理順序先后處理。用來判斷每個信號的優(yōu)先級別并進行編碼的邏輯單元電路稱為優(yōu)先編碼器。BCD編碼器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder ISPORT(d:IN STD_LOGIC_VECTOR(0

9、 to 9); b:OUT STD_LOGIC_VECTOR(3 downto 0);END coder;ARCHITECTURE one OF coder ISBEGINWITH d select bbbbbbbbbbbnull;END CASE;END PROCESS;END one;將該程序下載入本書配套的CPLD電路板進行硬件驗證,按照以下步驟進行。(1)確定管腳對應關系:輸入信號d9d0與按鍵K9K0對應;輸出信號b3b0與發(fā)光二極管D3D0對應。(2)由QUARTUSII進行管腳分配: K0K9在MAXII芯片上對應的管腳號依次為2630,3337;D0D3在MAXII芯片上對應的

10、管腳號依次為8184。(3)電平定義 以D3D0的亮代表輸出信號對應位的電平為1、D3D0的“滅”代表輸出信號對應位的電平為0;按鍵K9K0按下時相當于輸入信號為低電平。(4)輸入驗證以按下K1為例,表示輸入信號d1=0,此時輸出應顯示為“0010”,程序中對應的其他情況同理。譯碼器的設計譯碼器的設計 譯碼是編碼的逆過程,其功能是根據(jù)輸入的二進制編碼決定哪路輸出信號有效。一般這種邏輯單元電路的輸入是二進制編碼,而輸出是相互獨立的多路輸出信號。也可將一種編碼作為輸入,另一種編碼作為輸出進行譯碼,從而實現(xiàn)碼制轉換的功能。具有譯碼功能的邏輯單元電路稱為譯碼器。二進制譯碼器二進制譯碼器 二進制譯碼器也

11、稱變量譯碼器,其功能是把輸入的N位二進制碼變換為2N個互相獨立的輸出。以3-8譯碼器為例,這種譯碼器輸入3位二進制編碼,輸出8路信號,根據(jù)輸入的3位編碼決定輸出8路信號哪路有效。不帶使能信號的3-8譯碼器VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder ISPORT(c,b,a:IN STD_LOGIC; y:OUT STD_LOGIC_VECTOR(7 downto 0);END decoder;ARCHITECTURE one OF decoder ISBEGIN y(0)= 0 WHEN (c= 0) and (b

12、= 0) and (a = 0) else 1; y(1)= 0 WHEN (c= 0) and (b= 0) and (a = 1) else 1; y(2) = 0 WHEN (c= 0) and (b= 1) and (a = 0) else 1; y(3)= 0 WHEN (c= 0) and (b= 1) and (a = 1) else 1; y(4) = 0 WHEN (c= 1) and (b= 0) and (a = 0) else 1; y(5) = 0 WHEN (c= 1) and (b= 0) and (a = 1) else 1; y6) = 0 WHEN (c=

13、1) and (b= 1) and (a = 0) else 1; y(7) = 0 WHEN (c= 1) and (b= 1) and (a = 1) else 1;END one;帶使能功能的3-8譯碼器VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder ISPORT(c,b,a:IN STD_LOGIC; s:IN STD_LOGIC_VECTOR(3 downto 1); y:OUT STD_LOGIC_VECTOR(7 downto 0);END decoder;ARCHITECTURE one OF dec

14、oder ISSIGNAL din:STD_LOGIC_VECTOR(2 downto 0);BEGINdin=c&b&a; y(0)= 0 WHEN din =000 and s=001 ELSE 1; y(1)= 0 WHEN din =001 and s=001 ELSE 1; y(2)= 0 WHEN din =010 and s=001 ELSE 1; y(3)= 0 WHEN din =011 and s=001 ELSE 1; y(4)= 0 WHEN din =100 and s=001 ELSE 1; y(5)= 0 WHEN din =101 and s=0

15、01 ELSE 1; y(6)= 0 WHEN din =110 and s=001 ELSE 1; y(7)= 0 WHEN din =111 and s=001 ELSE 1;END one;將該程序下載入本書配套的CPLD電路板進行硬件驗證,按照以下步驟進行。 (1)確定管腳對應關系: 輸入信號A,B,C與按鍵K0K2一一對應;S1_S3與按鍵K3K5一一對應;輸出信號Y0Y7與發(fā)光二極管D0D7一一對應。 (2)由QUARTUSII進行管腳分配:K0K5在MAXII芯片上對應的管腳號依次為26_30,33;D0D7在MAXII芯片上對應的管腳號依次為88_81。 (3)電平定義 以D0

16、D7的亮代表輸出信號對應位的電平為1、D0D7的“滅”代表輸出信號對應位的電平為0;按鍵K0K5按下時相當于輸入信號為低電平。 (4)輸入驗證 當S1_S3為“001”時,以按下K0為例,表示輸入信號A=0,此時輸出應顯示為“11111101”,程序中對應的其他情況同理。數(shù)碼顯示譯碼器數(shù)碼顯示譯碼器數(shù)碼管包括熒光數(shù)碼管、發(fā)光數(shù)碼管、液晶數(shù)碼管等,其中熒光數(shù)碼管為共陰極結構,液晶數(shù)碼管無極性,而半導體數(shù)碼管分共陽和共陰極兩類。 半導體數(shù)碼管內(nèi)部為多個半導體發(fā)光二極管,圖5-9給出了共陰極半導體數(shù)碼管外觀及內(nèi)部結構圖。共陰極半導體數(shù)碼管使用時,所有的陰極連到地,則某個二極管陽極接高電平時,相應的二

17、極管發(fā)光。各個發(fā)光二極管相互獨立,可以同時發(fā)光,按照一定的規(guī)律可以組合為各種不同的符號,如19,AF等。例如,為了顯示數(shù)字2,按圖5-9所示的排列,需要abged這5個發(fā)光二極管發(fā)光,而其它發(fā)光二極管滅,則ah這8個發(fā)光二極管的陽極分別需接“11011010”。表5-6是共陰級8段數(shù)碼管的真值表,注意其中的H為小數(shù)點,表中假設不需要小數(shù)點點亮,因而H始終輸出為低電平。 描述共陰極半導體數(shù)碼管顯示譯碼的VHDL程序,程序中輸入端口為bcdin,輸出端口為ah。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY seg8dec IS PORT(bcdin

18、 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); a,b,c,d,e,f,g,h : OUT STD_LOGIC);END seg8dec;ARCHITECTURE one OF seg8dec ISSIGNAL seg : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN WITH bcdin SELECT seg = 11111100 WHEN X0, 01100000 WHEN X1, 11011010 WHEN X2, 11110010 WHEN X3, 01100110 WHEN X4, 10110110 WHEN X5, 10111110

19、WHEN X6, 11100000 WHEN X7, 11111100 WHEN X8, 11110110 WHEN X9, 11101110 WHEN Xa, 11111110 WHEN Xb, 10011100 WHEN Xc, 11111100 WHEN Xd, 10011110 WHEN Xe, 10001110 WHEN Xf, 00000000 WHEN OTHERS; a=seg(7); b=seg(6);c=seg(5); d=seg(4); e=seg(3);f=seg(2); g=seg(1); h=seg(0);END one; 將該程序下載入本書配套的CPLD電路板進行

20、硬件驗證,按照以下步驟進行。 (1)確定管腳對應關系: 輸入信號bcdin(0_3)與按鍵K0K3一一對應;輸出信號abcdefgh與數(shù)碼管的8個引腳AG、DP一一對應。 (2)由QUARTUSII進行管腳分配: K0K3在MAXII芯片上對應的管腳號依次為26_29;數(shù)碼管的8個引腳AG、DP在MAXII芯片上對應的管腳號依次為1_8。 (3) 觀察數(shù)碼管顯示的內(nèi)容是否為輸入指定的數(shù)字。 (4)輸入驗證; 以按下K3、而其他鍵不按下為例,表示輸入信號bcdin=“0111”,此時輸碼管應顯示為“7”,程序中對應的其他情況同理。計數(shù)器的設計 計數(shù)器按照按工作原理和使用情況分可分為很多種類,如最

21、基本的計數(shù)器、帶清零端(包括同步清零和異步清零)計數(shù)器、能并行預加載初始計數(shù)值的計數(shù)器、各種進制的計數(shù)器(如12進制、60進制)等。帶使能、清零、預置功能的計數(shù)器帶使能、清零、預置功能的計數(shù)器 計數(shù)器最基本的功能是計數(shù),一般是從零開始計數(shù),但有時計數(shù)器不需要從0開始累計計數(shù),而需要從某個數(shù)開始往前或往后計數(shù)。這時就需要有控制信號能在計數(shù)開始時控制計數(shù)器從期望的初始值開始計數(shù)。此外,有時需要對計數(shù)過程中的計數(shù)器進行清零操作,因此需要設置清零端。大多數(shù)情況下,計數(shù)器需要指定一個開始計數(shù)的時刻,這個工作一般由計數(shù)器的使能信號控制。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1

22、164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt_e_c_p IS PORT(f10MHz:IN STD_LOGIC; clr,ena,load:IN STD_LOGIC; pre_din:IN STD_LOGIC_VECTOR(7 DOWNTO 0); qout:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END cnt_e_c_p; ARCHITECTURE a OF cnt_e_c_p IS SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_L

23、OGIC; BEGIN PROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN qout=00000000;ELSIF ena=1 THEN IF load=1 THEN qout=pre_din;ELSE qout=qout+1;END IF; END IF;

24、 END IF; END PROCESS; END a ;可逆計數(shù)器可逆計數(shù)器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY countupdown IS PORT(f10MHz:IN STD_LOGIC; clr,en,load:IN STD_LOGIC; din:IN STD_LOGIC_VECTOR(7 DOWNTO 0); updown:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END countupdown;AR

25、CHITECTURE a OF countupdown IS SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_LOGIC;BEGIN PROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS;PROCESS(clk)BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000

26、000;ELSIF EN=1 THEN IF load=1 THEN q=din;ELSIF updown=1 THEN q=q+1;ELSE q=q-1;END IF; END IF; END IF; END PROCESS;END a;進制計數(shù)器進制計數(shù)器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count128 IS PORT(f10MHz :IN STD_LOGIC; clr,en,load:IN STD_LOGIC; din :IN STD_LOGIC_VECTOR(

27、7 DOWNTO 0); q :BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END count128;ARCHITECTURE a OF count128 IS SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_LOGIC;BEGIN PROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS;PR

28、OCESS(clk)BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000;ELSIF q=01111111 THEN -確定進制 q=00000000; ELSIF EN=1 THEN IF load=1 THEN q=din;ELSE q=q+1;END IF; END IF; END IF; END PROCESS;END a;移位寄存器的設計移位寄存器的設計 數(shù)字系統(tǒng)中,經(jīng)常要用到可以存放二進制數(shù)據(jù)的部件,這種部件稱為數(shù)據(jù)寄存器。從硬件上看,寄存器就是一組可儲存二進制數(shù)的觸發(fā)器,每個觸發(fā)器都可儲存一位二進制位,比如12位寄存器

29、用12個D觸發(fā)器組合即可實現(xiàn)。當時鐘有效邊沿到達時,一組觸發(fā)器的輸入端同時移入各觸發(fā)器的輸出端,時鐘撤銷后各觸發(fā)器的輸出不變,除非下一有效邊沿到來時輸入端數(shù)據(jù)有變化。這種寄存器稱為基本的數(shù)據(jù)寄存器。串入串出移位寄存器串入串出移位寄存器 串入串出移位寄存器原理圖如圖5-14所示,8位移位寄存器由8個D觸發(fā)器串聯(lián)構成,在時鐘信號的作用下,數(shù)據(jù)從低位向高位移動。 設計這種串入串出移位寄存器,其實體應提供串行數(shù)據(jù)輸入端 din、時鐘輸入端 Clk和串行數(shù)據(jù)輸出端 dout。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shifter1 IS PORT(

30、din,f10MHz:IN STD_LOGIC; dout :OUT STD_LOGIC);END shifter1;ARCHITECTURE one OF shifter1 IS COMPONENT DFF -D觸發(fā)器作為元件引入PORT(d, clk:IN STD_LOGIC; q :OUT STD_LOGIC); END COMPONENT;SIGNAL dtmp:STD_LOGIC_VECTOR(8 downto 0); SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_LOGIC;BEGIN PROCESS(f10MHz)

31、BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; dtmp(0)dtmp(i),clk=clk ,q=dtmp(i+1) ); END GENERATE; dout=dtmp(8);END one;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift1 IS PORT(din,f10MHz:in STD_LOGIC; dout :out STD_LOG

32、IC);END shift1;ARCHITECTURE a OF shift1 ISSIGNAL dtmp:STD_LOGIC_VECTOR(7 downto 0);BEGINPROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; PROCESS(clk,din) BEGINIF clkevent AND clk=1 THENdtmp(0)=din;dtmp(7 DOWNTO 1

33、)=dtmp(6 DOWNTO 0); dout=dtmp(7); END IF; END PROCESS;END a;同步預置數(shù)串行輸出移位寄存器同步預置數(shù)串行輸出移位寄存器同步預置移位寄存器綜合了基本寄存器和串入串出移位寄存器的邏輯功能,即它可以將一組二進制數(shù)并行得送入一組寄存器,然后把這些數(shù)據(jù)串行地從寄存器內(nèi)輸出來,此時可稱之為“并入串出”移位寄存器。這種寄存器也可直接從串行輸入端串行地輸出一組二進制數(shù),并將其串行輸出。 一個同步預加載串行輸入輸出移位寄存器應具備的端口包括串行數(shù)據(jù)輸入端din、并行數(shù)據(jù)輸入端dload、時鐘脈沖輸入端clk、并行加載控制端 load和串行數(shù)據(jù)輸出端 do

34、ut。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift3 IS PORT(din,f10MHz,load :IN STD_LOGIC; dout :OUT STD_LOGIC_VECTOR(7 DOWNTO 0); dload :IN STD_LOGIC_VECTOR(7 DOWNTO 0);END shift3;ARCHITECTURE a OF shift3 ISSIGNAL dtmp:STD_LOGIC_VECTOR(7 downto 0);SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNA

35、L clk:STD_LOGIC;BEGINPROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF load=1 THEN dtmp=dload; ELSE dtmp(7 DOWNTO 0)=dtmp(6 downto 0)&din; END IF; END IF; dout=

36、dtmp; END PROCESS;END a;循環(huán)移位寄存器 循環(huán)移位寄存器是指移位過程中,移出的一位數(shù)據(jù)從構成循環(huán)移位寄存器的一端輸出,同時又從另一端輸入進該移位寄存器繼續(xù)參與移位。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY csr IS PORT(load,f10MHz:IN STD_LOGIC; data :IN STD_LOGIC_VECTOR(4 downto 0); dout :BUFFER STD_LOGIC_VECTOR(4 downto 0);END csr;ARCHITECTURE one OF csr IS SIGNA

37、L dtmp:STD_LOGIC;SIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_LOGIC;BEGINPROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; PROCESS(clk) BEGINIF clkevent AND clk=1 THEN IF load=1 THEN dout=data;-預置初值ELSEd

38、out(4 DOWNTO 1)=dout(3 DOWNTO 0); dout(0)=dout(4); -將最高位移向最低位 END IF;END IF; END PROCESS;END one ; 該循環(huán)移位寄存器具備的端口包括串行數(shù)據(jù)輸入端 din,并行數(shù)據(jù)輸入端data,脈沖輸入端clk、并行加載數(shù)據(jù)端 load以及移位輸出端 dout。該程序的功能是將預置入該寄存器的數(shù)據(jù)進行循環(huán)移位,移位方向由低位向高位移,而最高位移向最低位。雙向移位寄存器 雙向移位寄存器主要邏輯功能體現(xiàn)在能從高位向低位移動,也能從低位向高位移動,為實現(xiàn)這一功能,必然要設置移動模式控制端。LIBRARY IEEE;US

39、E IEEE.STD_LOGIC_1164.ALL;ENTITY shift6 IS PORT (predata :IN STD_LOGIC_VECTOR(5 downto 0); dsl,dsr,reset,f10MHz :IN STD_LOGIC; m1,m0 :IN STD_LOGIC; dout :BUFFER STD_LOGIC_VECTOR(5 downto 0);END shift6;ARCHITECTURE behave OF shift6 ISSIGNAL cnt:INTEGER RANGE 0 TO 10000000; SIGNAL clk:STD_LOGIC;BEGINP

40、ROCESS(f10MHz) BEGIN IF f10MHzEVENT AND f10MHz=1 THEN IF cnt=4999999 THEN cnt=0;clk=NOT clk;ELSE cnt=cnt+1;END IF; END IF; END PROCESS; PROCESS(clk,reset) BEGIN IF(clkEVENT AND clk=1)THEN IF (reset=1) THEN dout0); ELSE IF m1=0 THEN IF m0=0 THEN NULL; -模式00 ELSE dout=dsr&dout(5 downto 1);-模式01 END IF; ELSIF m0=0 THEN -模式10 dout=dout(4 downto 0)&dsl; ELSE dout=predata; -模式11 END IF; END IF; END IF; END PROCESS;END behave; 該雙向移位寄存器,該程序的的端口有預置數(shù)據(jù)輸入端predata、脈沖輸入端clk、移位寄存器輸出端 dout、工作模式控制端m1與m0、左移(高位向低位)串行數(shù)據(jù)輸入dsl、右移串行數(shù)據(jù)輸入dsr和寄存器復位端:re

溫馨提示

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

評論

0/150

提交評論