版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 調(diào)味品行業(yè)趨勢分析與應(yīng)對方案
- 高風(fēng)險妊娠雙向轉(zhuǎn)診協(xié)議書
- 風(fēng)能領(lǐng)域員工績效考核制度
- 臨建房圍擋施工方案的實施
- 高校中高層管理人才培養(yǎng)方案
- 電纜槽與其他設(shè)施協(xié)調(diào)施工方案
- 養(yǎng)老院安全責(zé)任制度
- 第二章 多彩繽紛的自然環(huán)境(串講課件)-中華中圖版2024七年級地理上冊考點總結(jié)
- 2024年事業(yè)單位招聘考試計算機基礎(chǔ)知識復(fù)習(xí)題庫及答案(共700題)
- 動物園衛(wèi)生管理與清潔制度
- 全國河流水文站坐標
- 高考專題復(fù)習(xí):散句與整句變換(課件32張)
- 霧化吸入常見并發(fā)癥的預(yù)防與處理
- 中小學(xué)幼兒園數(shù)字化教學(xué)資源進校園管理辦法
- 高效課堂做好筆記 課件-學(xué)習(xí)習(xí)慣的培養(yǎng)主題班會
- 鞍鋼鲅魚圈鋼鐵基地項目設(shè)計方案
- 消化內(nèi)鏡清洗消毒技術(shù)操作流程圖(最新)
- 人衛(wèi)版外科學(xué)小腸疾病第一、二、三節(jié)課件
- 《區(qū)塊鏈應(yīng)用技術(shù)》課程教學(xué)大綱
- 工程變更洽商記錄樣板
- 內(nèi)蒙古蒙特威生物科技有限公司3000噸酪蛋白及衍生產(chǎn)品項目環(huán)評報告表
評論
0/150
提交評論