基于VHDL語言的數(shù)字鐘_第1頁
基于VHDL語言的數(shù)字鐘_第2頁
基于VHDL語言的數(shù)字鐘_第3頁
基于VHDL語言的數(shù)字鐘_第4頁
基于VHDL語言的數(shù)字鐘_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)字時(shí)鐘的設(shè)計(jì)

摘要:在這快速開展的年代,時(shí)間對(duì)人們來說是越來越珍貴,在快節(jié)奏的生活時(shí),人們往往忘記了時(shí)間,一旦遇到重要的事情而忘記了時(shí)間,這將會(huì)帶來很大的損失。因此我們需要一個(gè)定時(shí)系統(tǒng)來提醒這些忙碌的人。數(shù)字化的鐘表給人們帶來了極大的方便。近些年,隨著科技的開展和社會(huì)的進(jìn)步,人們對(duì)數(shù)字鐘的要求也越來越高,傳統(tǒng)的時(shí)鐘已不能滿足人們的需求。本設(shè)計(jì)主要研究基于FPGA的數(shù)字鐘,要求時(shí)間以24小時(shí)為一個(gè)周期,顯示時(shí)、分、秒。

關(guān)鍵字:數(shù)字時(shí)鐘,EDA,F(xiàn)PGA,VHDL,Max_Plus_II

引言

本設(shè)計(jì)采用的VHDL是一種全方位的硬件描述語言,具有極強(qiáng)的描述能力,能支持系統(tǒng)行為級(jí)、存放器傳輸級(jí)和邏輯門級(jí)三個(gè)不同層次的設(shè)計(jì);支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述、覆蓋面廣、抽象能力強(qiáng),因此在實(shí)際應(yīng)用中越來越廣泛。ASIC是專用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器。而FPGA是特殊的ASIC芯片,與其他的ASIC芯片相比,它具有設(shè)計(jì)開發(fā)周期短、設(shè)計(jì)制造本錢低、開發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無需測(cè)試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線檢測(cè)等優(yōu)點(diǎn)。

鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、定時(shí)啟閉電路、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為根底的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。

1.課題相關(guān)技術(shù)的開展

當(dāng)今電子產(chǎn)品正向功能多元化,體積最小化,功耗最低化的方向開展。它與傳統(tǒng)的電子產(chǎn)品在設(shè)計(jì)上的顯著區(qū)別師大量使用大規(guī)模可編程邏輯器件,使產(chǎn)品的性能提高,體積縮小,功耗降低.同時(shí)廣泛運(yùn)用現(xiàn)代計(jì)算機(jī)技術(shù),提高產(chǎn)品的自動(dòng)化程度和競(jìng)爭(zhēng)力,縮短研發(fā)周期。EDA技術(shù)正是為了適應(yīng)現(xiàn)代電子技術(shù)的要求,吸收眾多學(xué)科最新科技成果而形成的一門新技術(shù)。

美國(guó)ALTERA公司的可編程邏輯器件采用全新的結(jié)構(gòu)和先進(jìn)的技術(shù),加上MaxplusII(或最新的QUARTUS)開發(fā)環(huán)境,更具有高性能,開發(fā)周期短等特點(diǎn),十分方便進(jìn)行電子產(chǎn)品的開發(fā)和設(shè)計(jì)。

EDA技術(shù),技術(shù)以大規(guī)??删幊踢壿嬈骷樵O(shè)計(jì)載體,以硬件描述語言為系統(tǒng)邏輯描述主要表達(dá)方式,以計(jì)算機(jī)、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實(shí)驗(yàn)開發(fā)系統(tǒng)為設(shè)計(jì)工具,通過有關(guān)的開發(fā)軟件,自動(dòng)完成用軟件的方式設(shè)計(jì)的電子系統(tǒng)到硬件系統(tǒng)的邏輯編譯,邏輯化簡(jiǎn),邏輯分割,邏輯映射,編程下載等工作。最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T新技術(shù)。

本設(shè)計(jì)利用VHDL硬件描述語言結(jié)合可編程邏輯器件進(jìn)行的,并通過數(shù)碼管動(dòng)態(tài)顯示計(jì)時(shí)結(jié)果。數(shù)字鐘可以由各種技術(shù)實(shí)現(xiàn),如單片機(jī)等.利用可編程邏輯器件具有其他方式?jīng)]有的特點(diǎn),它具有易學(xué),方便,新穎,有趣,直觀,設(shè)計(jì)與實(shí)驗(yàn)工程成功率高,理論與實(shí)踐結(jié)合緊密,體積小,容量大,I/O口豐富,易編程和加密等特點(diǎn),并且它還具有開放的界面,豐富的設(shè)計(jì)庫(kù),模塊化的工具以及LPM定制等優(yōu)良性能,應(yīng)用非常方便。因此,本設(shè)計(jì)采用可編程邏輯器件實(shí)現(xiàn)。

本設(shè)計(jì)主要研究基于FPGA的數(shù)字鐘,要求時(shí)間以24小時(shí)為一個(gè)周期,顯示年、月、日、時(shí)、分、秒。具有校時(shí)以及報(bào)時(shí)功能,可以對(duì)年、月、日、時(shí)、分及秒進(jìn)行單獨(dú)校對(duì),使其校正到標(biāo)準(zhǔn)時(shí)間。

2.數(shù)字鐘整體設(shè)計(jì)方案

2.1數(shù)字鐘的功能

1〕以24小時(shí)制顯示時(shí)、分、秒計(jì)數(shù);

2〕時(shí)間清零,時(shí)設(shè)置,分設(shè)置功能;

3〕整點(diǎn)報(bào)時(shí)功能。

2.2引腳說明以及設(shè)計(jì)方案

clk為秒脈沖輸入端,由晶振與分頻計(jì)數(shù)器〔CD4060〕組成的脈沖發(fā)生電路提供頻率為1Hz的秒脈沖輸入信號(hào);smclk為動(dòng)態(tài)掃描控制模塊的輸入端,由脈沖發(fā)生電路輸入頻率約1kHz的脈沖信號(hào);hourset、minset和reset分別為時(shí)設(shè)置、分設(shè)置和時(shí)間清零輸入端,連接按鈕開關(guān);a、b、c、d、e、f、g、dp為顯示段碼輸出,接數(shù)碼管的段碼輸入〔led7s6-len7s0〕;sel0、sel1、sel2接SN74LS138N譯碼器的輸入端。

3.可編程邏輯器件FPGA的頂層設(shè)計(jì)

用頂層設(shè)計(jì)采用原理圖輸入設(shè)計(jì)、底層設(shè)計(jì)采用VHDL設(shè)計(jì)的原理圖與VHDL混合設(shè)計(jì)方法設(shè)計(jì)帶整點(diǎn)報(bào)時(shí)功能的數(shù)字鐘,所以此設(shè)計(jì)可分為頂層與底層設(shè)計(jì),共分為六個(gè)模塊,即時(shí)模塊、分模塊、秒模塊、動(dòng)態(tài)掃描控制模塊、段碼譯碼模塊和整點(diǎn)報(bào)時(shí)模塊。

秒模塊主體為60進(jìn)制的計(jì)數(shù)器,daout為向動(dòng)態(tài)掃描控制模塊提供秒的個(gè)位和十位數(shù)據(jù)的信號(hào)。reset為秒清零;enmin為分鐘進(jìn)位,每60秒產(chǎn)生一個(gè)高電平的信號(hào),作為分模塊的時(shí)鐘輸入;clk為秒模塊的時(shí)鐘輸入,接1Hz脈沖信號(hào);min_set為分鐘設(shè)置,低電平是不影響秒模塊工作,當(dāng)它為高電平時(shí),enmin信號(hào)會(huì)隨之產(chǎn)生一個(gè)和clk頻率相同的信號(hào),到達(dá)調(diào)整分鐘的目的。

分模塊主體為60進(jìn)制的計(jì)數(shù)器,daout為向動(dòng)態(tài)掃描控制模塊提供分的個(gè)位和十位數(shù)據(jù)的信號(hào)。Enhour為分鐘進(jìn)位,每60分產(chǎn)生一個(gè)高電平的信號(hào),作為時(shí)模塊的時(shí)鐘輸入;秒計(jì)數(shù)到60時(shí)的進(jìn)位輸出信號(hào)enhour1和分鐘調(diào)整輸入信號(hào)minset,經(jīng)或關(guān)系后接分的脈沖輸入端clk;clk1為時(shí)調(diào)整脈沖,接1Hz脈沖;hour_set為時(shí)鐘設(shè)置,低電平是不影響分模塊工作,當(dāng)它為高電平時(shí),enmin信號(hào)會(huì)隨之產(chǎn)生一個(gè)和clk頻率相同的信號(hào),到達(dá)調(diào)整時(shí)的目的。

時(shí)模塊為一個(gè)24進(jìn)制的計(jì)數(shù)器,daout為向動(dòng)態(tài)掃描控制模塊提供秒的個(gè)位和十位數(shù)據(jù)的信號(hào)。分計(jì)數(shù)到60時(shí)的進(jìn)位輸出信號(hào)enhour1和時(shí)調(diào)整輸入信號(hào)hourset,經(jīng)或關(guān)系后接時(shí)脈沖輸入端clk。daout為向動(dòng)態(tài)掃描控制模塊提供時(shí)的個(gè)位和十位數(shù)據(jù)的信號(hào)。

動(dòng)態(tài)掃描模塊中smclk為動(dòng)態(tài)掃描控制模塊的脈沖輸入,由外部脈沖發(fā)生電路提供,頻率約為1kHz;sel0、sel1、sel2接外部3-8譯碼器74LS138的輸入端A、B、C;sec[6..0]、min[6..0]、hour[5..0]分別為秒模塊、分模塊、時(shí)模塊計(jì)數(shù)段碼輸出控制信號(hào)。該模塊實(shí)現(xiàn)時(shí)間的動(dòng)態(tài)掃描顯示控制。

整點(diǎn)報(bào)時(shí)模塊用于產(chǎn)生整點(diǎn)時(shí)的LED發(fā)光二極管彩燈和報(bào)時(shí)輸出。整點(diǎn)聲音報(bào)時(shí)輸出信號(hào)speak接蜂鳴器輸入,信號(hào)lamp[2..0]控制整點(diǎn)時(shí)產(chǎn)生60秒的LED發(fā)光二極管彩燈閃爍報(bào)時(shí)輸出信號(hào)。

圖2-1頂層電路設(shè)計(jì)原理圖

4.數(shù)字時(shí)鐘的底層模塊設(shè)計(jì)

4.1秒模塊設(shè)計(jì)

圖3-1秒模塊頂層設(shè)計(jì)原理圖

4.1.1秒模塊VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysecis

port(clk,reset,min_set:instd_logic;--clk為1Hz的秒脈沖輸入信號(hào),reset為秒清零〔復(fù)位〕信號(hào)

--min_set為分鐘調(diào)整

enmin:outstd_logic;--enmin為秒模塊進(jìn)位輸出

daout:outstd_logic_vector(6downto0));--2n-1≥60,n=7,27=64,分鐘用7位二進(jìn)制數(shù)表示

--daout〔6..4〕為十位,daout〔3..0〕為個(gè)位,60循環(huán)計(jì)數(shù)

endentitysec;

architecturebehaveofsecis

signalcount:std_logic_vector(6downto0);--定義內(nèi)部計(jì)數(shù)節(jié)點(diǎn),60循環(huán)計(jì)數(shù)

signalenmin1,enmin2:std_logic;

--enmin為60秒產(chǎn)生的進(jìn)位,enmin2為調(diào)分鍵產(chǎn)生的向分模塊的進(jìn)位

begin

daout<=count;

enmin2<=(min_setandclk);

enmin<=(enmin1orenmin2);--60秒鐘到和調(diào)分鍵均向分模塊產(chǎn)生進(jìn)位脈沖

process(clk,reset,min_set)

begin

if(reset='0')thencount<="0000000";--檢測(cè)秒模塊的1Hz脈沖上升沿

elsif(clk'eventandclk='1')then

if(count(3downto0)="1001")then--秒的個(gè)位是否到“9〞

ifcount(6downto4)="101"then--秒各位到“9〞后,十位計(jì)數(shù)到“5〞

enmin1<='1';

--秒模塊的60秒進(jìn)位輸出enmin置“1〞,向分模塊產(chǎn)生進(jìn)位

count<="0000000";--秒計(jì)數(shù)值“0000000〞〔零秒〕

else

count<=count+7;

--秒各位到“9〞后,十位計(jì)數(shù)沒到“5〞,那么加“7〞變?yōu)椤?〞,同時(shí)向十位進(jìn)位

endif;

else

count<=count+1;--秒個(gè)位沒計(jì)到“9〞時(shí),秒計(jì)數(shù)值加“1〞

enmin1<='0';--秒模塊的60秒進(jìn)位輸出enmin1置“0〞,不向分模塊進(jìn)位

endif;

endif;

endprocess;

endbehave;

4.2秒模塊的仿真實(shí)現(xiàn)

由圖3-2可以看出clk輸入脈沖信號(hào)時(shí),動(dòng)態(tài)掃描控制模塊daout和count開始啟動(dòng)計(jì)數(shù),此時(shí)分設(shè)置min_set為低電平。在570.0ns時(shí)將min_set設(shè)置為高電平,此刻分進(jìn)位enmin產(chǎn)生與clk相同頻率的信號(hào)脈沖,當(dāng)在593.0.0ns時(shí),min_set為低電平,那么enmin也為低電平〔無脈沖〕。當(dāng)723.0ns時(shí),清零reset設(shè)置為低電平,此刻daout和count都將清零,當(dāng)735.0ns時(shí)reset恢復(fù)為高電平,daout和coutn兩者重新開始計(jì)數(shù)。605.0ns時(shí)daout計(jì)數(shù)到六十,enmin產(chǎn)生脈沖后daout和count清零并重新開始計(jì)數(shù)。

如上所述功能實(shí)現(xiàn)。

圖3-2秒模塊仿真圖

4.3分模塊設(shè)計(jì)

圖3-3分模塊頂層設(shè)計(jì)原理圖

4.3.1分模塊VHDL程序

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYminIS

PORT(clk,clk1,hour_set:INSTD_LOGIC;--clk為分鐘模塊的脈沖輸入信號(hào),接秒模塊的進(jìn)位輸出

--clk1接秒脈沖輸入,hour_set為小時(shí)調(diào)整

enhour:OUTSTD_LOGIC;--enhour為分鐘模塊的進(jìn)位輸出

daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));

--2n-1≥60,n=7,27=64,分鐘用7位二進(jìn)制數(shù)表示

--daout〔6..4〕為十位,daout〔3..0〕,60循環(huán)計(jì)數(shù)

ENDENTITYmin;

ARCHITECTUREbehaveOFminIS

SIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);--定義內(nèi)部計(jì)數(shù)節(jié)點(diǎn),60循環(huán)計(jì)數(shù)

SIGNALenhour1,enhour2:STD_LOGIC;

--enhour1為60分鐘產(chǎn)生的進(jìn)位。enhour2為調(diào)時(shí)鍵的脈沖

BEGIN

daout<=count;

enhour2<=(hour_setandclk1);

enhour<=(enhour1orenhour2);--60分鐘到和調(diào)時(shí)鍵均向小時(shí)模塊產(chǎn)生進(jìn)位脈沖

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN--檢測(cè)分鐘模塊的脈沖上升沿

IF(count(3downto0)="1001")THEN--分鐘的各位是否到“9〞

IFcount(6downto4)="101"THEN--分鐘各位到“9〞后,十位計(jì)數(shù)到“5〞

enhour1<='1';

--分鐘模塊的60分鐘進(jìn)位輸出enhour1置“1〞,向時(shí)模塊產(chǎn)生進(jìn)位

count<="0000000";--分鐘計(jì)數(shù)值回零“0000000〞〔零分〕

ELSE

count<=count+7;

--分鐘各位到“9〞后,十位計(jì)數(shù)沒到“5〞,那么“7〞變?yōu)椤?〞,同時(shí)向十位進(jìn)位

ENDIF;

ELSE

count<=count+1;--分鐘各位沒計(jì)到“9〞時(shí),分鐘計(jì)數(shù)值加“1〞

enhour1<='0';--分鐘模塊的60分鐘進(jìn)位輸出enhour1置“0〞,不向時(shí)模塊進(jìn)位

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehave;

4.3.2分模塊的仿真實(shí)現(xiàn)

由圖3-4可以看出,當(dāng)clk輸入脈沖信號(hào)時(shí),態(tài)掃描控制模塊daout和count開始啟動(dòng)計(jì)數(shù),這時(shí)時(shí)進(jìn)位enhour為低電平,且時(shí)設(shè)置hour_set也為低電平。在1.05us時(shí),將hour_set設(shè)置為高電平,此時(shí)enhour產(chǎn)生與clk1相同的頻率信號(hào)。當(dāng)1.09us時(shí),hour_set恢復(fù)低電平,enhour也變?yōu)榈碗娖健矡o脈沖〕。1.21us時(shí),daout計(jì)數(shù)到60,enhour產(chǎn)生脈沖,daout和count清零并將重新計(jì)數(shù)。

如上所述功能實(shí)現(xiàn)。

圖3-4分模塊仿真圖

4.4時(shí)模塊設(shè)計(jì)

圖3-5時(shí)模塊頂層設(shè)計(jì)原理圖

4.4.1時(shí)模塊VHDL程序

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYhourIS

PORT(clk:INSTD_LOGIC;

daout:OUTSTD_LOGIC_VECTOR(5DOWNTO0));

--2n-1≥24,n=6,26=32,小時(shí)用6位二進(jìn)制數(shù)表示

--daout〔5..4〕為十位,daout〔3..0〕為個(gè)位,24循環(huán)計(jì)數(shù)

ENDENTITYhour;

ARCHITECTUREbehaveOFhourIS

SIGNALcount:STD_LOGIC_VECTOR(5DOWNTO0);--定義內(nèi)部計(jì)數(shù)節(jié)點(diǎn),24循環(huán)計(jì)數(shù)

BEGIN

daout<=count;

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN--檢測(cè)小時(shí)模塊的脈沖上升沿

IF(count(3downto0)="1001")THEN--小時(shí)的各位是否到“9〞

IF(count<16#23#)THENcount<=count+7;

--小時(shí)各位到“9〞后,計(jì)數(shù)沒到“23〞,那么加“7〞變?yōu)椤?〞,同時(shí)向十位進(jìn)位

ELSEcount<="000000";

--小時(shí)各位到“9〞后,如果計(jì)數(shù)值大于“23〞,那么置小時(shí)為“零〞

ENDIF;

ELSIF(count<16#23#)THENcount<=count+1;

--小時(shí)個(gè)位沒計(jì)到“9〞且計(jì)數(shù)沒到“23〞時(shí),加“1〞

ELSEcount<="000000";--小時(shí)計(jì)數(shù)已到“23〞時(shí),計(jì)數(shù)值回零“000000〞〔零時(shí)〕

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehave;

4.4.2時(shí)模塊的仿真實(shí)現(xiàn)

由圖3-6可以看出,當(dāng)clk輸入脈沖信號(hào)時(shí),動(dòng)態(tài)掃描控制模塊daout和count開始啟動(dòng)計(jì)數(shù)。在970.0ns時(shí),daout和count到達(dá)24,并且從重新開始計(jì)數(shù)。

如上所述功能實(shí)現(xiàn)。

圖3-6時(shí)模塊仿真圖

4.5動(dòng)態(tài)顯示掃描模塊設(shè)計(jì)

圖3-7動(dòng)態(tài)顯示掃描模塊頂層設(shè)計(jì)原理圖

4.5.1動(dòng)態(tài)顯示掃描模塊VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityselmkis

port(clk1:instd_logic;--動(dòng)態(tài)掃描輸入脈沖

sec,min:instd_logic_vector(6downto0);--7位二進(jìn)制數(shù)表示的秒、分計(jì)數(shù)輸入

hour:instd_logic_vector(5downto0);--6位二進(jìn)制數(shù)表示的小時(shí)計(jì)數(shù)輸入

daout:outstd_logic_vector(3downto0);--4位十進(jìn)制碼計(jì)數(shù)輸入

dp:outstd_logic;--時(shí)、分、秒間的間隔“點(diǎn)〞輸出

sel:outstd_logic_vector(2downto0));

--3位數(shù)碼管位選輸出,接外部3-8譯碼器輸出,譯碼輸出再經(jīng)驅(qū)動(dòng)接數(shù)碼管共陰極端

endentityselmk;

architecturebehaveofselmkis

signalcount:std_logic_vector(2downto0);

--定義內(nèi)部計(jì)數(shù)節(jié)點(diǎn),六進(jìn)制循環(huán)計(jì)數(shù)〔6個(gè)數(shù)碼管顯示〕

begin

sel<=count;

process(clk1)

begin

if(clk1'eventandclk1='1')then--檢測(cè)動(dòng)態(tài)掃描輸入脈沖上升沿

if(count>="101")thencount<="000";

elsecount<=count+1;--“000~101〞六進(jìn)制循環(huán)計(jì)數(shù)

endif;

endif;

casecountis

when"000"=>daout<=sec(3downto0);dp<='0';

--“000〞時(shí)選擇“秒的各位〞計(jì)數(shù)值顯示,點(diǎn)不亮

when"001"=>daout(3)<='0';daout(2downto0)<=sec(6downto4);dp<='0';

--“001〞時(shí)選擇“秒的各位〞計(jì)數(shù)值顯示,點(diǎn)不亮

when"010"=>daout<=min(3downto0);dp<='1';

--“010〞時(shí)選擇“分的各位〞計(jì)數(shù)值顯示,點(diǎn)亮

when"011"=>daout(3)<='0';daout(2downto0)<=min(6downto4);dp<='0';

--“011〞時(shí)選擇“分的各位〞計(jì)數(shù)值顯示,點(diǎn)不亮

when"100"=>daout<=hour(3downto0);dp<='1';

--“100〞時(shí)選擇“時(shí)的各位〞計(jì)數(shù)值顯示,點(diǎn)亮

whenothers=>daout(3downto2)<="00";

daout(1downto0)<=hour(5downto4);dp<='0';

--“101〞時(shí)選擇“時(shí)的各位〞計(jì)數(shù)值顯示,點(diǎn)不亮

endcase;

endprocess;

endbehave;

4.5.2動(dòng)態(tài)顯示掃描模塊的仿真實(shí)現(xiàn)

由圖3-8可以看出,當(dāng)clk1輸入脈沖信號(hào)時(shí),隨著信號(hào)的變化,sec的十位、個(gè)位,min的十位、個(gè)位,hour的十位、個(gè)位分別送進(jìn)了daout中。

圖3-8動(dòng)態(tài)顯示掃描模塊頂層設(shè)計(jì)原理圖

4.6段碼譯碼模塊設(shè)計(jì)

圖3-9段碼譯碼頂層設(shè)計(jì)原理圖

4.6.1段碼譯碼模塊VHDL程序

libraryieee;

useieee.std_logic_1164.all;

entitydecl7sis

port(num:instd_logic_vector(3downto0);

led7s:outstd_logic_vector(6downto0));

endentitydecl7s;

architecturebehaveofdecl7sis

begin

process(num)

begin

casenumis

--abcdefg--字形

when"0000"=>led7s<="1111110";

when"0001"=>led7s<="0110000";

when"0010"=>led7s<="1101101";

when"0011"=>led7s<="1111001";

when"0100"=>led7s<="0110011";

when"0101"=>led7s<="1011011";

when"0110"=>led7s<="1011111";

when"0111"=>led7s<="1110000";

when"1000"=>led7s<="1111111";

when"1001"=>led7s<="1111011";

whenothers=>null;

endcase;

endprocess;

endbehave;

4.6.2段碼譯碼模塊的仿真實(shí)現(xiàn)

由圖3-10可以看出,此模塊是將掃描模塊的dout信號(hào)輸出的BCD碼轉(zhuǎn)換為數(shù)碼管可以顯示的段碼。

如上所述功能實(shí)現(xiàn)。

圖3-10段碼譯碼模塊時(shí)序仿真圖

4.7整點(diǎn)報(bào)時(shí)模塊設(shè)計(jì)

圖3-11整點(diǎn)報(bào)時(shí)模塊頂層設(shè)計(jì)原理圖

4.7.1整點(diǎn)報(bào)時(shí)模塊VHDL程序

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitybsmkis

port(clk:instd_logic;--脈沖輸入,可接1Hz秒脈沖輸入,用于整點(diǎn)聲報(bào)時(shí)發(fā)出間斷報(bào)時(shí)響聲

dain:instd_logic_vector(6downto0);--分鐘模塊計(jì)數(shù)輸入

speak:outstd_logic;--整點(diǎn)聲報(bào)時(shí)輸出,外接蜂鳴器

lamp:outstd_logic_vector(2downto0));

--整點(diǎn)光報(bào)時(shí)輸出,可外接紅、藍(lán)、黃三個(gè)發(fā)光二極管

endentitybsmk;

architecturebehaveofbsmkis

signalcount:std_logic_vector(1downto0);--定義內(nèi)部計(jì)數(shù)節(jié)點(diǎn)

begin

process(clk)

begin

speak<=count(0)andclk;

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論