版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 一 緒論</b></p><p> 1 在信息產(chǎn)業(yè)中EDA產(chǎn)生的影響</p><p> 隨著大規(guī)模集成電路技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,在涉及通信、國(guó)防、航天、醫(yī)學(xué)、工業(yè)自動(dòng)化、計(jì)算機(jī)應(yīng)用、儀器儀表等領(lǐng)域的電子系統(tǒng)設(shè)計(jì)工作中,EDA技術(shù)的含量正以驚人的速度上升;電子類的高新技術(shù)項(xiàng)目的開發(fā)也逾益依賴于EDA技術(shù)的應(yīng)用。即使是普通的電子產(chǎn)品
2、的開發(fā),EDA技術(shù)常常使一些原來的技術(shù)瓶頸得以輕松突破,從而使產(chǎn)品的開發(fā)周期大為縮短、性能價(jià)格比大幅提高。不言而喻,EDA技術(shù)將迅速成為電子設(shè)計(jì)領(lǐng)域中的極其重要的組成部分。</p><p> 2 中國(guó)國(guó)內(nèi)EDA發(fā)展情況</p><p> 從目前的EDA技術(shù)來看,其發(fā)展趨勢(shì)是政府重視、使用普及、應(yīng)用文泛、工具多樣、軟件功能強(qiáng)大。 中國(guó)EDA市場(chǎng)已漸趨成熟,不過
3、大部分設(shè)計(jì)工程師面向的是PC主板和小型ASIC領(lǐng)域,僅有小部分(約11%)的設(shè)計(jì)人員工發(fā)復(fù)雜的片上系統(tǒng)器件。為了與臺(tái)灣和美國(guó)的設(shè)計(jì)工程師形成更有力的競(jìng)爭(zhēng),中國(guó)的設(shè)計(jì)隊(duì)伍有必要購(gòu)入一些最新的EDA技術(shù)。 在信息通信領(lǐng)域,要優(yōu)先發(fā)展高速寬帶信息網(wǎng)、深亞微米集成電路、新型元器件、計(jì)算機(jī)及軟件技術(shù)、第三代移動(dòng)通信技術(shù)、信息管理、信息安全技術(shù),積極開拓以數(shù)字技術(shù)、網(wǎng)絡(luò)技術(shù)為基礎(chǔ)的新一代信息產(chǎn)品,發(fā)展新興產(chǎn)業(yè),培育新的經(jīng)
4、濟(jì)增長(zhǎng)點(diǎn)。要大力推進(jìn)制造業(yè)信息化,積極開展計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助工程(CAE)、計(jì)算機(jī)輔助工藝(CAPP)、計(jì)算機(jī)機(jī)輔助制造(CAM)、產(chǎn)品數(shù)據(jù)管理(PDM)、制造資源計(jì)劃(MRPII)及企業(yè)資源管理(ERP)等。有條件的企業(yè)可開展“網(wǎng)絡(luò)制造”,便于合作設(shè)計(jì)、合作制造,參與國(guó)內(nèi)和國(guó)際競(jìng)爭(zhēng)。開展“數(shù)控化”工程和“數(shù)字化”工程。自動(dòng)化儀表的技術(shù)發(fā)展趨勢(shì)的測(cè)試技術(shù)、控制技術(shù)與計(jì)算機(jī)技術(shù)、通信技術(shù)進(jìn)一步融合,形成測(cè)量、控制、通信與
5、計(jì)算機(jī)(M</p><p><b> 3 課程設(shè)計(jì)目的</b></p><p> ?。?)加深對(duì)VHDL語言設(shè)計(jì)的理解。</p><p> ?。?)通過對(duì)自動(dòng)值更器的設(shè)計(jì)加深對(duì)EDA課程的理解</p><p> ?。?)熟悉MAX+PLUS II仿真軟件的工作方法及應(yīng)用技術(shù)</p><p>&l
6、t;b> 4 課題設(shè)計(jì)內(nèi)容</b></p><p> 本次課程設(shè)計(jì)的主要目的旨在通過獨(dú)立完成一個(gè) “自動(dòng)值更器”的設(shè)計(jì),達(dá)到對(duì)EDA技術(shù)的熟練掌握,提升對(duì)《EDA技術(shù)及應(yīng)用》課程所學(xué)內(nèi)容的掌握和應(yīng)用。</p><p> 1、計(jì)數(shù)24小時(shí)的時(shí)鐘 </p><p> 2、六位數(shù)碼管顯示“時(shí)-分-秒” </p><p>&
7、lt;b> 3、五個(gè)功能鍵</b></p><p> Timer 從其它狀態(tài)放回時(shí)鐘狀態(tài)</p><p> Alarm 切換到定時(shí)時(shí)間的設(shè)定</p><p> Set 按一下,跳到下一個(gè)設(shè)置區(qū)</p><p> Down 按一下,所設(shè)置區(qū)的數(shù)字減1</p><p> Up 按
8、一下,所設(shè)置區(qū)的數(shù)字加1</p><p><b> 4、帶有定時(shí)功能;</b></p><p> 5、鍵盤的設(shè)定值要求在LED上顯示。</p><p><b> 一 設(shè)計(jì)的總體方案</b></p><p><b> 流程圖:</b></p><p&g
9、t; 本自動(dòng)值更器由三個(gè)模塊組成:</p><p><b> ?。?)時(shí)間顯示:</b></p><p> 24小時(shí)制顯示時(shí)間:小時(shí)用8與7數(shù)碼管,分鐘用5與4位數(shù)碼管,秒由2與1位數(shù)碼管表示,小時(shí)與分鐘之間、分鐘與秒之間用3和6位數(shù)碼管顯示“—”,總計(jì)八位七段數(shù)碼顯示管。此模式下顯示當(dāng)前時(shí)間。</p><p><b> ?。?)
10、校時(shí)模式:</b></p><p> 將time鍵置于‘0’,運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置。</p><p> Set->數(shù)碼管7-> Set->數(shù)碼管6-> Set->數(shù)碼管5-> Set->數(shù)碼管4-> Set->數(shù)碼管3-&g
11、t; Set->數(shù)碼管2-> Set->數(shù)碼管1</p><p> Up->+1;down->-1;</p><p> ?。?)定時(shí)設(shè)定模式:</p><p> 將time鍵置于‘1’,設(shè)定模式與校時(shí)時(shí)設(shè)定一樣,運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置。&
12、lt;/p><p> Set->數(shù)碼管7-> Set->數(shù)碼管6-> Set->數(shù)碼管5-> Set->數(shù)碼管4-> Set->數(shù)碼管3-> Set->數(shù)碼管2-> Set->數(shù)碼管1</p><p> Up->+1;down->-1;</p><p><b> 二
13、 設(shè)計(jì)的詳細(xì)原理</b></p><p> 此多自動(dòng)值更器是由多個(gè)模塊組成,各個(gè)模塊實(shí)現(xiàn)各自不同的作用,綜合起來,便是自動(dòng)值更器。</p><p><b> 1、主要模塊如下:</b></p><p> ?。?)輸入一個(gè)250KHZ的方波信號(hào)</p><p><b> (2)計(jì)時(shí)模塊:<
14、/b></p><p> 將time鍵置于‘0’,用軟件設(shè)計(jì),當(dāng)脈沖累計(jì)2500000次時(shí)secondl自動(dòng)+1,以此類推,可得出數(shù)字時(shí)鐘,并用8位7段對(duì)各時(shí)間進(jìn)行顯示。</p><p> 輸入:250KHz脈沖,控制鍵time等</p><p><b> 輸出:秒、分、小時(shí)</b></p><p><
15、b> (3)校時(shí)模塊:</b></p><p> 將time鍵置于‘0’, 運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置。</p><p> 輸入:time狀態(tài)轉(zhuǎn)換鍵,set數(shù)碼管選定鍵,up+1鍵,down-1鍵</p><p> 輸出:設(shè)定后的 秒,分,小時(shí) &l
16、t;/p><p> (4)設(shè)定定時(shí)模塊: </p><p> 與校時(shí)操作類似,只是先將time鍵置于‘1’, 再運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置</p><p> 輸入:time狀態(tài)轉(zhuǎn)換鍵,set數(shù)碼管選定鍵,up+1鍵,down-1鍵</p><p>
17、 輸出:所定的時(shí)間 秒,分,小時(shí)</p><p><b> (5)整點(diǎn)蜂鳴報(bào)時(shí)</b></p><p> 運(yùn)用軟件進(jìn)行設(shè)置,當(dāng)minuteH與minuteL均為零時(shí),蜂鳴器響,也就是沒次整點(diǎn)時(shí),蜂鳴器自動(dòng)響一分鐘,如果想設(shè)置響的時(shí)間,可以手動(dòng)改即可。并且可以手動(dòng)按下功能鍵naozhong,這樣就可以手動(dòng)關(guān)閉蜂鳴器。</p><p> 輸入
18、:naozhong關(guān)閉蜂鳴器鍵</p><p> 輸出:蜂鳴器發(fā)出蜂鳴聲</p><p><b> 2、功能概述</b></p><p> 輸入一個(gè)250KHZ的方波信號(hào),運(yùn)用VHDL語言對(duì)其進(jìn)行編譯,用計(jì)數(shù)器對(duì)方波信號(hào)進(jìn)行技術(shù),當(dāng) cnt=2500000時(shí),secondl自動(dòng)+1,不斷進(jìn)行累加,可以達(dá)到實(shí)現(xiàn)數(shù)字鐘自動(dòng)計(jì)時(shí)功能。并且此自動(dòng)
19、值更器設(shè)有5個(gè)功能鍵,(1)time鍵控制顯示狀態(tài),可以選擇時(shí)鐘狀態(tài)與定時(shí)狀態(tài)的轉(zhuǎn)換(2)naozhong鍵可以手動(dòng)關(guān)閉蜂鳴器(3) set鍵可以選擇需要改變的數(shù)碼管,以便進(jìn)行調(diào)時(shí)與設(shè)定定時(shí)時(shí)間(4)up鍵對(duì)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行+1操作(5)down鍵對(duì)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行-1操作。通過次5個(gè)功能鍵,便可實(shí)現(xiàn)自動(dòng)值更器,擁有計(jì)時(shí)/校時(shí)功能,設(shè)定定時(shí)功能,自動(dòng)值更功能。</p><p> 四 設(shè)計(jì)的步驟和過程</p&g
20、t;<p><b> 1 計(jì)時(shí)模塊:</b></p><p> if clk_1k'event and clk_1k = '1' then</p><p> cnt:=cnt+1;</p><p><b> ct:=ct+1;</b></p><p>
21、 if ct=1000 then -- 1 秒計(jì)時(shí)。 </p><p><b> ct:=0;</b></p><p> secondL:=secondL+1;</p><p> if secondL=10 then -- 10 秒計(jì)時(shí)。</p><p> secondL:=0;</p><p
22、> secondH:=secondH+1;</p><p><b> end if;</b></p><p> if secondH=6 then -- 1 分鐘計(jì)時(shí)。</p><p> secondH:=0;</p><p> minuteL:=minuteL+1;</p><p&g
23、t; end if; </p><p> if minuteL=10 then -- 10 分鐘計(jì)時(shí)。</p><p> minuteL:=0; </p><p> minuteH:=minuteH+1;</p><p><b> end if;</b></p><p> if
24、 minuteH=6 then -- 1 小計(jì)時(shí)時(shí)。</p><p> minuteH:=0;</p><p> hourL:=hourL+1;</p><p><b> end if;</b></p><p> if hourL=10 then -- 10 小時(shí)計(jì)時(shí)。</p><p>&
25、lt;b> hourL:=0;</b></p><p> hourH:=hourH+1;</p><p><b> end if; </b></p><p> if hourH=2 and hourL =4 then -- 24 小時(shí)計(jì)時(shí) </p><p><b> hourH:=0
26、;</b></p><p><b> hourL:=0;</b></p><p><b> end if; </b></p><p> 次模塊的主要作用是完成24小時(shí)的即時(shí)顯示。</p><p><b> 2校時(shí)模塊</b></p><p
27、> if clk'event and clk = '1' then</p><p><b> d<=set;</b></p><p><b> k<=up;</b></p><p><b> p<=down</b></p><
28、p> if time='0' then</p><p> if ( d='0' and set='1')then</p><p> stat<=stat+1;</p><p><b> end if;</b></p><p> case stat is
29、</p><p> when 1 => </p><p> if(k='0' and up='1')then</p><p> hourH<=hourH+1;</p><p> elsif( p='0' and down='1')then</p>
30、<p> hourH<= hourH-1;</p><p><b> end if;</b></p><p> when 2 => if( k='0' and up='1')then</p><p> hourL<= hourL+1;</p><
31、;p> elsif( p='0' and down='1')then</p><p> hourL<= hourL-1;</p><p><b> end if;</b></p><p> when 3 => if(k='0' and up='1
32、39;)then</p><p> minuteH<= minuteH +1;</p><p> elsif( p='0' and down='1')then</p><p> minuteH<= minuteH -1;</p><p><b> end if;</b>
33、</p><p> when 4 => if( k='0' and up='1')then</p><p> minuteL<= minuteL+1;</p><p> elsif( p='0' and down='1')then</p><p>
34、 minuteL<= minuteL-1;</p><p><b> end if;</b></p><p><b> when 5=> </b></p><p> if(k='0' and up='1')then</p><p> second
35、H<= secondH +1;</p><p> elsif(p='0' and down='1')then</p><p> secondH<= secondH-1;</p><p><b> end if;</b></p><p> when 6 =>
36、 if( k='0' and up='1')then</p><p> secondL<= secondL +1;</p><p> elsif( p='0' and down='1')then</p><p> secondL<= secondL-1;</p>
37、<p><b> end if;</b></p><p> when others=>null;</p><p><b> end case;</b></p><p><b> end if;</b></p><p> 此模塊的主要功能是進(jìn)行時(shí)鐘初始時(shí)
38、間的設(shè)置。</p><p><b> 3、設(shè)定定時(shí)模塊:</b></p><p> if clk'event and clk = '1' then</p><p><b> d<=set;</b></p><p><b> k<=up;</
39、b></p><p><b> p<=down;</b></p><p> if time='1' then</p><p> if ( d='0' and set='1')then</p><p> stat<=stat+1;</p>
40、<p><b> end if;</b></p><p> case stat is</p><p> when 1 => </p><p> if(k='0' and up='1')then</p><p> alarm_hourH<= alarm_h
41、ourH+1;</p><p> elsif( p='0' and down='1')then</p><p> alarm_hourH<= alarm_hourH-1;</p><p><b> end if;</b></p><p> when 2 =>
42、 if( k='0' and up='1')then</p><p> alarm_hourL<= alarm_hourL+1;</p><p> elsif( p='0' and down='1')then</p><p> alarm_hourL<= alarm_hourL-1;&
43、lt;/p><p><b> end if;</b></p><p> when 3 => if(k='0' and up='1')then</p><p> alarm_minuteH<= alarm_minuteH +1;</p><p> elsif(
44、p='0' and down='1')then</p><p> alarm_minuteH<= alarm_minuteH -1;</p><p><b> end if;</b></p><p> when 4 => if( k='0' and up='
45、1')then</p><p> alarm_minuteL<= alarm_minuteL+1;</p><p> elsif( p='0' and down='1')then</p><p> alarm_minuteL<= alarm_minuteL-1;</p><p><
46、;b> end if;</b></p><p><b> when 5=> </b></p><p> if(k='0' and up='1')then</p><p> alarm_secondH<= alarm_secondH +1;</p><p&g
47、t; elsif(p='0' and down='1')then</p><p> alarm_secondH<=alarm_secondH-1;</p><p><b> end if;</b></p><p> when 6 => if( k='0' and
48、 up='1')then</p><p> alarm_secondL<= alarm_secondL +1;</p><p> elsif( p='0' and down='1')then</p><p> alarm_secondL<= alarm_secondL-1;</p>&l
49、t;p><b> end if;</b></p><p> when others=>null;</p><p><b> end case;</b></p><p><b> end if;</b></p><p> 此模塊完成鬧鐘的設(shè)定。</p&
50、gt;<p><b> 4、顯示模塊設(shè)計(jì)</b></p><p> if (time='0') then</p><p> ahourH<=hourH;</p><p> ahourL<=hourL;</p><p> aminuteH<=minuteH;<
51、/p><p> aminuteL<=minuteL;</p><p> asecondH<=secondH;</p><p> asecondL<=secondL;</p><p> elsif(time='1')then</p><p> ahourH<=alarm_ho
52、urH;</p><p> ahourL<= alarm_hourL;</p><p> aminuteH<= alarm_minuteH;</p><p> aminuteL<= alarm_minuteL;</p><p> asecondH<= alarm_secondH;</p><
53、p> asecondL<= alarm_secondL;</p><p><b> end if;</b></p><p> case cnt is -- To display the time.</p><p> when 0 => L<="000"; -- Enable the leftm
54、ost display.</p><p> case ahourH is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<
55、;=X"DA";--2</p><p> when others => null;</p><p><b> end case;</b></p><p> when 1 => L<="001"; -- Enable the second display.</p>&l
56、t;p> case ahourL is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</
57、p><p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when 6 =&g
58、t; dled<=X"BE";--6</p><p> when 7 => dled<=X"E0";--7</p><p> when 8 => dled<=X"FE";--8</p><p> when 9 => dled<=X"F6";
59、--9</p><p> when others => null;</p><p><b> end case;</b></p><p> when 2 => L<="010"; -- Enable the third display.</p><p> dled<=X
60、"01"; -- Blanked.</p><p> when 3 => L<="011"; -- Enable the fourth display.</p><p> case aminuteH is</p><p> when 0 => dled<=X"FC";--0
61、</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when
62、4 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when others => null;</p><p><b> end case;</b></p><p>
63、when 4 => L<="100"; -- Enable the fifth display.</p><p> case aminuteL is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"6
64、0";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p
65、> when 5 => dled<=X"B6";--5</p><p> when 6 => dled<=X"BE";--6</p><p> when 7 => dled<=X"E0";--7</p><p> when 8 => dled<=
66、X"FE";--8</p><p> when 9 => dled<=X"F6";--9</p><p> when others => null;</p><p><b> end case;</b></p><p> when 5 => L<
67、;="101"; -- Enable the sixth display.</p><p> dled<=X"01"; -- Blanked.</p><p> when 6 => L<="110"; -- Enable the seventh display.</p><p>
68、 case asecondH is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p>
69、<p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when others =>
70、; null;</p><p><b> end case;</b></p><p> when 7 => L<="111"; -- Enable the rightmost display </p><p> case asecondL is</p><p> when 0 =&
71、gt; dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2"
72、;--3</p><p> when 4 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when 6 => dled<=X"BE";--6</p><p> w
73、hen 7 => dled<=X"E0";--7</p><p> when 8 => dled<=X"FE";--8</p><p> when 9 => dled<=X"F6";--9</p><p> when others => null;</p
74、><p><b> end case;</b></p><p><b> end case;</b></p><p> 此模塊實(shí)現(xiàn)數(shù)字鐘的顯示及定時(shí)時(shí)間設(shè)定值的顯示。</p><p><b> 五、蜂鳴器模塊設(shè)計(jì)</b></p><p> if (
75、(hourH = alarm_hourH) and (hourL= alarm_hourL) and (minuteH = alarm_minuteH) and (minuteL = alarm_minuteL)) or ((minuteH=0)and(minuteL=0) )then</p><p> sound<='1';</p><p><b>
76、end if;</b></p><p> if (naozhong='1')then</p><p> sound<='0';</p><p><b> end if;</b></p><p> 此模塊實(shí)現(xiàn)鬧鐘蜂鳴以及整點(diǎn)蜂鳴報(bào)時(shí)。</p><
77、p> 四、設(shè)計(jì)的仿真和運(yùn)行結(jié)果</p><p> ?。?)將time鍵置于‘0’,輸入clk信號(hào),可以得到時(shí)鐘輸出波形為:</p><p> 此時(shí)時(shí)鐘自動(dòng)計(jì)時(shí),并且將計(jì)時(shí)數(shù)據(jù)傳送至顯示管顯示。如上圖asecond=second;</p><p> ?。?)將time鍵置于‘0’,輸入clk信號(hào),并將set改為20分頻信號(hào),up與down信號(hào)交叉為1,得到時(shí)
78、鐘輸出波形為:</p><p> 如圖所示此時(shí)時(shí)間不是正常變化,因?yàn)橛惺謩?dòng)設(shè)置進(jìn)行up(+1)操作和down(-1)操作,并且將時(shí)間由數(shù)碼管顯示。</p><p> ?。?)將time鍵置于‘1’,則顯示鬧鐘初始調(diào)節(jié)狀態(tài):</p><p> 此時(shí)secondl,secondH,minuteL,minuteH,hourL,hourH不受影響,均自動(dòng)計(jì)時(shí),但是并不由
79、數(shù)碼管進(jìn)行顯示,此時(shí)顯示的是鬧鐘初定時(shí)間,這時(shí)均為0。由于set變化,stat 順序發(fā)生變化。</p><p> (4)將time置于‘1’,并可以改變set鍵進(jìn)行數(shù)碼管選擇,并用up(+1)操作和down(-1)操作,進(jìn)行鬧鐘的初步設(shè)定。</p><p> 此時(shí)可以得到時(shí)鐘的初步設(shè)定。</p><p> ?。?)外部硬件的鏈接方法如圖</p>&
80、lt;p> (6)時(shí)鐘顯示如下圖</p><p><b> 時(shí)鐘圖如上</b></p><p><b> 鬧鐘初定時(shí)間如上圖</b></p><p> 五 課程設(shè)計(jì)的心得體會(huì)</p><p> EDA的課程設(shè)計(jì)持續(xù)了兩周,但我卻覺得仿佛還是當(dāng)日,真是揮指之間,時(shí)光已匆匆流逝。在這整整
81、兩個(gè)星期的日子里,我感受到了既是成功做出一個(gè)模塊的歡喜,也是修改那無限errors時(shí)的憂愁,可以說是無數(shù)次的苦盡甘來,換來了最后的成功。</p><p> 本身我就對(duì)動(dòng)手的實(shí)驗(yàn)相當(dāng)有興趣,這次能夠擁有兩周的課程設(shè)計(jì)時(shí)間,我甚是欣慰。從第一天開始知道我的多功能時(shí)鐘課題開始,我就第一時(shí)間跑去圖書館借資料,回去反復(fù)研究,從看懂程序開始入手。雖然開始有些棘手,但我覺得特別的興奮,我不把困難當(dāng)成攔路虎,反而成為我前進(jìn)的動(dòng)
82、力,遇到困難不會(huì)就翻書,找不到就問同學(xué),再不行就上網(wǎng)搜,實(shí)在不行再問老師,總之想盡一切辦法找到解決方案??墒鞘屡c愿違,我的設(shè)計(jì)總是出那么一點(diǎn)點(diǎn)的小問題,有時(shí)候編譯只出現(xiàn)1個(gè)error ,但一改就成了20 個(gè)errors了,真是讓人哭笑不得,望天興嘆呀!</p><p> 經(jīng)過兩三天的基礎(chǔ)訓(xùn)練,我終于能夠完整的看懂程序。首先我將老師給我們基本的時(shí)鐘程序進(jìn)行編譯,封鎖引腳,然后在硬件上得到正確的數(shù)碼管顯示。通過這個(gè)
83、最基本的操作,我將大體流程映入腦海,可以舉一反三,再困難的程序也不怕。</p><p> 整點(diǎn)報(bào)時(shí)自然是最簡(jiǎn)單的,我首先就加到程序內(nèi)部,其次我在網(wǎng)上找到了鬧鐘程序,因?yàn)楦蟛罹噙^大,所以我先讀懂程序,然后根據(jù)自己理解,一步步的加進(jìn)初始的時(shí)鐘程序。這個(gè)看似很簡(jiǎn)單的過程,卻整整費(fèi)了4天的時(shí)間,期間錯(cuò)誤百出。我先是運(yùn)用了多個(gè)process,進(jìn)行模塊化的處理,通過這里面出現(xiàn)的問題我才知道敏感參數(shù)列表是不能亂設(shè)置的,s
84、ingle是全局變量,而variable只能在一個(gè)process中使用等等。后來慢慢理解了其中的原委,發(fā)現(xiàn)我的程序竟如此之長(zhǎng),我決定要大量的刪減,于是我又把多個(gè)process改成了一個(gè),看似好像我是又回到了出發(fā)點(diǎn),但我覺得這絕對(duì)是一次質(zhì)的飛躍,是我能夠依照我的想法自由變換程序的映照。當(dāng)我自認(rèn)為要成功的時(shí)候,我卻遇到了一個(gè)相當(dāng)棘手的問題,此時(shí)error顯示unkown problem internal error:”widthe mism
85、atch in relation opreator”in ebuildbinaryop an line 1347 of file,雖然只有一個(gè)問題,但這個(gè)問題卻無法定位,以至于我找了很久都沒找到。那幾天我心里很壓抑,明明對(duì)的程序,為什么</p><p> 通過這次獨(dú)立的課程設(shè)計(jì),我學(xué)到了很多書本上學(xué)不到的東西,尤其是在改正錯(cuò)誤的時(shí)候,我能更加深入的了解VHDL語言的精妙之處。比如同一個(gè)process下不能使用不
86、同信號(hào)進(jìn)行event跳變,single與variable之間的差別等等等等。通過這一次一次的親身體驗(yàn),我仿佛發(fā)生了一次洗禮,經(jīng)過了一個(gè)質(zhì)的飛躍?,F(xiàn)在的我已經(jīng)基本能看懂VHDL程序,改正其中出現(xiàn)的錯(cuò)誤。</p><p> 希望以后能多多進(jìn)行這樣的實(shí)習(xí),讓自己的能力越來越高。</p><p><b> 參考書目:</b></p><p> [
87、1] 閻石 主編,《數(shù)字電子技術(shù)基礎(chǔ)》,高等教育出版社,1998</p><p> [2] 譚會(huì)生等主編,《EDA技術(shù)及應(yīng)用》,西安電子科技大學(xué)出版社,2001</p><p> [3] 廖裕評(píng)等主編,《CPLD數(shù)字電路設(shè)計(jì)——使用MAX+plusⅡ入門篇》,清華大學(xué)出版社,2001</p><p> [4] 馮濤等主編,《可編程邏輯器件開發(fā)技術(shù):MAX+pl
88、usⅡ入門與提高》,人民郵電出版社,2002</p><p> [5] 楊崇志,《特殊新型電子元件手冊(cè)》,遼寧科學(xué)技術(shù)出版社,1999</p><p> [6] 彭介華,《電子技術(shù)課程設(shè)計(jì)指導(dǎo)》高等教育出版社.2000年出版.</p><p> [7] Mark Zwolinski, Digital System Design with VHDL, 電子工業(yè)出
89、版社,2002</p><p> [8] Alan B. Marcovitz Introduction to logic Design, 電子工業(yè)出版社,2002</p><p><b> 附錄1:</b></p><p><b> 總程序如下:</b></p><p> library I
90、EEE;</p><p> use IEEE.std_logic_1164.all;</p><p> entity timer is</p><p> port(clk : in std_logic; -- System clock input port(250KHz).</p><p> naozhong:in std_logi
91、c;</p><p> L : out std_logic_vector(2 downto 0); -- 8 seven-segment displays selection ports.</p><p> dled: out std_logic_vector(7 downto 0); -- Digits display ports.</p><p> t
92、ime:in std_logic;</p><p> sound: out std_logic;</p><p> clk_1:in std_logic;</p><p> clk_2:in std_logic;</p><p> clk_3:in std_logic);</p><p> end timer
93、;</p><p> architecture display of timer is</p><p> signal cnt: integer range 0 to 7; -- 8 seven-segment displays seletion counter.</p><p> signal ct:integer range 0 to 250000 ; -
94、- 1 second generator counter.</p><p> signal hourH,ahourH,alarm_hourH: integer range 0 to 2; </p><p> signal minuteH,secondH,aminuteH,asecondH,alarm_minuteH,alarm_secondH: integer range 0 to 6
95、;</p><p> signal hourL,minuteL,secondL,ahourL,aminuteL,asecondL,alarm_hourL,alarm_minuteL,alarm_secondL: integer range 0 to 10;</p><p> signal set : integer range 0 to 7;</p><p>
96、 signal d,k,p: std_logic;</p><p><b> begin</b></p><p> process (clk)</p><p><b> begin</b></p><p> if clk'event and clk = '1' the
97、n</p><p> sound<='1';</p><p> cnt<=cnt+1;</p><p><b> ct<=ct+1;</b></p><p> if ct=250000 then -- 1 second </p><p><b>
98、 ct<=0;</b></p><p> secondL<=secondL+1;</p><p><b> end if;</b></p><p> if secondL=10 then -- 10 seconds</p><p> secondL<=0;</p>&
99、lt;p> secondH<=secondH+1;</p><p><b> end if;</b></p><p> if secondH=6 then -- 60 seconds(1 minute)</p><p> secondH<=0;</p><p> minuteL<=min
100、uteL+1;</p><p><b> end if; </b></p><p> if minuteL=10 then -- 10 minutes</p><p> minuteL<=0;</p><p> minuteH<=minuteH+1;</p><p><b
101、> end if;</b></p><p> if minuteH=6 then -- 60 minutes(1 hour)</p><p> minuteH<=0;</p><p> hourL<=hourL+1;</p><p><b> end if; </b></p
102、><p> if hourL=10 then -- 10 hours</p><p><b> hourL<=0;</b></p><p> hourH<=hourH+1;</p><p> end if; </p><p> if hourH=2 and hourL =4
103、then -- 24 hours </p><p><b> hourH<=0;</b></p><p><b> hourL<=0;</b></p><p><b> end if; </b></p><p> if (time='0')
104、then</p><p> ahourH<=hourH;</p><p> ahourL<=hourL;</p><p> aminuteH<=minuteH;</p><p> aminuteL<=minuteL;</p><p> asecondH<=secondH;<
105、/p><p> asecondL<=secondL;</p><p> elsif(time='1')then</p><p> ahourH<=alarm_hourH;</p><p> ahourL<= alarm_hourL;</p><p> aminuteH<=
106、alarm_minuteH;</p><p> aminuteL<= alarm_minuteL;</p><p> asecondH<= alarm_secondH;</p><p> asecondL<= alarm_secondL;</p><p><b> end if;</b><
107、/p><p> case cnt is -- To display the time.</p><p> when 0 => L<="000"; -- Enable the leftmost display.</p><p> case ahourH is</p><p> when 0 => dle
108、d<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when others => null;</p><p>
109、<b> end case;</b></p><p> when 1 => L<="001"; -- Enable the second display.</p><p> case ahourL is</p><p> when 0 => dled<=X"FC";--0&
110、lt;/p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when 4
111、 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when 6 => dled<=X"BE";--6</p><p> when 7 => dled<=X"E0&qu
112、ot;;--7</p><p> when 8 => dled<=X"FE";--8</p><p> when 9 => dled<=X"F6";--9</p><p> when others => null;</p><p><b> end cas
113、e;</b></p><p> when 2 => L<="010"; -- Enable the third display.</p><p> dled<=X"01"; -- Blanked.</p><p> when 3 => L<="011";
114、-- Enable the fourth display.</p><p> case aminuteH is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> w
115、hen 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p> when 5 => dled<=X"
116、B6";--5</p><p> when others => null;</p><p><b> end case;</b></p><p> when 4 => L<="100"; -- Enable the fifth display.</p><p> c
117、ase aminuteL is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p>&
118、lt;p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when 6 => dled&
119、lt;=X"BE";--6</p><p> when 7 => dled<=X"E0";--7</p><p> when 8 => dled<=X"FE";--8</p><p> when 9 => dled<=X"F6";--9</
120、p><p> when others => null;</p><p><b> end case;</b></p><p> when 5 => L<="101"; -- Enable the sixth display.</p><p> dled<=X"01
121、"; -- Blanked.</p><p> when 6 => L<="110"; -- Enable the seventh display.</p><p> case asecondH is</p><p> when 0 => dled<=X"FC";--0</p&
122、gt;<p> when 1 => dled<=X"60";--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when 4 =>
123、 dled<=X"66";--4</p><p> when 5 => dled<=X"B6";--5</p><p> when others => null;</p><p><b> end case;</b></p><p> when 7
124、=> L<="111"; -- Enable the rightmost display </p><p> case asecondL is</p><p> when 0 => dled<=X"FC";--0</p><p> when 1 => dled<=X"60&q
125、uot;;--1</p><p> when 2 => dled<=X"DA";--2</p><p> when 3 => dled<=X"F2";--3</p><p> when 4 => dled<=X"66";--4</p><p>
126、; when 5 => dled<=X"B6";--5</p><p> when 6 => dled<=X"BE";--6</p><p> when 7 => dled<=X"E0";--7</p><p> when 8 => dled<=X&q
127、uot;FE";--8</p><p> when 9 => dled<=X"F6";--9</p><p> when others => null;</p><p><b> end case;</b></p><p><b> end case;&l
128、t;/b></p><p><b> d<=clk_1;</b></p><p><b> k<=clk_2;</b></p><p><b> p<=clk_3;</b></p><p> if time='1' then<
129、;/p><p> if ( d='0' and clk_1='1')then</p><p> set<=set+1;</p><p><b> end if;</b></p><p> case set is</p><p> when 1 =>
130、 </p><p> if(k='0' and clk_2='1')then</p><p> alarm_hourH<= alarm_hourH+1;</p><p> elsif( p='0' and clk_3='1')then</p><p> alarm_
131、hourH<= alarm_hourH-1;</p><p><b> end if;</b></p><p> when 2 => if( k='0' and clk_2='1')then</p><p> alarm_hourL<= alarm_hourL+1;</p
132、><p> elsif( p='0' and clk_3='1')then</p><p> alarm_hourL<= alarm_hourL-1;</p><p><b> end if;</b></p><p> when 3 => if(k='
133、0' and clk_2='1')then</p><p> alarm_minuteH<= alarm_minuteH +1;</p><p> elsif( p='0' and clk_3='1')then</p><p> alarm_minuteH<= alarm_minuteH -1
134、;</p><p><b> end if;</b></p><p> when 4 => if( k='0' and clk_2='1')then</p><p> alarm_minuteL<= alarm_minuteL+1;</p><p> el
135、sif( p='0' and clk_3='1')then</p><p> alarm_minuteL<= alarm_minuteL-1;</p><p><b> end if;</b></p><p><b> when 5=> </b></p>&l
136、t;p> if(k='0' and clk_2='1')then</p><p> alarm_secondH<= alarm_secondH +1;</p><p> elsif(p='0' and clk_3='1')then</p><p> alarm_secondH<
137、=alarm_secondH-1;</p><p><b> end if;</b></p><p> when 6 => if( k='0' and clk_2='1')then</p><p> alarm_secondL<= alarm_secondL +1;</p&
138、gt;<p> elsif( p='0' and clk_3='1')then</p><p> alarm_secondL<= alarm_secondL-1;</p><p><b> end if;</b></p><p> when others=>null;</p
139、><p><b> end case;</b></p><p><b> end if;</b></p><p> if time='0' then</p><p> if ( d='0' and clk_1='1')then</p>
140、<p> set<=set+1;</p><p><b> end if;</b></p><p> case set is</p><p> when 1 => </p><p> if(k='0' and clk_2='1')then</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)--出租車自動(dòng)計(jì)費(fèi)器
- eda課程設(shè)計(jì)報(bào)告--eda數(shù)字搶答器
- eda課程設(shè)計(jì)- 自動(dòng)電子鐘
- eda課程設(shè)計(jì)--自動(dòng)售貨機(jī)
- eda課程設(shè)計(jì)-搶答器
- eda課程設(shè)計(jì)---自動(dòng)電子琴
- eda課程設(shè)計(jì)--計(jì)費(fèi)器
- 自動(dòng)繞線機(jī)eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)自動(dòng)奏樂器2
- eda課程設(shè)計(jì)--eda課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- eda課程設(shè)計(jì)---搶答器
- eda課程設(shè)計(jì)-- eda與數(shù)字系統(tǒng)課程設(shè)計(jì)
- eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)---彩燈控制器
- eda課程設(shè)計(jì)—音樂播放器
- eda課程設(shè)計(jì)---競(jìng)賽搶答器
- eda數(shù)字搶答器課程設(shè)計(jì)
- eda課程設(shè)計(jì)---自動(dòng)售貨機(jī)設(shè)計(jì)
- eda課程設(shè)計(jì)--電梯控制器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論