基于vhdl電子秒表的系統(tǒng)設(shè)計(jì)怎么做?
用層次化設(shè)計(jì)的方法以VHDL語言編程實(shí)現(xiàn)以下功能:
【1】 具有“時”、“分”、“秒”計(jì)時功能;時為24進(jìn)制,分和秒都為60進(jìn)制。
【2】 具有消抖功能:手工按下鍵盤到是否這個過程大概50ms左右,在按下開始到彈簧片穩(wěn),定接觸這段時間為5-10ms,從釋放到彈片完全分開也是5-10ms,在達(dá)到穩(wěn)定接觸和完全分開的微觀過程中,電平是時高時低的,因此如果在首次檢測到鍵盤按下時延時10ms再檢測就不會檢測到抖動的毛刺電平了。64Hz的信號周期為15.6ms,正適合做消抖信號。
【3】 具有校時和清零功能,能夠用4Hz脈沖對“小時”和“分”進(jìn)行調(diào)整,并可進(jìn)行秒零;
【4】 具有整點(diǎn)報時功能。在59分51秒、53秒、55秒、57秒發(fā)出低音512Hz信號,在59分59秒發(fā)出一次高音1024Hz信號,音響持續(xù)1秒鐘,在1024Hz音響結(jié)束時刻為整點(diǎn)。
【5】 具有一鍵設(shè)定鬧鈴及正常計(jì)時與鬧鈴時間的顯示轉(zhuǎn)換。鬧時時間為一分鐘。
二、程序流程:
1、秒計(jì)數(shù)器模塊設(shè)計(jì):
模塊圖如圖1。六十進(jìn)制帶進(jìn)位計(jì)數(shù)器,可清零,clk輸入信號為1Hz脈沖,當(dāng)q0計(jì)滿9后q1增加1,當(dāng)q0滿9且q1記滿5,q1、q0同時歸零,co輸出為高電平。q1為十位q0為個位。
圖1
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity c60 is
Port ( clk,clr : in std_logic;
co :out std_logic;
q1,q0 : out std_logic_vector(3 downto 0));
end c60;
architecture one of c60 is
begin
process (clk,clr)
variable cq1,cq0:std_logic_vector(3 downto 0);
begin
if clr='1' then cq1:=(others=>'0');cq0:=(others=>'0');
elsif (clk'event and clk='1') then
if cq0<9 then cq0:=cq0 +1;co<='0';
elsif cq1<5 then cq1:=cq1+1;cq0:=(others=>'0');
elsif cq1=5 and cq0=9
then co<='1';cq1:=(others=>'0'); cq0:=(others=>'0');
else co<='0';
end if;
end if;
q1<=cq1;
q0<=cq0;
end process;
end one;
仿真結(jié)果如下圖2
2、分計(jì)數(shù)器同上。注:不同之處為分的clk輸入信號為秒的進(jìn)位信號。
3、時計(jì)數(shù)器:
模塊圖如圖3。24進(jìn)制無進(jìn)位計(jì)數(shù)器,當(dāng)計(jì)數(shù)信號計(jì)到23后再檢測到計(jì)數(shù)信號時會自動零。帶清零,clk輸入為分秒進(jìn)位相與的結(jié)果。q1為十位,q0為個位。
圖3
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity c24 is
Port ( clk : in std_logic;
q1,q0 : out std_logic_vector(3 downto 0));
end c24;
architecture one of c24 is
begin
process (clk)
variable cq1,cq0:std_logic_vector(3 downto 0);
begin
if (clk'event and clk='1') then
if cq1="0010" and cq0="1001" then
cq1:="0000"; cq0:="0000";
elsif cq0<"1001" then
cq0:=cq0+1;
else cq0:="0000"; cq1:=cq1+1;
end if;
end if;
q1<=cq1;q0<=cq0;
end process;
end one;
仿真波形如下圖4:
圖4
4、分頻器:
模塊圖如圖5。由四個分頻器構(gòu)成,輸入信號in_clk為1024Hz脈沖信號。把輸入的1024Hz信號分頻為四個脈沖信號,即1Hz的秒脈沖,4Hz的校時、校分脈沖,64Hz的消抖脈沖以及512Hz的蜂鳴器低音輸入。
圖5
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity div is
Port ( in_clk : in std_logic;
clk_512, clk_1,clk_4 ,clk_64:out std_logic);
end div;
architecture one of div is
signal q512,a,b,c:std_logic;
signal c1,c4,c64:integer range 512 downto 0;
begin
process(in_clk)
begin
if in_clk'event and in_clk='1' then
q512<=not q512;
if c64>=7 then c64<=0;c<=not c;else c64<=c64+1;end if;
if c4>=127 then c4<=0;b<=not b;else c4<=c4+1;end if;
if c1>=511 then c1<=0;a<=not a;else c1<=c1+1;end if;
end if;
end process;
clk_512<=q512;
clk_1<=a;
clk_4<=b;
clk_64<=c;
end one;
仿真波形如下圖6:
圖6
5、消抖:
模塊圖如圖7。分頻出的用64Hz信號對sa校時信號、sb校分信號、sc秒清零信號、sd鬧時設(shè)置信號進(jìn)行防抖動處理。是由四個兩級d觸發(fā)器構(gòu)成的,分別對輸入的sa、sb、sc、sd
信號的相鄰兩個上升沿進(jìn)行比較以確定按鍵的按下,從而達(dá)到消抖的目的。
圖7
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity xd is
Port ( clk_64 : in std_logic;
hj,mj,sclr,sdo :out std_logic;
sa,sb,sc,sd : in std_logic);
end xd;
architecture one of xd is
begin
process(clk_64)
variable sa_n,sa_p,sb_n,sd_n,sb_p,sc_n,sc_p,sd_p:std_logic;
begin
if clk_64'event and clk_64='1' then
sa_p:=sa_n;sa_n:=sa;
sb_p:=sb_n;sb_n:=sb;
sc_p:=sc_n;sc_n:=sc;
sd_p:=sd_n;sd_n:=sd;
if sa_p= sa_n then hj<=sa;end if;
if sb_p= sb_n then mj<=sb;end if;
if sc_p= sc_n then sclr<=sc;end if;
if sd_p= sd_n then sdo<=sd;end if;
end if;
end process;
end one;
仿真波形如下圖8:
圖8
6、鬧鐘時間的設(shè)定:
模塊圖如圖9。一鍵設(shè)定鬧鈴時間,內(nèi)部由四個d觸發(fā)器構(gòu)成。當(dāng)確定sd鍵按下時,將當(dāng)前時間的小時和分的個位十位分別存入四個d觸發(fā)器內(nèi),作為鬧時時間。
圖9
程序如下
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity df4 is
Port ( sd :in std_logic;
hh,hl,mh,ml : in std_logic_vector(3 downto 0);
hh_o,hl_o,mh_o,ml_o: out std_logic_vector(3 downto 0));
end df4;
architecture one of df4 is
begin
process (sd,hh,hl,mh,ml)
begin
if sd='1' then
hh_o<=hh;hl_o<=hl;mh_o<=mh;ml_o<=ml;end if;
end process;
end one;
仿真波形如下圖10:
圖10
7、二選一電路
(1)一位二選一:
模塊圖如圖11。用以進(jìn)行正常計(jì)時和校時/分的選擇。alarm為經(jīng)過消抖的校時/分信號。當(dāng)按鍵未曾按下時,即校時/分信號沒有到來時,二選一選擇器會選擇輸出a(正常計(jì)時輸入)信號,否則當(dāng)alarm按鍵按下時輸出y為校時/分輸入信號——4Hz。
圖11
程序如下:
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。用以進(jìn)行正常計(jì)時時間與鬧鈴時間顯示的選擇,alarm輸入為按鍵。當(dāng)alarm按鍵未曾按下時二選一選擇器會選擇輸出顯示正常的計(jì)時結(jié)果,否則當(dāng)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;
仿真結(jié)果如下圖14:
圖14
8、整點(diǎn)報時及鬧時:
模塊圖如圖15。在59分51秒、53秒、55秒、57秒給揚(yáng)聲器賦以低音512Hz信號,在59分59秒給揚(yáng)聲器賦以高音1024Hz信號,音響持續(xù)1秒鐘,在1024Hz音響結(jié)束時刻為整點(diǎn)。當(dāng)系統(tǒng)時間與鬧鈴時間相同時給揚(yáng)聲器賦以高音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、頂層原理圖:
三、感想
通過這次設(shè)計(jì),既復(fù)習(xí)了以前所學(xué)的知識,也進(jìn)一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當(dāng)每一個子模塊編寫調(diào)試成功時,心里特別的開心。但是在畫頂層原理圖時,遇到了不少問題,最大的問題就是根本沒有把各個模塊的VHD文件以及生成的器件都全部放在頂層文件的文件夾內(nèi),還有就是程序設(shè)計(jì)的時候考慮的不夠全面,沒有聯(lián)系著各個模式以及實(shí)驗(yàn)板的情況來編寫程序,以至于多考慮編寫了譯碼電路而浪費(fèi)了很多時間。在波形仿真時,也遇到了一點(diǎn)困難,想要的結(jié)果不能在波形上得到正確的顯示
:在分頻模塊中,設(shè)定輸入的時鐘信號后,卻只有二分頻的結(jié)果,其余三個分頻始終沒反應(yīng)。后來,在數(shù)十次的調(diào)試之后,才發(fā)現(xiàn)是因?yàn)橐?guī)定的信號量范圍太大且信號的初始值隨機(jī),從而不能得到所要的結(jié)果。還有的仿真圖根本就不出波形,怎么調(diào)節(jié)都不管用,后來才知道原來是路徑不正確,路徑中不可以有漢字。真是細(xì)節(jié)決定成敗啊!總的來說,這次設(shè)計(jì)的數(shù)字鐘還是比較成功的,有點(diǎn)小小的成就感,終于覺得平時所學(xué)的知識有了實(shí)用的價值,達(dá)到了理論與實(shí)際相結(jié)合的目的,不僅學(xué)到了不少知識,而且鍛煉了自己的能力,使自己對以后的路有了更加清楚的認(rèn)識,同時,對未來有了更多的信心。
四、參考資料:
1、潘松,王國棟,VHDL實(shí)用教程〔M〕.成都:電子科技大學(xué)出版社,2000.(1)
2、崔建明主編,電工電子EDA仿真技術(shù)北京:高等教育出版社,2004
3、李衍編著,EDA技術(shù)入門與提高王行西安:西安電子科技大學(xué)出版社,2005
4、侯繼紅,李向東主編,EDA實(shí)用技術(shù)教程北京:中國電力出版社,2004
5、沈明山編著,EDA技術(shù)及可編程器件應(yīng)用實(shí)訓(xùn)北京:科學(xué)出版社,2004
6、侯伯亨等,VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(jì)西安: 西安電子科技大學(xué)出版社,1997
7、辛春艷編著,VHDL硬件描述語言北京:國防工業(yè)出版社,2002
基于vhdl電子秒表的系統(tǒng)設(shè)計(jì)怎么做?
一、實(shí)驗(yàn)原理 :用層次化設(shè)計(jì)的方法以VHDL語言編程實(shí)現(xiàn)以下功能:【1】具有“時”、“分”、“秒”計(jì)時功能;時為24進(jìn)制,分和秒都為60進(jìn)制。【2】具有消抖功能:手工按下鍵盤到是否這個過程大概50ms左右,在按下開始到彈簧片穩(wěn),定接觸這段時間為5-10ms,從釋放到彈片完全分開也是5-10ms,在達(dá)到...
用VHDL設(shè)計(jì)一個倒計(jì)時計(jì)數(shù)器,lcd實(shí)時顯示秒表計(jì)時值,時鐘信號50mHz,同步...
設(shè)計(jì)一個倒計(jì)時計(jì)數(shù)器,能夠?qū)崟r在LCD上顯示秒表計(jì)時值,時鐘信號為50MHz,采用同步電路模式。初始計(jì)時設(shè)定為25秒,通過TA和TB兩個輸入信號可以進(jìn)行0到99秒的倒計(jì)時設(shè)置。QA和QB兩個輸出信號將倒計(jì)時值送入譯碼器進(jìn)行顯示。在VHDL代碼中,首先定義了兩個4位的信號DA和DB,用于存儲倒計(jì)時值。當(dāng)CLR信號...
基于fpga數(shù)字秒表的設(shè)計(jì)答辯怎么說
5. 系統(tǒng)整體實(shí)現(xiàn):新建原理圖設(shè)計(jì)文件,將以上各個子模塊按圖連接起來,構(gòu)成一個秒表設(shè)計(jì)系統(tǒng)。
題目: 基于FPGA數(shù)字鐘的設(shè)計(jì)與調(diào)試
ring signal=1,這個ring signal=1的信號要持續(xù)多久,就看你自己設(shè)計(jì)經(jīng)過幾個時鐘周期,讓其停止。而音調(diào)的高低:可以給蜂鳴器送不同的電壓來確定。響幾聲的話:你可以設(shè)計(jì)成比如說,一個時鐘周期,就是相當(dāng)于你的2HZ的2秒鐘 首先 ring signal =1 ,然后下一個時鐘周期ring sianl=0,再等于1,再...
計(jì)算機(jī)專業(yè)怎樣寫畢業(yè)設(shè)計(jì)的開題報告?
一、設(shè)計(jì)任務(wù)(數(shù)字鐘的功能):1.具有時、分、秒、計(jì)數(shù)顯示功能,以24小時循環(huán)計(jì)時;2.具有清零,調(diào)節(jié)小時、分鐘功能;3.具有整點(diǎn)報時功能,整點(diǎn)報時的同時LED燈花樣顯示。擴(kuò)展部分:在基礎(chǔ)功能上添加以下幾個功能:秒表,倒計(jì)時和鬧鐘。目的是:掌握多位計(jì)數(shù)器相連的設(shè)計(jì)方法;掌握十進(jìn)制,六進(jìn)制,...
eda秒表程序
1.“分分:秒秒”計(jì)數(shù)器設(shè)計(jì) 我們要實(shí)現(xiàn)“分分:秒秒”顯示的電子秒表,需要設(shè)計(jì)計(jì)數(shù)頻率為1Hz 的 計(jì)數(shù)器。因?yàn)椤胺址郑好朊搿钡慕Y(jié)構(gòu)對應(yīng)有4個十進(jìn)制數(shù)字(個位的秒,十位的 秒,個位的分,十位的分),如果采用統(tǒng)一計(jì)數(shù)再分別求出“分分:秒秒”對應(yīng) 的4個十進(jìn)制數(shù)字進(jìn)行譯碼顯示,則求解對應(yīng)...
FPGA\/CPLD應(yīng)用設(shè)計(jì)200例的目錄
11數(shù)字秒表1.12電子密碼鎖1.13數(shù)字電壓表1.14自動交通控制系統(tǒng)1.15交通信號燈控制器1.16交通控制燈邏輯電路系統(tǒng)設(shè)計(jì)1.17十字路口交通管理信號燈系統(tǒng)設(shè)計(jì)1.18交通燈控制程序設(shè)計(jì)1.19交通燈電路設(shè)計(jì)1.20無線通信中的全數(shù)字調(diào)制器設(shè)計(jì)1.21無線通信中的全數(shù)字解調(diào)器設(shè)計(jì)1.22采用VHDL語言設(shè)計(jì)的數(shù)字頻率計(jì)...
求電子鐘課程設(shè)計(jì)報告
一、電子鐘的設(shè)計(jì)原理:電子鐘主要有四個模塊組成: 掃描電路、計(jì)數(shù)模塊電路、BCD 碼轉(zhuǎn)換電路、顯示器驅(qū)動電路。由CP送入1HZ的時鐘信號,并輸入計(jì)數(shù)60的分頻計(jì)秒電路。在計(jì)數(shù)至6o瞬間. 進(jìn)位至計(jì)數(shù)60的分頻計(jì)分分頻使分頻計(jì)分電路加1。而計(jì)秒電路也消除為0重新再計(jì)秒。計(jì)分電路與計(jì)時電路功能同上。計(jì)...
普通高等教育十一五國家級規(guī)劃教材·電子設(shè)計(jì)自動化技術(shù)目錄
項(xiàng)目7 秒表的VHDL設(shè)計(jì) 7.1 項(xiàng)目描述與目標(biāo) 7.2 進(jìn)程與順序語句介紹 7.3 項(xiàng)目分析與實(shí)施步驟 7.4 項(xiàng)目評價與總結(jié) 項(xiàng)目8 數(shù)字時鐘的原理圖VHDL混合設(shè)計(jì) 8.1 項(xiàng)目描述與目標(biāo) 8.2 VHDL設(shè)計(jì)輸入法與混合設(shè)計(jì)流程 8.3 項(xiàng)目分析與實(shí)施步驟 8.4 項(xiàng)目評價與總結(jié) 模塊3 EDA綜合應(yīng)用 項(xiàng)目9 出租車計(jì)費(fèi)...
EDA 實(shí)用技術(shù)第2版
第三章詳細(xì)介紹了QuartusⅡ設(shè)計(jì)軟件,從安裝到操作流程,再到功能仿真,全面展示了其在設(shè)計(jì)過程中的應(yīng)用。第四章著重講解硬件描述語言VHDL,包括其基本結(jié)構(gòu)、語法和設(shè)計(jì)實(shí)例,如出租車計(jì)費(fèi)器、數(shù)字秒表等。第五章則展示了Multisim 9設(shè)計(jì)軟件的使用,包括電路繪制、元件庫操作以及各種分析方法。第六章和第七...
相關(guān)評說:
渠縣縮小: ______ -------------------------------------------時間設(shè)置小時部分 sethour1:process(clk,seth2) begin if clk'event and clk='1' then if seth1="0010"and seth2="0011" then seth1<="0000"; elsif seth2="1001" then seth1<=seth1+1; end if; end if; end process ...
渠縣縮小: ______ 用兩個60進(jìn)制計(jì)數(shù)器就是了.我以前做了一個24/12小時的電子鐘,其counter60如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity s_counter60 is port(clk:in std_logic; bcd10,bcd1:buffer std_logic_vector(3 ...
渠縣縮小: ______ 我一般是查表 就是把 LED管對應(yīng)的字符代碼(和你的硬件連接方式有關(guān)系) 0~F列出來 然后 計(jì)時就直接用個INT變量累加就完了 然后根據(jù)變量值 找出相應(yīng)的碼字進(jìn)行顯示就行了 用個分支語句就可以實(shí)現(xiàn) 掃描屏率100有點(diǎn)高波 其實(shí)1HZ就足夠了 你一秒跳一次剛好
渠縣縮小: ______ 你說的是一個分頻器,分別為100分頻、200分頻、2000分頻.library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity divider is port(clk:in std_logic; q1000,q500,q50:out std_logic);--q1000輸出1000HZ,q500輸出500Hz,q50...
渠縣縮小: ______ 設(shè)計(jì)思路: 1.首先畫出設(shè)計(jì)原理系統(tǒng)框圖 2.用proteus65進(jìn)行仿真繪制出完整電路圖
渠縣縮小: ______ 這個程序主要是分頻器的用法吧!給你個程序,希望是你想要的 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FFF IS PORT(CLK,RESET:IN STD_LOGIC; ---系統(tǒng)時鐘和復(fù)位信號 LOAD:...
渠縣縮小: ______ 【實(shí)驗(yàn)?zāi)康摹? 設(shè)計(jì)一個24小時制數(shù)字鐘,要求能顯示時,分,秒,并且可以手動調(diào)整時和分 【試驗(yàn)中所用器材】: 開發(fā)環(huán)境MAX—PLUSII,ZY11EDA13BE 試驗(yàn)系統(tǒng), VHDL 語言. 【設(shè)計(jì)原理】 數(shù)字鐘的主體是計(jì)數(shù)器,它記錄并顯示接收到...
渠縣縮小: ______ 我覺得可以不用寫ram,你可以設(shè)多一個port控制輸入量傳入不同的signal里. 再用case就可以了!
渠縣縮小: ______ <p>1.編輯輸入VHDL程序并設(shè)為當(dāng)前工程文件</p> <p>設(shè):clr為系統(tǒng)時鐘,clr為異步清零控制端,load為同步置數(shù)控制端,date為同步置數(shù)數(shù)據(jù)輸入端口,count為計(jì)數(shù)器輸出端口</p> <p>實(shí)體名為:add4b.VHD</p> <p>2.編譯設(shè)計(jì)文件并予仿真...
渠縣縮小: ______ VHDL不允許在一個進(jìn)程中檢測多個信號的邊沿,只能檢測某一個信號的邊沿.if clk'event and clk='1'then if PUSH_IN'EVENT AND PUSH_IN='0' THEN 這種描述方式VHDL不認(rèn)可.