eda自動值更器課程設計_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  一 緒論</b></p><p>  1 在信息產業(yè)中EDA產生的影響</p><p>  隨著大規(guī)模集成電路技術和計算機技術的不斷發(fā)展,在涉及通信、國防、航天、醫(yī)學、工業(yè)自動化、計算機應用、儀器儀表等領域的電子系統(tǒng)設計工作中,EDA技術的含量正以驚人的速度上升;電子類的高新技術項目的開發(fā)也逾益依賴于EDA技術的應用。即使是普通的電子產品

2、的開發(fā),EDA技術常常使一些原來的技術瓶頸得以輕松突破,從而使產品的開發(fā)周期大為縮短、性能價格比大幅提高。不言而喻,EDA技術將迅速成為電子設計領域中的極其重要的組成部分。</p><p>  2 中國國內EDA發(fā)展情況</p><p>  從目前的EDA技術來看,其發(fā)展趨勢是政府重視、使用普及、應用文泛、工具多樣、軟件功能強大。    中國EDA市場已漸趨成熟,不過

3、大部分設計工程師面向的是PC主板和小型ASIC領域,僅有小部分(約11%)的設計人員工發(fā)復雜的片上系統(tǒng)器件。為了與臺灣和美國的設計工程師形成更有力的競爭,中國的設計隊伍有必要購入一些最新的EDA技術。    在信息通信領域,要優(yōu)先發(fā)展高速寬帶信息網、深亞微米集成電路、新型元器件、計算機及軟件技術、第三代移動通信技術、信息管理、信息安全技術,積極開拓以數字技術、網絡技術為基礎的新一代信息產品,發(fā)展新興產業(yè),培育新的經

4、濟增長點。要大力推進制造業(yè)信息化,積極開展計算機輔助設計(CAD)、計算機輔助工程(CAE)、計算機輔助工藝(CAPP)、計算機機輔助制造(CAM)、產品數據管理(PDM)、制造資源計劃(MRPII)及企業(yè)資源管理(ERP)等。有條件的企業(yè)可開展“網絡制造”,便于合作設計、合作制造,參與國內和國際競爭。開展“數控化”工程和“數字化”工程。自動化儀表的技術發(fā)展趨勢的測試技術、控制技術與計算機技術、通信技術進一步融合,形成測量、控制、通信與

5、計算機(M</p><p><b>  3 課程設計目的</b></p><p> ?。?)加深對VHDL語言設計的理解。</p><p> ?。?)通過對自動值更器的設計加深對EDA課程的理解</p><p>  (3)熟悉MAX+PLUS II仿真軟件的工作方法及應用技術</p><p>&l

6、t;b>  4 課題設計內容</b></p><p>  本次課程設計的主要目的旨在通過獨立完成一個 “自動值更器”的設計,達到對EDA技術的熟練掌握,提升對《EDA技術及應用》課程所學內容的掌握和應用。</p><p>  1、計數24小時的時鐘 </p><p>  2、六位數碼管顯示“時-分-秒” </p><p>&

7、lt;b>  3、五個功能鍵</b></p><p>  Timer 從其它狀態(tài)放回時鐘狀態(tài)</p><p>  Alarm 切換到定時時間的設定</p><p>  Set 按一下,跳到下一個設置區(qū)</p><p>  Down 按一下,所設置區(qū)的數字減1</p><p>  Up 按

8、一下,所設置區(qū)的數字加1</p><p><b>  4、帶有定時功能;</b></p><p>  5、鍵盤的設定值要求在LED上顯示。</p><p><b>  一 設計的總體方案</b></p><p><b>  流程圖:</b></p><p&g

9、t;  本自動值更器由三個模塊組成:</p><p><b> ?。?)時間顯示:</b></p><p>  24小時制顯示時間:小時用8與7數碼管,分鐘用5與4位數碼管,秒由2與1位數碼管表示,小時與分鐘之間、分鐘與秒之間用3和6位數碼管顯示“—”,總計八位七段數碼顯示管。此模式下顯示當前時間。</p><p><b>  (2)

10、校時模式:</b></p><p>  將time鍵置于‘0’,運用功能鍵set鍵對八位數碼管進行選擇,并由功能鍵up鍵進行+1與down鍵進行-1操作,通過此4個功能鍵進行校時設置。</p><p>  Set->數碼管7-> Set->數碼管6-> Set->數碼管5-> Set->數碼管4-> Set->數碼管3-&g

11、t; Set->數碼管2-> Set->數碼管1</p><p>  Up->+1;down->-1;</p><p> ?。?)定時設定模式:</p><p>  將time鍵置于‘1’,設定模式與校時時設定一樣,運用功能鍵set鍵對八位數碼管進行選擇,并由功能鍵up鍵進行+1與down鍵進行-1操作,通過此4個功能鍵進行校時設置。&

12、lt;/p><p>  Set->數碼管7-> Set->數碼管6-> Set->數碼管5-> Set->數碼管4-> Set->數碼管3-> Set->數碼管2-> Set->數碼管1</p><p>  Up->+1;down->-1;</p><p><b>  二

13、 設計的詳細原理</b></p><p>  此多自動值更器是由多個模塊組成,各個模塊實現各自不同的作用,綜合起來,便是自動值更器。</p><p><b>  1、主要模塊如下:</b></p><p> ?。?)輸入一個250KHZ的方波信號</p><p><b>  (2)計時模塊:<

14、/b></p><p>  將time鍵置于‘0’,用軟件設計,當脈沖累計2500000次時secondl自動+1,以此類推,可得出數字時鐘,并用8位7段對各時間進行顯示。</p><p>  輸入:250KHz脈沖,控制鍵time等</p><p><b>  輸出:秒、分、小時</b></p><p><

15、b>  (3)校時模塊:</b></p><p>  將time鍵置于‘0’, 運用功能鍵set鍵對八位數碼管進行選擇,并由功能鍵up鍵進行+1與down鍵進行-1操作,通過此4個功能鍵進行校時設置。</p><p>  輸入:time狀態(tài)轉換鍵,set數碼管選定鍵,up+1鍵,down-1鍵</p><p>  輸出:設定后的 秒,分,小時 &l

16、t;/p><p>  (4)設定定時模塊: </p><p>  與校時操作類似,只是先將time鍵置于‘1’, 再運用功能鍵set鍵對八位數碼管進行選擇,并由功能鍵up鍵進行+1與down鍵進行-1操作,通過此4個功能鍵進行校時設置</p><p>  輸入:time狀態(tài)轉換鍵,set數碼管選定鍵,up+1鍵,down-1鍵</p><p> 

17、 輸出:所定的時間 秒,分,小時</p><p><b>  (5)整點蜂鳴報時</b></p><p>  運用軟件進行設置,當minuteH與minuteL均為零時,蜂鳴器響,也就是沒次整點時,蜂鳴器自動響一分鐘,如果想設置響的時間,可以手動改即可。并且可以手動按下功能鍵naozhong,這樣就可以手動關閉蜂鳴器。</p><p>  輸入

18、:naozhong關閉蜂鳴器鍵</p><p>  輸出:蜂鳴器發(fā)出蜂鳴聲</p><p><b>  2、功能概述</b></p><p>  輸入一個250KHZ的方波信號,運用VHDL語言對其進行編譯,用計數器對方波信號進行技術,當 cnt=2500000時,secondl自動+1,不斷進行累加,可以達到實現數字鐘自動計時功能。并且此自動

19、值更器設有5個功能鍵,(1)time鍵控制顯示狀態(tài),可以選擇時鐘狀態(tài)與定時狀態(tài)的轉換(2)naozhong鍵可以手動關閉蜂鳴器(3) set鍵可以選擇需要改變的數碼管,以便進行調時與設定定時時間(4)up鍵對對應的數據進行+1操作(5)down鍵對對應的數據進行-1操作。通過次5個功能鍵,便可實現自動值更器,擁有計時/校時功能,設定定時功能,自動值更功能。</p><p>  四 設計的步驟和過程</p&g

20、t;<p><b>  1 計時模塊:</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 秒計時。 </p><p><b>  ct:=0;</b></p><p>  secondL:=secondL+1;</p><p>  if secondL=10 then -- 10 秒計時。</p><p>  secondL:=0;</p><p

22、>  secondH:=secondH+1;</p><p><b>  end if;</b></p><p>  if secondH=6 then -- 1 分鐘計時。</p><p>  secondH:=0;</p><p>  minuteL:=minuteL+1;</p><p&g

23、t;  end if; </p><p>  if minuteL=10 then -- 10 分鐘計時。</p><p>  minuteL:=0; </p><p>  minuteH:=minuteH+1;</p><p><b>  end if;</b></p><p>  if

24、 minuteH=6 then -- 1 小計時時。</p><p>  minuteH:=0;</p><p>  hourL:=hourL+1;</p><p><b>  end if;</b></p><p>  if hourL=10 then -- 10 小時計時。</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 小時計時 </p><p><b>  hourH:=0

26、;</b></p><p><b>  hourL:=0;</b></p><p><b>  end if; </b></p><p>  次模塊的主要作用是完成24小時的即時顯示。</p><p><b>  2校時模塊</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>  此模塊的主要功能是進行時鐘初始時

38、間的設置。</p><p><b>  3、設定定時模塊:</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>  此模塊完成鬧鐘的設定。</p&

50、gt;<p><b>  4、顯示模塊設計</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>  此模塊實現數字鐘的顯示及定時時間設定值的顯示。</p><p><b>  五、蜂鳴器模塊設計</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>  此模塊實現鬧鐘蜂鳴以及整點蜂鳴報時。</p><

77、p>  四、設計的仿真和運行結果</p><p> ?。?)將time鍵置于‘0’,輸入clk信號,可以得到時鐘輸出波形為:</p><p>  此時時鐘自動計時,并且將計時數據傳送至顯示管顯示。如上圖asecond=second;</p><p> ?。?)將time鍵置于‘0’,輸入clk信號,并將set改為20分頻信號,up與down信號交叉為1,得到時

78、鐘輸出波形為:</p><p>  如圖所示此時時間不是正常變化,因為有手動設置進行up(+1)操作和down(-1)操作,并且將時間由數碼管顯示。</p><p>  (3)將time鍵置于‘1’,則顯示鬧鐘初始調節(jié)狀態(tài):</p><p>  此時secondl,secondH,minuteL,minuteH,hourL,hourH不受影響,均自動計時,但是并不由

79、數碼管進行顯示,此時顯示的是鬧鐘初定時間,這時均為0。由于set變化,stat 順序發(fā)生變化。</p><p> ?。?)將time置于‘1’,并可以改變set鍵進行數碼管選擇,并用up(+1)操作和down(-1)操作,進行鬧鐘的初步設定。</p><p>  此時可以得到時鐘的初步設定。</p><p> ?。?)外部硬件的鏈接方法如圖</p>&

80、lt;p> ?。?)時鐘顯示如下圖</p><p><b>  時鐘圖如上</b></p><p><b>  鬧鐘初定時間如上圖</b></p><p>  五 課程設計的心得體會</p><p>  EDA的課程設計持續(xù)了兩周,但我卻覺得仿佛還是當日,真是揮指之間,時光已匆匆流逝。在這整整

81、兩個星期的日子里,我感受到了既是成功做出一個模塊的歡喜,也是修改那無限errors時的憂愁,可以說是無數次的苦盡甘來,換來了最后的成功。</p><p>  本身我就對動手的實驗相當有興趣,這次能夠擁有兩周的課程設計時間,我甚是欣慰。從第一天開始知道我的多功能時鐘課題開始,我就第一時間跑去圖書館借資料,回去反復研究,從看懂程序開始入手。雖然開始有些棘手,但我覺得特別的興奮,我不把困難當成攔路虎,反而成為我前進的動

82、力,遇到困難不會就翻書,找不到就問同學,再不行就上網搜,實在不行再問老師,總之想盡一切辦法找到解決方案。可是事與愿違,我的設計總是出那么一點點的小問題,有時候編譯只出現1個error ,但一改就成了20 個errors了,真是讓人哭笑不得,望天興嘆呀!</p><p>  經過兩三天的基礎訓練,我終于能夠完整的看懂程序。首先我將老師給我們基本的時鐘程序進行編譯,封鎖引腳,然后在硬件上得到正確的數碼管顯示。通過這個

83、最基本的操作,我將大體流程映入腦海,可以舉一反三,再困難的程序也不怕。</p><p>  整點報時自然是最簡單的,我首先就加到程序內部,其次我在網上找到了鬧鐘程序,因為跟要求差距過大,所以我先讀懂程序,然后根據自己理解,一步步的加進初始的時鐘程序。這個看似很簡單的過程,卻整整費了4天的時間,期間錯誤百出。我先是運用了多個process,進行模塊化的處理,通過這里面出現的問題我才知道敏感參數列表是不能亂設置的,s

84、ingle是全局變量,而variable只能在一個process中使用等等。后來慢慢理解了其中的原委,發(fā)現我的程序竟如此之長,我決定要大量的刪減,于是我又把多個process改成了一個,看似好像我是又回到了出發(fā)點,但我覺得這絕對是一次質的飛躍,是我能夠依照我的想法自由變換程序的映照。當我自認為要成功的時候,我卻遇到了一個相當棘手的問題,此時error顯示unkown problem internal error:”widthe mism

85、atch in relation opreator”in ebuildbinaryop an line 1347 of file,雖然只有一個問題,但這個問題卻無法定位,以至于我找了很久都沒找到。那幾天我心里很壓抑,明明對的程序,為什么</p><p>  通過這次獨立的課程設計,我學到了很多書本上學不到的東西,尤其是在改正錯誤的時候,我能更加深入的了解VHDL語言的精妙之處。比如同一個process下不能使用不

86、同信號進行event跳變,single與variable之間的差別等等等等。通過這一次一次的親身體驗,我仿佛發(fā)生了一次洗禮,經過了一個質的飛躍?,F在的我已經基本能看懂VHDL程序,改正其中出現的錯誤。</p><p>  希望以后能多多進行這樣的實習,讓自己的能力越來越高。</p><p><b>  參考書目:</b></p><p>  [

87、1] 閻石 主編,《數字電子技術基礎》,高等教育出版社,1998</p><p>  [2] 譚會生等主編,《EDA技術及應用》,西安電子科技大學出版社,2001</p><p>  [3] 廖裕評等主編,《CPLD數字電路設計——使用MAX+plusⅡ入門篇》,清華大學出版社,2001</p><p>  [4] 馮濤等主編,《可編程邏輯器件開發(fā)技術:MAX+pl

88、usⅡ入門與提高》,人民郵電出版社,2002</p><p>  [5] 楊崇志,《特殊新型電子元件手冊》,遼寧科學技術出版社,1999</p><p>  [6] 彭介華,《電子技術課程設計指導》高等教育出版社.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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論