程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity xuan21 is
Port ( alarm,a,b: in std_logic;
y:out std_logic);
end xuan21 ;
architecture one of xuan21 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
仿真波形如下圖12:
圖12
(2)三位二選壹:
模塊圖如圖13。用以進行正常計時時間與鬧鈴時間顯示的選擇,alarm輸入為按鍵。當alarm按鍵未曾按下時二選壹選擇器會選擇輸出顯示正常的計時結果,否則當alarm按鍵按下時選擇器將選擇輸出顯示鬧鈴時間顯示。
圖13
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity x213 is
Port ( alarm : in std_logic;
y:out std_logic_vector(3 downto 0);
a,b: in std_logic_vector(3 downto 0));
end x213;
architecture one of x213 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
仿真結果如下圖14:
圖14
8、整點報時及鬧時:
模塊圖如圖15。在59分51秒、53秒、55秒、57秒給揚聲器賦以低音512Hz信號,在59分59秒給揚聲器賦以高音1024Hz信號,音響持續1秒鐘,在1024Hz音響結束時刻為整點。當系統時間與鬧鈴時間相同時給揚聲器賦以高音1024Hz信號。鬧時時間為壹分鐘。
圖15
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity voice is
Port ( hou1,huo0,min1,min0,sec1,sec0,hh,hl,mh,ml: std_logic_vector(3 downto 0);
in_1000,in_500:in std_logic;
q : out std_logic);
end voice;
architecture one of voice is
begin
process(min1,min0,sec1,sec0)
begin
if min1="0101" and min0="1001" and sec1="0101" then
if sec0="0001" or sec0="0011" or sec0="0101" or sec0="0111"
then q<=in_500;
elsif sec1="0101" and sec0="1001" then q<=in_1000;
else q<='0';
end if;
else q<='0';
end if;
if min1=mh and min0=ml and hou1=hh and huo0=hl then
q<=in_1000;
end if;
end process;
end one;
仿真波形如下圖16
圖16
9、頂層原理圖:
三、感想
通過這次設計,既復習了以前所學的知識,也進壹步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當每壹個子模塊編寫調試成功時,心裏特別的開心。但是在畫頂層原理圖時,遇到了不少問題,最大的問題就是根本沒有把各個模塊的VHD文件以及生成的器件都全部放在頂層文件的文件夾內,還有就是程序設計的時候考慮的不夠全面,沒有聯系著各個模式以及實驗板的情況來編寫程序,以至於多考慮編寫了譯碼電路而浪費了很多時間。在波形仿真時,也遇到了壹點困難,想要的結果不能在波形上得到正確的顯示
:在分頻模塊中,設定輸入的時鐘信號後,卻只有二分頻的結果,其余三個分頻始終沒反應。後來,在數十次的調試之後,才發現是因為規定的信號量範圍太大且信號的初始值隨機,從而不能得到所要的結果。還有的仿真圖根本就不出波形,怎麽調節都不管用,後來才知道原來是路徑不正確,路徑中不可以有漢字。真是細節決定成敗啊!總的來說,這次設計的數字鐘還是比較成功的,有點小小的成就感,終於覺得平時所學的知識有了實用的價值,達到了理論與實際相結合的目的,不僅學到了不少知識,而且鍛煉了自己的能力,使自己對以後的路有了更加清楚的認識,同時,對未來有了更多的信心。
四、
參考資料:
1、潘松,王國棟,VHDL實用教程〔M〕.成都:電子科技大學出版社,2000.(1)
2、崔建明主編,電工電子EDA仿真技術北京:高等教育出版社,2004
3、李衍編著,EDA技術入門與提高王行西安:西安電子科技大學出版社,2005
4、侯繼紅,李向東主編,EDA實用技術教程北京:中國電力出版社,2004
5、沈明山編著,EDA技術及可編程器件應用實訓北京:科學出版社,2004
6、侯伯亨等,VHDL硬件描述語言與數字邏輯電路設計西安: 西安電子科技大學出版社,1997
7、辛春艷編著,VHDL硬件描述語言北京:國防工業出版社,2002 就這些