![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/9c3d030d-ab32-45e3-b63b-2c090615de35/9c3d030d-ab32-45e3-b63b-2c090615de35pic.jpg)
![eda課程設(shè)計(jì)報(bào)告--數(shù)字鐘_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/9c3d030d-ab32-45e3-b63b-2c090615de35/9c3d030d-ab32-45e3-b63b-2c090615de351.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 摘要………………………………………………………………………2</p><p> 1設(shè)計(jì)目的……………………………………………………………… 2</p><p> 2設(shè)計(jì)內(nèi)容 …………………………………………………………… 2</p><p>
2、2.1設(shè)計(jì)任務(wù)……………………………………………………………2</p><p> 2.2擴(kuò)展 ……………………………………………………………2</p><p> 3系統(tǒng)方案及設(shè)計(jì)原理 ……………………………………………… 3</p><p> 3.1方案選擇 ………………………………………………………… 3</p><p> 3
3、.2數(shù)字鐘的基本工作原理 ………………………………………………3</p><p> 3.3底層元件接口……………………………………………………… 4</p><p> 3.4數(shù)字鐘設(shè)計(jì)的RTL電路…………………………………………… 5</p><p> 4設(shè)計(jì)步驟 ………………………………………………………………5</p><p>
4、5心得體會………………………………………………………………10</p><p> 6 程序代碼 ………………………………………………………… 10</p><p><b> 摘要:</b></p><p> 人類社會已進(jìn)入到高度發(fā)達(dá)的信息化社會。信息化社會的發(fā)展離不開電子信息產(chǎn)品開發(fā)技術(shù)、產(chǎn)品品質(zhì)的提高和進(jìn)步。電子信息產(chǎn)品隨著科學(xué)技術(shù)的
5、進(jìn)步,其電子器件和設(shè)計(jì)方法更新?lián)Q代的速度日新月異。實(shí)現(xiàn)這種進(jìn)步的主要原因就是電子設(shè)計(jì)技術(shù)和電子制造技術(shù)的發(fā)展,其核心就是電子設(shè)計(jì)自動化(EDA,Electronics Design Automation)技術(shù),EDA技術(shù)的發(fā)展和推廣應(yīng)用又極大地推動了電子信息產(chǎn)業(yè)的發(fā)展。為保證電子系統(tǒng)設(shè)計(jì)的速度和質(zhì)量,適應(yīng)“第一時(shí)間推出產(chǎn)品”的設(shè)計(jì)要求,EDA技術(shù)正逐漸成為不可缺少的一項(xiàng)先進(jìn)技術(shù)和重要工具。目前,在國內(nèi)電子技術(shù)教學(xué)和產(chǎn)
6、業(yè)界的技術(shù)推廣中已形成“EDA熱”,完全可以說,掌握EDA技術(shù)是電子信息類專業(yè)學(xué)生、工程技術(shù)人員所必備的基本能力和技能。 </p><p> EDA技術(shù)在電子系統(tǒng)設(shè)計(jì)領(lǐng)域越來越普及,本設(shè)計(jì)主要利用VHDL語言在EDA平臺上設(shè)計(jì)一個電子數(shù)字鐘,它的計(jì)時(shí)為24小時(shí)小時(shí)制,顯示滿刻度為23時(shí)59分59秒,另外還具有校時(shí)功能和鬧鐘功能??偟某绦蛴蓭讉€各具不同功能的單元模塊程序拼接而成,其中包括分頻程序模塊、時(shí)
7、分秒計(jì)數(shù)和校時(shí)程序模塊、數(shù)據(jù)選擇器程序模塊、顯示程序模塊和例化程序模塊。并且使用QUARTUS II軟件進(jìn)行電路波形仿真,下載到EDA實(shí)驗(yàn)箱進(jìn)行驗(yàn)證。</p><p> 關(guān)鍵詞:數(shù)字鐘 EDA VHDL語言 </p><p><b> 一、設(shè)計(jì)目的</b></p><p> 1、熟練地運(yùn)用數(shù)字系統(tǒng)的設(shè)計(jì)方法進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)
8、;</p><p> 2、能進(jìn)行較復(fù)雜的數(shù)字系統(tǒng)設(shè)計(jì);</p><p> 3、按要求設(shè)計(jì)一個數(shù)字鐘。</p><p><b> 二、設(shè)計(jì)內(nèi)容</b></p><p> 2.1、設(shè)計(jì)任務(wù):設(shè)計(jì)一臺能顯示時(shí)、分、秒的數(shù)字鐘。具體要求如下:</p><p> 由實(shí)驗(yàn)箱上的時(shí)鐘信號經(jīng)分頻產(chǎn)生秒脈
9、沖;</p><p> 計(jì)時(shí)計(jì)數(shù)器用24進(jìn)制計(jì)時(shí)電路;</p><p> 可手動校時(shí),能分別進(jìn)行時(shí)、分的校正;</p><p><b> 整點(diǎn)報(bào)時(shí);</b></p><p> 2.2、擴(kuò)展:設(shè)置鬧時(shí)功能,當(dāng)計(jì)時(shí)計(jì)到預(yù)定時(shí)間時(shí),揚(yáng)聲器發(fā)出鬧鈴信號,鬧鈴時(shí)間為4s,并可提前終止鬧鈴。</p><p
10、> 三、系統(tǒng)方案及設(shè)計(jì)原理。</p><p><b> 3.1、方案選擇:</b></p><p> 數(shù)字鐘無非就是分頻計(jì)數(shù),設(shè)計(jì)出60進(jìn)制,24進(jìn)制計(jì)數(shù)器,在這里,秒分計(jì)數(shù)是60進(jìn)制,時(shí)計(jì)數(shù)是24進(jìn)制,對1Hz信號進(jìn)行60分頻也就產(chǎn)生了分計(jì)數(shù)脈沖,對1Hz進(jìn)行60 * 60 分頻(對分60分頻)也就產(chǎn)生了時(shí)計(jì)數(shù)脈沖,為了方便校時(shí),系統(tǒng)設(shè)計(jì)時(shí)未直接采用實(shí)驗(yàn)
11、箱上的1Hz作為基準(zhǔn)時(shí)鐘源,而是對65536Hz進(jìn)行32768分頻產(chǎn)生秒脈沖,8192分頻作為校時(shí)與鬧鐘時(shí)間設(shè)置脈沖,為方便調(diào)鬧鐘,采用了數(shù)據(jù)選擇器選擇輸出正常走時(shí)或鬧鐘時(shí)間。為節(jié)省代碼,數(shù)碼管譯碼工作直接交給了實(shí)驗(yàn)箱自帶的譯碼器,選擇工作模式0。</p><p> 3.2、數(shù)字鐘的基本工作原理:</p><p> 數(shù)字鐘以其顯示時(shí)間的直觀性、走時(shí)準(zhǔn)確性作為一種計(jì)時(shí)工具,數(shù)字鐘的基本組
12、成部分離不開計(jì)數(shù)器,在控制邏輯電路的控制下完成預(yù)定的各項(xiàng)功能。數(shù)字鐘的基本原理方框圖如圖1:</p><p><b> 1Hz</b></p><p><b> 5HZ</b></p><p> 圖1 數(shù)字鐘的系統(tǒng)框圖</p><p> 圖3.1數(shù)字鐘實(shí)現(xiàn)原理框圖</p>&
13、lt;p> 該系統(tǒng)由振蕩器、分頻器、“時(shí)、分、秒”計(jì)數(shù)器、譯碼器及顯示器、校時(shí)電路、整點(diǎn)報(bào)時(shí)電路等組成。石英晶體振蕩器和分頻器產(chǎn)生整個系統(tǒng)的時(shí)基信號,它直接決定計(jì)時(shí)系統(tǒng)的精度?!懊胗?jì)數(shù)器”采用六十進(jìn)制計(jì)數(shù)器,每累計(jì)60秒向“分計(jì)數(shù)器”進(jìn)位;“分計(jì)數(shù)器”采用六十進(jìn)制計(jì)數(shù)器,每累計(jì)60分向“時(shí)計(jì)數(shù)器”進(jìn)位;“時(shí)計(jì)數(shù)器”采用二十四進(jìn)制計(jì)數(shù)器,按照“24翻1”規(guī)律計(jì)數(shù)?!皶r(shí)、分、秒”計(jì)數(shù)器的輸出經(jīng)譯碼器送顯示器顯示。校時(shí)電路用來當(dāng)計(jì)時(shí)出
14、現(xiàn)誤差時(shí)對“時(shí)、分、秒”進(jìn)行校對調(diào)整。整點(diǎn)報(bào)時(shí)(鬧鐘)電路是根據(jù)計(jì)時(shí)系統(tǒng)的輸出狀態(tài)產(chǎn)生一脈沖信號,然后去觸發(fā)音頻發(fā)生器實(shí)現(xiàn)報(bào)時(shí)(鬧鈴)。</p><p> 3.3、底層元件接口:</p><p> component hour </p><p> port(rst,carry,en : in std_logic;</p><p> A
15、DJclk,ADJEN : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p> end component;</p>
16、<p> component min</p><p> port(rst,carry,en : in std_logic;</p><p> ADJclk,ADJEN : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p&
17、gt;<p> carryout : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p> end component;</p><p> component sec</p><p>
18、; port(rst,clk,en : in std_logic;</p><p> ADJEN : in std_logic;</p><p> carryout : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));&l
19、t;/p><p> end component;</p><p> component alarm</p><p> port(clk,en,ADJclk : in std_logic;</p><p> alarmADJ : in std_logic;</p><p
20、> AlarmEn : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> hour_unit : in std_logic_vector(3 downto 0);</p>
21、<p> hour_decade : in std_logic_vector(3 downto 0);</p><p> min_unit : in std_logic_vector(3 downto 0);</p><p> min_decade : in std_logic_vec
22、tor(3 downto 0);</p><p> ADJhour_unit : out std_logic_vector(3 downto 0);</p><p> ADJhour_decade : out std_logic_vector(3 downto 0);</p><p> ADJmin_unit
23、 : out std_logic_vector(3 downto 0);</p><p> ADJmin_decade : out std_logic_vector(3 downto 0);</p><p> sound : out std_logic);</p><p> end
24、component;</p><p> component PrescalClk </p><p> port(clkin : in std_logic;</p><p> clkout_1Hz : out std_logic;</p><p> clkout_4Hz : out
25、std_logic);</p><p> end component;</p><p> 3.4、數(shù)字鐘設(shè)計(jì)的RTL電路:</p><p><b> 圖2</b></p><p> 從RTL電路中可以看到,通過綜合后系統(tǒng)模塊劃分為分頻模塊、秒計(jì)數(shù)模塊、分計(jì)數(shù)模塊、時(shí)計(jì)數(shù)模塊、鬧鐘模塊,數(shù)據(jù)選擇輸出模塊,由于系統(tǒng)設(shè)
26、計(jì)時(shí)硬件平臺選用的是模式0,顯示部由硬件譯碼。分頻模塊產(chǎn)生正常走時(shí)的1Hz頻率與校時(shí)用的5Hz頻率,時(shí)分秒計(jì)數(shù)都可有外部按鍵清零,時(shí)分可分別進(jìn)行校時(shí),鬧鐘模塊可根據(jù)需要設(shè)置鬧鈴時(shí)間,輸出部分采用了數(shù)據(jù)選擇器,用于選擇輸出正常走時(shí)或鬧鐘設(shè)置時(shí)間。</p><p><b> 四、設(shè)計(jì)步驟</b></p><p> 步驟1:輸入設(shè)計(jì)項(xiàng)目和存盤</p>&l
27、t;p> 打開QUARTUSII,單擊“file”菜單,將鼠標(biāo)移到New Project Wizard 選項(xiàng)單擊則顯示如圖3 </p><p> 圖3 建立 New Project</p><p> 在第一欄選擇或?qū)懭牍こ涛募?,第二、三欄中建立?xiàng)目名和實(shí)體名,工程文件不能包含中文字符,項(xiàng)目名和實(shí)體必須保持一致,然后選擇目標(biāo)器件如圖4</p><p>&
28、lt;b> 圖4選擇沒標(biāo)器件</b></p><p> 目標(biāo)器件一定要與實(shí)際所用器件一致,最后點(diǎn)擊finish完成彈出圖5</p><p> 圖5建立VHDL文件</p><p> 步驟2:輸入程序并運(yùn)行編譯;</p><p> 在工具欄中點(diǎn)擊file→new,選擇VHDL File,點(diǎn)擊確定建立VHDL文件,在里
29、面鍵入程序,如圖6 </p><p><b> 圖6 輸入程序</b></p><p> 輸入完程序以后點(diǎn)擊工具欄中的保存,再點(diǎn)擊右方一個紫色的三角符號“”,然后運(yùn)行程序,如果程序出現(xiàn)錯誤在改正。編譯通過后如圖7</p><p><b> 7 通過編譯</b></p><p><b>
30、; 步驟3:時(shí)序仿真:</b></p><p> 1.建立波形文件:選擇File->New,在Other File里選擇Vector Waveform File,單擊OK建立波形文件,在Edit->End Time選項(xiàng)中為仿真設(shè)置仿真時(shí)間。雙擊Name下的空白處,彈出Insert Nod or Bus對話框,單擊Node Finder如圖7</p><p>
31、圖7 選擇添加結(jié)點(diǎn)設(shè)置</p><p> 在圖8所示選定各個選擇項(xiàng)。</p><p><b> 圖8 選擇結(jié)點(diǎn)</b></p><p> 單擊OK,完成引腳輸入,加上輸入信號后波形文件存盤。</p><p> 2.運(yùn)行仿真器。在Processing菜單下選擇StartSimulation項(xiàng),直到Simulator
32、 was successful出現(xiàn),仿真結(jié)束。完成波形如圖9所示。</p><p><b> 圖9 仿真波形圖</b></p><p><b> 步驟4:引腳鎖定</b></p><p> 選擇AssignmentsAssignments Editor,鎖定引腳,輸入以后如下圖,設(shè)定完成以后再運(yùn)行一次程序。</
33、p><p><b> 圖10 引腳鎖定</b></p><p><b> 步驟5:編程下載:</b></p><p> 1)首先將下載線把計(jì)算機(jī)的打印機(jī)口與目標(biāo)板(如開發(fā)板或?qū)嶒?yàn)板)連接好,打開電源</p><p> 2)下載方式設(shè)定。選擇ToolsProgrammer選項(xiàng),跳出下圖左側(cè)所示的編
34、程器窗口,然后選擇Hardware Setup硬件設(shè)置選項(xiàng),其窗口圖中左側(cè)所示。在其下拉菜單中選ByteBlaster(MV)編程方式,在Model欄選定JTAG模式。然后點(diǎn)擊start按鈕下載,進(jìn)入下載模式,等待下載完成以后在試驗(yàn)箱上進(jìn)行調(diào)試檢測是否正確。</p><p><b> 五、心得體會</b></p><p> 經(jīng)過兩周EDA課程設(shè)計(jì),使我受益匪淺。這
35、不僅增強(qiáng)了我對EDA設(shè)計(jì)的興趣,更鞏固了基本的電路設(shè)計(jì)流程、方法以及技巧。具備了這些基本知識,為今后的自主學(xué)習(xí)奠定了良好的基礎(chǔ)。在編寫時(shí)可以相互借鑒,這樣可以節(jié)省一定的時(shí)間,但在一個問題上糾結(jié)了很久,現(xiàn)還未明白,為什么一個變量在進(jìn)程中只能被一個邊沿信號觸發(fā)進(jìn)行修改,無奈之下選擇了另一種方法,通過一個控制端來進(jìn)行選頻,以實(shí)現(xiàn)快速調(diào)時(shí),在鬧鐘的處理上使用了數(shù)據(jù)選擇,設(shè)置鬧鈴時(shí)數(shù)碼管顯示鬧鐘時(shí)間。</p><p>
36、在設(shè)計(jì)中還是需要注意一些常見的問題,比如實(shí)體名、項(xiàng)目名等,還有在編寫VHDL文件時(shí),一些文件名也是需要注意的;在編寫程序的過程中,信號與變量的使用是一個特需要注意的,進(jìn)程中一個信號不應(yīng)有多個復(fù)制源,信號的復(fù)值是在進(jìn)程結(jié)束之時(shí),而變量的復(fù)值是立即的,在書寫時(shí)容易出錯的地方是,信號的賦值與變量的賦值符號,信號作為全局的聯(lián)絡(luò)線,信號往往不允許在多個進(jìn)程中被賦值,因?yàn)檫M(jìn)程之間是并行的;整個系統(tǒng)是由多個底層元件組成,底層元件之間的相互連接是通過信
37、號實(shí)現(xiàn)。</p><p> 由于時(shí)間比較緊,在準(zhǔn)備智能車比賽,就沒有挑戰(zhàn)難度高點(diǎn)的題了,但本人對FPGA是挺感興趣的,在今后的學(xué)習(xí)中我會把握時(shí)間好好學(xué)學(xué)。</p><p> 最后感謝姚老師對我們的指導(dǎo),使得實(shí)驗(yàn)?zāi)軌蝽樌瓿桑?lt;/p><p><b> 六、程序代碼:</b></p><p><b> 1
38、分頻:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity PrescalClk is</p><p>
39、 port(clkin : in std_logic;</p><p> clkout_1Hz : out std_logic;</p><p> clkout_4Hz : out std_logic);</p><p><b> end ;</b></p><p&
40、gt; Architecture bhv of PrescalClk is</p><p><b> begin </b></p><p> process(clkin)</p><p> variable count1 : integer range 0 to 32768;</p><p> variable
41、 count2 : integer range 0 to 8192;</p><p><b> begin </b></p><p> if clkin 'event and clkin='1' then count1 := count1+1;count2:=count2+1;</p><p> if(count1
42、=32768) then clkout_1Hz<='1' ;</p><p> else clkout_1Hz<='0';</p><p><b> end if;</b></p><p> if(count2=8192) then clkout_4Hz<='1';<
43、/p><p> else clkout_4Hz<='0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end;
44、</b></p><p><b> 2時(shí)計(jì)數(shù)模塊</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p>
45、; entity hour is</p><p> port(rst,carry,en : in std_logic;</p><p> ADJclk,ADJEN : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> d
46、ecade,unit : out std_logic_vector(3 downto 0));</p><p><b> end ;</b></p><p> architecture bhv of hour is</p><p> signal clk : std_logic;</p><p>
47、<b> begin</b></p><p> process(carry,ADJ,ADJEN,ADJclk)</p><p><b> begin</b></p><p> if (ADJEN='1' and ADJ="1100" )then clk<=ADJclk;&l
48、t;/p><p> else clk<=carry;</p><p><b> end if;</b></p><p> end process;</p><p> process(rst,en,clk)</p><p> variable unitcount : std_logi
49、c_vector(3 downto 0);</p><p> variable decadecount : std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p> if (rst='1') then unitcount:="0000";
50、decadecount:="0000";</p><p> elsif(en='1') then </p><p> if clk 'event and clk='1' then</p><p> if(unitcount<10) then unitcount:=unitcount+1;<
51、;/p><p> else unitcount:="0000";</p><p><b> end if;</b></p><p> if(unitcount=10) then decadecount:=decadecount+1;unitcount:="0000";</p><p&
52、gt;<b> end if;</b></p><p> if(decadecount=2 and unitcount=4) then unitcount:="0000";decadecount:="0000";</p><p><b> end if;</b></p><p>
53、;<b> end if;</b></p><p><b> end if;</b></p><p> decade<=decadecount;</p><p> unit<=unitcount;</p><p> end process;</p><p&g
54、t;<b> end;</b></p><p><b> 3分計(jì)數(shù)模塊:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;&l
55、t;/p><p> entity min is</p><p> port(rst,carry,en : in std_logic;</p><p> ADJclk,ADJEN : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0)
56、;</p><p> carryout : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p><b> end ;</b></p><p> architecture bh
57、v of min is</p><p> signal clk : std_logic;</p><p><b> begin</b></p><p> process(carry,ADJ,ADJEN,ADJclk)</p><p><b> begin</b><
58、/p><p> if (ADJEN='1' and ADJ="0011" )then clk<=ADJclk;</p><p> else clk<=carry;</p><p><b> end if;</b></p><p> end process;</p&
59、gt;<p> process(rst,en,clk,ADJEN)</p><p> variable unitcount : std_logic_vector(3 downto 0);</p><p> variable decadecount : std_logic_vector(3 downto 0);</p><p><b>
60、; begin</b></p><p> if (rst='1') then unitcount:="0000";decadecount:="0000";</p><p> elsif(en='1') then </p><p> if (clk 'event and
61、 clk='1')then</p><p> if(unitcount<10) then unitcount:=unitcount+1;</p><p> else unitcount:="0000";</p><p><b> end if;</b></p><p>
62、 if(unitcount=10) then decadecount:=decadecount+1; unitcount:="0000";</p><p><b> end if;</b></p><p> if(decadecount=6 and unitcount=0) then unitcount:="0000";de
63、cadecount:="0000";</p><p> if ADJEN='0' then carryout<='1'; -- when ADJEN=1,donot generate carry</p><p> else carryout<='0';</p><p>
64、;<b> end if;</b></p><p> else carryout<='0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;&
65、lt;/b></p><p> decade<=decadecount;</p><p> unit<=unitcount;</p><p> end process;</p><p><b> end;</b></p><p><b> 4秒計(jì)數(shù)模塊:<
66、;/b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity sec is</p><p> port(rst,clk
67、,en : in std_logic;</p><p> ADJEN : in std_logic;</p><p> carryout : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));</
68、p><p><b> end ;</b></p><p> architecture bhv of sec is</p><p><b> begin</b></p><p> process(rst,en,clk)</p><p> variable unitcoun
69、t : std_logic_vector(3 downto 0);</p><p> variable decadecount : std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p> if (rst='1') then unitcount:=&qu
70、ot;0000";decadecount:="0000";</p><p> elsif(en='1') then</p><p> if clk'event and clk='1'then</p><p> if(unitcount<10) then unitcount:=uni
71、tcount+1;</p><p> else unitcount:="0000";</p><p><b> end if;</b></p><p> if(unitcount=10) then decadecount:=decadecount+1; unitcount:="0000";</
72、p><p><b> end if;</b></p><p> if(decadecount=6 and unitcount=0) </p><p> then unitcount:="0000";decadecount:="0000";</p><p> if(ADJEN=&
73、#39;0') then carryout<='1'; -- when ADJEN=1, donot generate carry</p><p> else carryout<='0';</p><p><b> end if;</b></p><p> else c
74、arryout<='0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> decade<=decadecount;<
75、;/p><p> unit<=unitcount;</p><p> end process;</p><p><b> end;</b></p><p><b> 5鬧鐘模塊:</b></p><p> library ieee;</p><
76、p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity alarm is</p><p> port(clk,en,ADJclk : in std_logic;</p><p> al
77、armADJ : in std_logic;</p><p> AlarmEn : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> hour_unit
78、 : in std_logic_vector(3 downto 0);</p><p> hour_decade : in std_logic_vector(3 downto 0);</p><p> min_unit : in std_logic_vector(3 downto 0);</p>
79、<p> min_decade : in std_logic_vector(3 downto 0);</p><p> ADJhour_unit : out std_logic_vector(3 downto 0);</p><p> ADJhour_decade : out std_logic_ve
80、ctor(3 downto 0);</p><p> ADJmin_unit : out std_logic_vector(3 downto 0);</p><p> ADJmin_decade : out std_logic_vector(3 downto 0);</p><p> sound
81、 : out std_logic);</p><p><b> end;</b></p><p> architecture bhv of alarm is</p><p> signal hour1,hour2,min1,min2 : std_logic_vector(3 downto 0);</p>
82、<p><b> begin</b></p><p> process(en,alarmADJ,ADJ,ADJclk)</p><p> variable hour_decadecounnt,hour_unitcount,min_decadecount,min_unitcount : std_logic_vector(3 downto 0);<
83、/p><p><b> begin </b></p><p> if (en='1' and alarmADJ='1') then </p><p> if ADJclk 'event and ADJclk='1' then </p><p> if ADJ=&
84、quot;1100" then</p><p> if(hour_unitcount<10) then hour_unitcount:=hour_unitcount+1;</p><p> else hour_unitcount:="0000";</p><p><b> end if;</b><
85、;/p><p> if(hour_unitcount=10) then hour_decadecounnt:=hour_decadecounnt+1;hour_unitcount:="0000";</p><p><b> end if;</b></p><p> if(hour_decadecounnt=2 and ho
86、ur_unitcount=4) then hour_decadecounnt:="0000";hour_unitcount:="0000";</p><p><b> end if;</b></p><p> elsif ADJ="0011" then </p><p> if
87、(min_unitcount<10) then min_unitcount:=min_unitcount+1;</p><p> else min_unitcount:="0000";</p><p><b> end if;</b></p><p> if(min_unitcount=10) then min
88、_decadecount:=min_decadecount+1;min_unitcount:="0000";</p><p><b> end if;</b></p><p> if(min_decadecount=6 and min_unitcount=0) then min_decadecount:="0000";min
89、_unitcount:="0000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</
90、b></p><p> hour1<=hour_decadecounnt;</p><p> hour2<=hour_unitcount;</p><p> min1<=min_decadecount;</p><p> min2<=min_unitcount;</p><p>
91、 end process;</p><p> process(en,AlarmEn,ADJclk,clk,hour_unit,hour_decade,min_unit,min_decade,hour1,hour2,min1,min2)</p><p> variable count : std_logic_vector(3 downto 0);</p><p>
92、<b> begin</b></p><p> if(en='1' and AlarmEn='1') then </p><p> if(hour_unit=hour2 and hour_decade=hour1 and min_unit=min2 and min_decade=min1) then</p><
93、p> if clk 'event and clk='1' then </p><p> if (count<10) then count:=count+1;</p><p> else sound<='0';</p><p><b> end if;</b></
94、p><p><b> end if;</b></p><p> if(count<10) then sound<= ADJclk;</p><p><b> end if;</b></p><p> else count:="0000";sound <=&
95、#39;0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> ADJhour_decade<=hour1;</p><p> ADJhour_unit<=hour2;</p><p
96、> ADJmin_decade<=min1;</p><p> ADJmin_unit<=min2;</p><p> end process;</p><p><b> end;</b></p><p><b> 6頂層文件;</b></p><p&
97、gt; library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity DigitalClock is</p><p> port(clk,en,rst : in std_log
98、ic;</p><p> ADJEN : in std_logic;</p><p> AlarmEn : in std_logic;</p><p> alarmADJ : in std_logic;</p><p> ADJ : in std_logic_
99、vector(3 downto 0);</p><p> sound : out std_logic;</p><p> hour_unit : out std_logic_vector(3 downto 0);</p><p> hour_decade : out std_logic_vector(3 downto 0);</p>
100、<p> min_unit : out std_logic_vector(3 downto 0);</p><p> min_decade : out std_logic_vector(3 downto 0);</p><p> sec_unit : out std_logic_vector(3 downto 0);</p><p>
101、; sec_decade : out std_logic_vector(3 downto 0);</p><p> dote1 : out std_logic_vector(3 downto 0);</p><p> dote2 : out std_logic_vector(3 downto 0));</p><p><b>
102、; end ;</b></p><p> architecture bhv of DigitalClock is</p><p> component hour </p><p> port(rst,carry,en : in std_logic;</p><p> ADJclk,ADJEN : in std_log
103、ic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p> end component;</p><p> component min
104、</p><p> port(rst,carry,en : in std_logic;</p><p> ADJclk,ADJEN : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> carryout
105、 : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p> end component;</p><p> component sec</p><p> port(rst,clk,en : in st
106、d_logic;</p><p> ADJEN : in std_logic;</p><p> carryout : out std_logic;</p><p> decade,unit : out std_logic_vector(3 downto 0));</p><p> end c
107、omponent;</p><p> component alarm</p><p> port(clk,en,ADJclk : in std_logic;</p><p> alarmADJ : in std_logic;</p><p> AlarmEn
108、 : in std_logic;</p><p> ADJ : in std_logic_vector(3 downto 0);</p><p> hour_unit : in std_logic_vector(3 downto 0);</p><p> hour_decade
109、 : in std_logic_vector(3 downto 0);</p><p> min_unit : in std_logic_vector(3 downto 0);</p><p> min_decade : in std_logic_vector(3 downto 0);</p>
110、<p> ADJhour_unit : out std_logic_vector(3 downto 0);</p><p> ADJhour_decade : out std_logic_vector(3 downto 0);</p><p> ADJmin_unit : out std_logic_
111、vector(3 downto 0);</p><p> ADJmin_decade : out std_logic_vector(3 downto 0);</p><p> sound : out std_logic);</p><p> end component;</p><
112、p> component PrescalClk </p><p> port(clkin : in std_logic;</p><p> clkout_1Hz : out std_logic;</p><p> clkout_4Hz : out std_logic);</p><
113、;p> end component;</p><p> signal carry1,carry2,clk_1Hz,clk_4Hz : std_logic;</p><p> signal hour1,hour2,min1,min2 ,ADJhour1,ADJhour2,ADJmin1,ADJmin2 : std_logic_vector(3 downto 0);</p&g
114、t;<p><b> begin</b></p><p> U1 : hour port map(rst=>rst,ADJclk=>clk_4Hz,en=>en,carry=>carry1,ADJEN=>ADJEN,ADJ=>ADJ,decade=>hour1,unit=>hour2);</p><p>
115、; U2 : min port map(rst=>rst,ADJclk=>clk_4Hz,en=>en,carry=>carry2,carryout=>carry1,ADJEN=>ADJEN,ADJ=>ADJ,decade=>min1,unit=>min2);</p><p> U3 : sec port map(rst=>rst,clk=>
116、;clk_1Hz,en=>en,carryout=>carry2,decade=>sec_decade,unit=>sec_unit,ADJEN=>ADJEN);</p><p> U4 : alarm port map(clk=>clk_1Hz,en=>en,ADJclk=>clk_4Hz,alarmADJ=>alarmADJ,AlarmEn=>Al
117、armEn,ADJ=>ADJ,</p><p> hour_unit=>hour2,hour_decade=>hour1,min_unit=>min2,min_decade=>min1,</p><p> ADJhour_decade=>ADJhour1,ADJhour_unit=>ADJhour2,ADJmin_decade=>ADJm
118、in1,ADJmin_unit=>ADJmin2 ,sound=>sound);</p><p> U5 : PrescalClk port map(clkin=>clk,clkout_1Hz=>clk_1Hz,clkout_4Hz=>clk_4Hz);</p><p> process(hour1,hour2,min1,min2,alarmADJ,ADJ
119、hour1,ADJhour2,ADJmin1,ADJmin2)</p><p><b> begin</b></p><p> if(alarmADJ='0') then</p><p> hour_decade<=hour1;</p><p> hour_unit<=hour2;&l
120、t;/p><p> min_decade<=min1;</p><p> min_unit<=min2;</p><p><b> else</b></p><p> hour_decade<=ADJhour1;</p><p> hour_unit<=ADJhour
121、2;</p><p> min_decade<=ADJmin1;</p><p> min_unit<=ADJmin2;</p><p><b> end if;</b></p><p> dote1<="1010";</p><p> dote2&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)報(bào)告--數(shù)字鐘
- eda課程設(shè)計(jì)報(bào)告---數(shù)字鐘設(shè)計(jì)
- eda數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘--eda課程設(shè)計(jì)
- eda數(shù)字鐘課程設(shè)計(jì)
- eda課程數(shù)字鐘設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)——多功能數(shù)字鐘
- eda數(shù)字鐘設(shè)計(jì)報(bào)告
- eda實(shí)現(xiàn)多功能數(shù)字鐘課程設(shè)計(jì)
- eda課程設(shè)計(jì)報(bào)告--基于vhdl的數(shù)字鐘的設(shè)計(jì)
- eda課程設(shè)計(jì)---基于fpga的數(shù)字鐘設(shè)計(jì)
- eda數(shù)字鐘課程設(shè)計(jì)--用vhdl語言實(shí)現(xiàn)數(shù)字鐘的設(shè)計(jì)
- eda課程設(shè)計(jì)--數(shù)字鐘的設(shè)計(jì)與制作
- 數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字鐘課程設(shè)計(jì)報(bào)告
- EDA課程設(shè)計(jì)--數(shù)字鐘的設(shè)計(jì)與制作.doc
- 數(shù)字鐘課程設(shè)計(jì)報(bào)告(正文)
- 數(shù)字邏輯課程設(shè)計(jì)報(bào)告---數(shù)字鐘
評論
0/150
提交評論