基于QuartusII軟件的數(shù)字時鐘設(shè)計(共14頁)_第1頁
基于QuartusII軟件的數(shù)字時鐘設(shè)計(共14頁)_第2頁
基于QuartusII軟件的數(shù)字時鐘設(shè)計(共14頁)_第3頁
基于QuartusII軟件的數(shù)字時鐘設(shè)計(共14頁)_第4頁
基于QuartusII軟件的數(shù)字時鐘設(shè)計(共14頁)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實驗名稱:數(shù)字時鐘設(shè)計姓名:楊 龍 成 班級: 電子與通信工程 學(xué)號: 成績: 一、實驗?zāi)康?.掌握各類計數(shù)器及它們相連的設(shè)計方法;2.掌握多個數(shù)碼管顯示的原理與方法;3.掌握模塊化設(shè)計方式;4.掌握用VHDL語言的設(shè)計思想以及整個數(shù)字系統(tǒng)的設(shè)計。二、實驗內(nèi)容 1. 設(shè)計要求 1)具有時、分、秒計數(shù)顯示功能,在數(shù)碼管顯示00:00:0023:59:59,以24小時循環(huán)計時。 2)完成可以計時的數(shù)字時鐘時鐘計數(shù)顯示時有LED燈的花樣顯示。 3)具有調(diào)節(jié)小時、分鐘及清零的功能。 4)具有整點報時功能。 2. 性能指標及功能設(shè)計 1)時鐘計數(shù):完成時、分、秒的正確計時并且顯

2、示所計的數(shù)字;對秒、分60進制計數(shù),時鐘24進制計數(shù),并且在數(shù)碼管上顯示數(shù)值。 2)時間設(shè)置:手動調(diào)節(jié)分鐘、小時,可以對所設(shè)計的時鐘任意調(diào)時間??梢酝ㄟ^實驗板上的鍵7和鍵4進行任意的調(diào)整,因為時鐘信號均是1HZ的,所以LED燈每變化一次就來一個脈沖,即計數(shù)一次。 3)清零功能:reset為復(fù)位鍵,低電平時實現(xiàn)清零功能,高電平時正常計數(shù)。 4)蜂鳴器在整點時有報時信號產(chǎn)生,產(chǎn)生“滴答.滴答”的報警聲音。 5)根據(jù)進位情況,LED燈在時鐘顯示時有花樣顯示信號產(chǎn)生。 3. 系統(tǒng)方框圖數(shù)字時鐘 控制單元時調(diào)整分調(diào)整使能端信號CLK信號時顯示分顯示秒顯示24進制60進制60進制LED顯示整點報時花樣顯示

3、三、設(shè)計原理和過程 3.1 硬件設(shè)計本設(shè)計使用VHDL硬件開發(fā)板,可編程邏輯器件EMP1270T144C5系列。設(shè)計過程中用到的外圍電路的設(shè)計有電源部分,可編程器件EMP1270T144C5,CPLD JTAG接口,晶振和蜂鳴器,LED數(shù)碼管顯示,DIP開關(guān)與按鍵輸入(具體電路見附錄) 3.2 軟件設(shè)計 3.2.1 程序包my_pkg的設(shè)計說明 為了簡化程序設(shè)計增加可讀性,系統(tǒng)采用模塊化的設(shè)計方法,重復(fù)使用的組件以元件(component)的形式存在,以便相關(guān)塊的調(diào)用。下面列出my_pkg組件包的代碼。library ieee;use ieee.std_logic_1164.all;packa

4、ge my_pkg is component div40M-元器件1 Port( clk: in std_logic; f1hz : out std_logic); end component; component count60-元器件2 Port(clr,clk:in std_logic; one :buffer std_logic_vector(3 downto 0); ten :buffer std_logic_vector(3 downto 0); full:out std_logic; dout:buffer std_logic_vector(7 downto 0); end co

5、mponent; component count24-元器件3 Port(clr,clk:in std_logic; one :buffer std_logic_vector(3 downto 0); ten :buffer std_logic_vector(3 downto 0); full:out std_logic); end component; component scan6-元器件4 port (clr,clk : in STD_LOGIC; h_ten,h_one,m_ten,m_one,s_ten,s_one: in STD_LOGIC_vector(3 downto 0);

6、cs: out STD_LOGIC_vector(5 downto 0); mux_out: out STD_LOGIC_vector(3 downto 0); end component; component bin2led-元器件5 port (bin : in std_logic_vector (3 downto 0); led : out std_logic_vector (7 downto 0) ); end component; component sh1k -元器件6 Port( clk: in std_logic;-from system clock(40MHz) f1hz :

7、 out std_logic);- 1Hz output signal end component; component alarm_set-元器件7Port(rst,hz1: in std_logic;-system clock 1Hz alarm,ok: in std_logic;-keep pushing to declare alarm set sec_tune: in std_logic; sec_one,sec_ten:out std_logic_vector(3 downto 0);end component;end my_pkg; 3.2.2 count60組件由此提供分(秒)

8、計數(shù)值,當(dāng)分計數(shù)器計數(shù)到59再來一個脈沖信號秒計數(shù)器清零從新開始計數(shù),而進位則作為小時計數(shù)器的計數(shù)脈沖,使小時計數(shù)器計數(shù)加1,同時分計數(shù)器在分設(shè)置時鐘信號的響應(yīng)下設(shè)置分計數(shù)器的數(shù)值。在count60組件中,個位(one)和十位(ten)分別計數(shù),都設(shè)為二進制四位矢量形式,當(dāng)個位從0計到9時,在下一個clk上升沿來臨后,十位進1,個位變0,十位從0到5計數(shù),在十位為5,個位9的時候,下一個上升沿來臨后,十位個位都變0,進位full加1。因此在程序設(shè)計中需要兩個進程process來分別完成計數(shù),秒計數(shù)以1Hz的輸入為觸發(fā)信號,分計數(shù)以秒的full信號為觸發(fā)信號。具體的count60的組件代碼如下:

9、Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity count60 is Port(clr,clk:in std_logic; one :buffer std_logic_vector(3 downto 0); ten :buffer std_logic_vector(3 downto 0); full:out std_logic; dout:buffer std_logic_vector(7 downto 0);end count60;architecture behav of cou

10、nt60 is beginprocess(clr,clk) begin if(clr='0')then one<="0000" elsif(rising_edge(clk)then if(one="1001")then one<="0000" else one<=one+1; end if; end if;end process; process(clr,clk) begin if(clr='0')then ten<="0000" elsif(rising_e

11、dge(clk)then if(one="1001")then if(ten="0101")then ten<="0000" else ten<=ten+1; end if; end if; end if;end process ;dout<=ten&one;process(clk)-滿59進位(置full值beginif(rising_edge(clk)then if ten="0101"then if one="1001"then full<='1&#

12、39; else full<='0' end if; else full<='0' end if;end if;end process;end behav; 設(shè)定clk與clr兩個系統(tǒng)的輸入后,課觀察到one和ten的波形,在計數(shù)值達到59后,即ten為0101,one為1001以后,即進位到0000 0000,full進1,波形如下。 3.2.3 count24組件 由此提供時計數(shù)值,當(dāng)時計數(shù)器計數(shù)到23再來一個脈沖信號秒計數(shù)器清零從新開始計數(shù),而進位則作為小時計數(shù)器的計數(shù)脈沖,使小時計數(shù)器計數(shù)加1,同時分計數(shù)器在分設(shè)置時鐘信號的響應(yīng)下設(shè)置時計數(shù)器

13、的數(shù)值。在count24組件中,個位(one)和十位(ten)分別計數(shù),都設(shè)為二進制四位矢量形式,在ten小于2的時候,個位從0計到9時,滿9ten加1,在ten為2的時候,one從0到3計數(shù),one為3時候,在下一個clk上升沿來臨后,ten與one都變0,進位full加1。因此在程序設(shè)計中需要多個個進程process來分別完成計數(shù),時計數(shù)以分的full的輸入為觸發(fā)信號,分計數(shù)以秒的full信號為觸發(fā)信號。具體的count24的組件代碼如下:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Ent

14、ity count24 is Port(clr,clk:in std_logic; one :buffer std_logic_vector(3 downto 0); ten :buffer std_logic_vector(3 downto 0); full:out std_logic );end count24;architecture behav of count24 is beginprocess(clr,clk)-計數(shù)0到23 begin if(clr='0')then ten<="0000" one<="0000"

15、 elsif(rising_edge(clk)then if(ten<"0010")then if(one<"1001")then one<=one+"0001" end if; if one="1001"then one<="0000" ten<=ten+"0001" end if; end if; if(ten="0010") then if(one<"0011")then one<=one

16、+"0001" end if; if one="0011"then one<="0000" ten<="0000" end if; end if; end if; end process;process(clk)-滿23進位beginif(rising_edge(clk)then if ten="0010"then if one="0011"then full<='1' else full<='0' end if; el

17、se full<='0' end if;end if;end process;end behav; 小時計數(shù)模塊圖形分析:用來對時進行計數(shù),當(dāng)記到計數(shù)器的低四位小于2時,one從0到9 計數(shù),ten 為2時,one從0到3計數(shù),所以完成了24進制的計數(shù),clk為系統(tǒng)時鐘信號,具體波形如下: 3.2.4 div40M分頻組件 為了便于時鐘計數(shù),需要1Hz的時鐘信號。為了節(jié)省電力耗電,輸出采用7段LED數(shù)碼管來顯示。要提供秒鐘的源信號,以便正常的計數(shù),另外,6個led數(shù)碼管要都顯示,利用人眼的視覺暫留效應(yīng),需要1000hZ的時鐘掃描信號。在本系統(tǒng)中,時鐘信號發(fā)生器的信號頻率為

18、40MHz,因此要將其進行分頻,產(chǎn)生1HZ和1KHz的信號。代碼如下:Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity div40M is Port( clk: in std_logic ; -from system clock(40MHz) f1hz: out std_logic);- 1Hz output signalend div40M;architecture arch of div40M issignal count

19、: integer range 0 to ;beginprocess (clk)begin if rising_edge(clk) then count<=count+1; if count>= then f1hz<='1' else f1hz<='0' end if; end if;end process;end arch;-本模塊將40MHZ分頻,分成1000HZ,提供掃描(片選)的時間-Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;U

20、se IEEE.std_logic_arith.all;Entity sh1k is Port( clk: in std_logic; f1hz: out std_logic);end sh1k;architecture arch of sh1k issignal count : integer range 0 to 39999;beginprocess (clk)begin if rising_edge(clk) then count<=count+1; if count>=20000 then f1hz<='1' else f1hz<='0&

21、#39; end if; end if;end process;end arch;波形分析:具體的分頻波形如下,由于這里的40MHZ太大,仿真時不便觀察這里我們以40KHZ來分頻,效果如下: 3.2.5 scan6掃描組件 由于LED使用動態(tài)顯示,因此要采用掃描的方式來點亮各個LED管,人眼的視覺延遲1/32秒。在本模塊中,時、分、秒的每一位數(shù)都作為輸入,同時提供一個片選(6位),每來一個clk 進行一次選位循環(huán),即依次點亮6個LED燈管。在點亮的對應(yīng)管上將該位的數(shù)字送給一個輸出端口max_out.送到顯示模塊顯示。具體的代碼如下:library IEEE;use IEEE.std_logic

22、_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity scan6 is port (clr,clk : in STD_LOGIC; h_ten,h_one,m_ten,m_one,s_ten,s_one: in STD_LOGIC_vector(3 downto 0); cs: out STD_LOGIC_vector(5 downto 0);-片選 mux_out: out STD_LOGIC_vector(3 downto 0);-要顯示的那一個時鐘位end scan6;architect

23、ure arch of scan6 issignal sel : std_logic_vector(2 downto 0);begin process (clr,clk,h_ten,h_one,m_ten,m_one,s_ten,s_one) begin if clr='0' then sel<="000" elsif rising_edge(clk) then sel<=sel + "001" case sel is when "000" => mux_out <= s_one; cs<

24、="" when "001" => mux_out <= s_ten; cs<="" when "010" => mux_out <= m_one; cs<="" when "011" => mux_out <= m_ten; cs<="" when "100" => mux_out <= h_one; cs<="" when "101

25、" => mux_out <= h_ten; cs<="" when others => mux_out <= "1110" end case; end if; end process;end arch;波形仿真如下:其中為23時46分28秒 3.2.6 bin2led組件 該組件的作用是將4位的二進制碼轉(zhuǎn)為八位的LED數(shù)碼管的顯示碼,即譯碼模塊。將二進制數(shù)變?yōu)轱@示的09的數(shù)值。Bin為輸入,led為輸出,具體代碼如下:Library IEEE;Use IEEE.std_logic_1164.all;Use IEE

26、E.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;entity bin2led is port (bin : in std_logic_vector (3 downto 0); led : out std_logic_vector (7 downto 0) );end bin2led;architecture arch of bin2led isbeginPROCESS(bin)BEGINCASE bin ISWHEN "0000"=>led<=""-0WHEN "0001&

27、quot;=>led<=""-1WHEN "0010"=>led<=""-2WHEN "0011"=>led<=""-3WHEN "0100"=>led<=""WHEN "0101"=>led<=""WHEN "0110"=>led<=""WHEN "0111"=>led<=

28、""WHEN "1000"=>led<=""WHEN "1001"=>led<=""-9WHEN OTHERS =>NULL;END CASE;END PROCESS;end arch;仿真波形如下:3.2.7 alarm_set組件 為了設(shè)定鬧鐘,我們設(shè)計一個目標調(diào)整程序,以1Hz的顯示速率來調(diào)整時分秒的顯示。這里的alarm為指撥開關(guān),當(dāng)為on時,六個數(shù)字即顯示00:00:00,以等待輸入,當(dāng)持續(xù)按鍵后,秒從0到59依次增加,再返回0,任何時刻松開按鍵,即為要顯

29、示的值。調(diào)分鍵和調(diào)時鍵的動作原理相同。此時OK指撥開關(guān)的然在off狀態(tài)。代碼如下:library IEEE; use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;Entity alarm_set is Port(rst,hz1: in std_logic;-system clock 1Hz alarm,ok: in std_logic;-keep pushing to declare alarm set sec_tune: in std_logic; sec_one,s

30、ec_ten:out std_logic_vector(3 downto 0);End;-define the signal_structure and _flow of the device architecture arch of alarm_set is signal sec_one_tmp: std_logic_vector(3 downto 0) ; signal sec_ten_tmp: std_logic_vector(3 downto 0) ; begin tuning:process(rst,hz1,alarm,ok) begin if rst='1' the

31、n sec_one_tmp<="0000"sec_ten_tmp<="0000" elsif rising_edge(hz1) then if alarm='0' and ok='1' then if sec_tune='1' then if sec_one_tmp="1001" then sec_one_tmp<="0000" if sec_ten_tmp<"0101" then sec_ten_tmp<=sec_t

32、en_tmp+"0001" else sec_ten_tmp<="0000" ; end if; else sec_one_tmp<=sec_one_tmp +"0001" end if; end if; else null; end if; end if; end process tuning; sec_one<=sec_one_tmp; sec_ten<=sec_ten_tmp;end arch;仿真波形圖如下: 3.2.8 entity頂層模塊 最后我們將各模塊結(jié)合起來,已完成最后的系統(tǒng)功能。并且將該模塊

33、設(shè)置為top_level entity。在本entity中的包集合中要加上包use work.my_pkg.all;具體代碼如下:library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;use work.my_pkg.all;Entity clock is Port(clr: in std_logic; clk: in std_logic; alarm,ok,sec_button:in std_logic; -按鈕 beep_driver:out

34、std_logic; dout: out std_logic_vector(7 downto 0); cs: out std_logic_vector(5 downto 0); End entity clock;architecture arch of clock is signal hz1,hz1k,beep_drive: std_logic;-1hz,1khz clock signal sec_one,sec_ten,min_ten,min_one: std_logic_vector(3 downto 0); signal a,b,c,d,e,f: std_logic_vector(3 d

35、ownto 0); signal hour_one,hour_ten,time_bin: std_logic_vector(3 downto 0); signal a_sec_one,a_sec_ten:std_logic_vector(3 downto 0); signal bb:integer range 0 to 3; beginnormal_counting:block-時鐘計數(shù)模塊,從00:00:00到23:59:59signal full_sec:std_logic;signal full_min:std_logic;signal full_hour:std_logic;begin

36、 u0:div40M port map(clk=>clk,f1hz=>hz1);-元件的調(diào)用 u1:count60 port map(clr=>clr,clk=>hz1,one=>sec_one,ten=>sec_ten,full=>full_sec); u2:count60 port map(clr=>clr,clk=>full_sec,one=>min_one,ten=>min_ten,full=>full_min); u3:count24 port map(clr=>clr,clk=>full_min,o

37、ne=>hour_one,ten=>hour_ten,full=>full_hour);end block normal_counting;scantime:block-掃描時間的設(shè)定,這里為1毫秒(1000Hz)begin u4:sh1k port map(clk=>clk,f1hz=>hz1k);end block scantime;scan_display:block-將4位二進制的時間轉(zhuǎn)為BCD碼,顯示.begin u7:alarm_set port map(rst=>clr,hz1=>hz1,alarm=>alarm,ok=>ok

38、,sec_tune=>sec_button, sec_one=>a_sec_one,sec_ten=>a_sec_ten); u5:scan6 port map(clr=>clr,clk=>hz1k,s_one=>a,s_ten=>b, m_one=>c,m_ten=>d, h_one=>e,h_ten=>f, mux_out=>time_bin, cs=>cs); u6:bin2led port map(bin=>time_bin,led=>dout);-送到端口顯示end block scan_display;beep:process(hz1,clr)-beginif rising_edge(hz1) then if sec_ten="0000"and sec_one="0000"and

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論