eda課程設(shè)計--秒表設(shè)計_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  題目:秒表設(shè)計</b></p><p><b>  內(nèi)容</b></p><p><b>  一:設(shè)計任務(wù)與要求</b></p><p>  秒表的邏輯結(jié)構(gòu)比較簡單,它主要由、顯示譯碼器、分頻器、十進制計數(shù)器、報警器和六進制計數(shù)器組成。在整個秒表中最關(guān)鍵是如何獲得一個精確

2、的100Hz計時脈沖,除此之外,整個秒表還需要一個啟動信號和一個歸零信號,以便能夠隨時啟動及停止。秒表有六個輸出顯示,分別為百分之一秒,十分之一秒、秒、十秒、分、十分,所以共有6個計數(shù)器與之對應(yīng),6個個計數(shù)器全為BCD碼輸出,這樣便于同時顯示譯碼器的連接。當(dāng)計時達(dá)60分鐘后,蜂鳴器鳴響3聲。</p><p><b>  二:設(shè)計原理</b></p><p>  本系

3、統(tǒng)采用自上向下的設(shè)計方案,系統(tǒng)的整體設(shè)計組裝原理圖如圖2-1所示,它主要由控制模塊,時基分屏模塊,計時模塊和顯示模塊四部分組成。各模塊分別完成控制,分屏,計時和顯示的功能</p><p><b>  設(shè)計原理圖</b></p><p><b>  程序模塊</b></p><p><b>  1、控制模塊程序&l

4、t;/b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity ctrl is</p>&l

5、t;p>  port(clr,clk,sp:in std_logic; </p><p>  en:out std_logic);</p><p><b>  end ctrl;</b></p><p>  architecture behave of ctrl is</p><p>  ty

6、pe states is (s0,s1,s2,s3);</p><p>  signal current_state,next_state:states;</p><p><b>  begin</b></p><p>  com:process(sp,current_state)</p><p><b>  

7、begin</b></p><p>  case current_state is</p><p>  when s0=>en<='0';if sp='1' then next_state<=s1;else next_state<=s0;end if;</p><p>  when s1=>e

8、n<='1';if sp='1' then next_state<=s1;else next_state<=s2;end if;</p><p>  when s2=>en<='1';if sp='1' then next_state<=s3;else next_state<=s2;end if;</p

9、><p>  when s3=>en<='0';if sp='1' then next_state<=s3;else next_state<=s0;end if;</p><p><b>  end case;</b></p><p>  end process;</p><

10、;p>  synch:process(clk)</p><p><b>  begin</b></p><p>  if clr='1' then </p><p>  current_state<=s0;</p><p>  elsif clk'event and clk='

11、1' then</p><p>  current_state<=next_state;</p><p><b>  end if;</b></p><p>  end process;</p><p>  end behave;</p><p>  2、時基分頻模塊程序</p

12、><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity cb10 is</p><p>  port(clk: in std_logic;</p><p>  co: buffer std_logic);</p>

13、<p><b>  end cb10;</b></p><p>  architecture art of cb10 is</p><p>  signal counter:integer range 0 to 49999;</p><p><b>  begin</b></p><p>

14、;  process(clk)</p><p><b>  begin</b></p><p>  if (clk='1' and clk'event) then</p><p>  if counter=49999 then</p><p>  counter<=0;</p>

15、<p>  co<= not co;</p><p><b>  else</b></p><p>  counter<=counter+1;</p><p><b>  end if;</b></p><p><b>  end if;</b><

16、/p><p>  end process;</p><p><b>  end art;</b></p><p><b>  3、計時模塊的程序</b></p><p><b>  1)、十進制計數(shù)器</b></p><p>  library ieee;

17、</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity cdu10 is</p><p>  port(clk,clr,en: in std_logic;</p><p>  

18、cn: out std_logic;</p><p>  count10: out std_logic_vector(3 downto 0));</p><p>  end cdu10;</p><p>  architecture art of cdu10 is</p><p>  signal temp:std_logic_vector(

19、3 downto 0);</p><p><b>  begin</b></p><p>  process(clk,clr)</p><p><b>  begin</b></p><p>  if clr='1' then </p><p>  temp&

20、lt;="0000";</p><p><b>  cn<='0'; </b></p><p>  elsif (clk'event and clk='1') then</p><p>  if en='1' then </p><p> 

21、 if temp>="1001" then </p><p>  temp<="0000";</p><p><b>  cn<='1'; </b></p><p><b>  else </b></p><p>  temp

22、<=temp+1;</p><p><b>  cn<='0'; </b></p><p><b>  end if; </b></p><p><b>  end if; </b></p><p><b>  end if; </b

23、></p><p>  count10<=temp;</p><p>  end process;</p><p><b>  end art;</b></p><p><b>  2)、六進制計數(shù)器</b></p><p>  library ieee;<

24、/p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity cdu6 is</p><p>  port(clk,clr,en: in std_logic;</p><p>  cn: o

25、ut std_logic;</p><p>  count6: out std_logic_vector(3 downto 0));</p><p><b>  end cdu6;</b></p><p>  architecture art of cdu6 is</p><p>  signal temp:std_lo

26、gic_vector(3 downto 0);</p><p><b>  begin </b></p><p>  process(clk,clr)</p><p><b>  begin</b></p><p>  if clr='1' then </p><

27、p>  temp<="0000";</p><p><b>  cn<='0'; </b></p><p>  elsif (clk'event and clk='1') then</p><p>  if en='1' then </p>

28、<p>  if temp="0110" then </p><p>  temp<="0000";</p><p><b>  cn<='1'; </b></p><p><b>  else </b></p><p&g

29、t;  temp<=temp+1;</p><p><b>  cn<='0'; </b></p><p><b>  end if; </b></p><p><b>  end if; </b></p><p><b>  end if

30、; </b></p><p>  count6<=temp; </p><p>  end process; </p><p><b>  end art;</b></p><p><b>  3)計時器程序</b></p><p>  library ie

31、ee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity count is</p><p>  port(clk:in std_logic;</p><p>  clr:in std_logic;</p><p>  en:in std_logic;<

32、/p><p>  S_10ms:out std_logic_vector(3 downto 0);</p><p>  S_100ms:out std_logic_vector(3 downto 0);</p><p>  S_1s:out std_logic_vector(3 downto 0);</p><p>  S_10s:out std

33、_logic_vector(3 downto 0);</p><p>  M_1min:out std_logic_vector(3 downto 0);</p><p>  M_10min:out std_logic_vector(3 downto 0));</p><p>  end count;</p><p>  architectu

34、re art of count is</p><p>  component cdu10</p><p>  port(clk,clr,en: in std_logic;</p><p>  cn: out std_logic;</p><p>  count10: out std_logic_vector(3 downto 0));<

35、/p><p>  end component cdu10;</p><p>  component cdu6</p><p>  port(clk,clr,en: in std_logic;</p><p>  cn: out std_logic;</p><p>  count6: out std_logic_vecto

36、r(3 downto 0));</p><p>  end component cdu6;</p><p>  signal A,B,C,D,E,F:std_logic;</p><p><b>  begin </b></p><p>  U1:cdu10 port map (clk,clr,en,A,S_10ms);

37、</p><p>  U2:cdu10 port map (A,clr,en,B,S_100ms);</p><p>  U3:cdu10 port map (B,clr,en,C,S_1s);</p><p>  U4:cdu6 port map (C,clr,en,D,S_10s);</p><p>  U5:cdu10 port map

38、 (D,clr,en,E,M_1min);</p><p>  U6:cdu10 port map (E,clr,en,F,M_10min);</p><p><b>  end art;</b></p><p><b>  4、顯示模塊程序</b></p><p>  1)七段譯碼驅(qū)動器程序<

39、;/p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned; </p><p>  entity bcd7 is </p><p>  port(bcd:in std_logic_

40、vector(3 downto 0); </p><p>  led:out std_logic_vector(6 downto 0)); </p><p>  end bcd7 ; </p><p>  architecture art of bcd7 is </p><p><b>  begin </b><

41、/p><p>  led<= "0111111" when bcd="0000"else</p><p>  "0000110" when bcd="0001"else</p><p>  "1011011" when bcd="0010"

42、else</p><p>  "1001111" when bcd="0011"else</p><p>  "1100110" when bcd="0100"else</p><p>  "1101101" when bcd="0101"e

43、lse</p><p>  "1111101" when bcd="0110"else</p><p>  "0000111" when bcd="0111"else</p><p>  "1111111" when bcd="1000"el

44、se</p><p>  "1101111" when bcd="1001"else</p><p>  "0000000";</p><p><b>  end art; </b></p><p><b>  2)數(shù)據(jù)選擇器程序</b>

45、</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_UNSIGNED.all;</p><p>  entity mulx is</p><p>  port(clk:in std_lo

46、gic;</p><p>  clr:in std_logic;</p><p>  en:in std_logic;</p><p>  S_10ms:in std_logic_vector(3 downto 0);</p><p>  S_100ms:in std_logic_vector(3 downto 0);</p>

47、<p>  S_1s:in std_logic_vector(3 downto 0);</p><p>  S_10s:in std_logic_vector(3 downto 0);</p><p>  M_1min:in std_logic_vector(3 downto 0);</p><p>  M_10min:in std_logic_vecto

48、r(3 downto 0);</p><p>  outbcd:out std_logic_vector(3 downto 0);</p><p>  seg:out std_logic_vector(2 downto 0));</p><p><b>  end mulx;</b></p><p>  architec

49、ture art of mulx is</p><p>  signal count:std_logic_vector(2 downto 0);</p><p><b>  begin</b></p><p>  process(clk)</p><p><b>  begin</b></p&

50、gt;<p>  if (clr='1') then </p><p>  count<="111";</p><p>  elsif (clk='1'and clk'event) then</p><p>  if en='1' then</p><

51、p>  if count="101" then</p><p>  count<="000"; </p><p>  else count<=count+1;</p><p><b>  end if;</b></p><p><b>  end if

52、;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  process(clk)</p><p><b>  begin</b></p><p>  if clk'event and

53、 clk='1'then</p><p>  case count is</p><p>  when "000"=>outbcd<=S_10ms; seg<="000";</p><p>  when "001"=>outbcd<=S_100ms; se

54、g<="001";</p><p>  when "010"=>outbcd<=S_1s; seg<="010";</p><p>  when "011"=>outbcd<=S_10s; seg<="011";</p>

55、<p>  when "100"=>outbcd<=M_1min; seg<="100";</p><p>  when "101"=>outbcd<=M_10min; seg<="101";</p><p>  when others=>null;&l

56、t;/p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end art;</b></p><p><b>  頂層設(shè)計源

57、程序</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  entity stopwatch is </p><p>  port (sp:in std_logic ;</p><p>  clr:in st

58、d_logic;</p><p>  clk:in std_logic;</p><p>  led:out std_logic_vector(6 downto 0);</p><p>  seg:out std_logic_vector(2 downto 0));</p><p>  end stopwatch;</p>&l

59、t;p>  architecture art of stopwatch is </p><p>  component ctrl</p><p>  port(clr:in std_logic ;</p><p>  clk:in std_logic ;</p><p>  sp:in std_logic ;</p>&l

60、t;p>  en:out std_logic );</p><p>  end component;</p><p>  component cb10</p><p>  port(clk:in std_logic;</p><p>  co:out std_logic);</p><p>  end compo

61、nent;</p><p>  component count</p><p>  port (clk:in std_logic;</p><p>  clr:in std_logic;</p><p>  en:in std_logic;</p><p>  S_10ms:out std_logic_vector(3

62、 downto 0);</p><p>  S_100ms:out std_logic_vector(3 downto 0);</p><p>  S_1s:out std_logic_vector(3 downto 0);</p><p>  S_10s:out std_logic_vector(3 downto 0);</p><p> 

63、 M_1min:out std_logic_vector(3 downto 0);</p><p>  M_10min:out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component bcd7</p><p>  port(bcd:in std_l

64、ogic_vector(3 downto 0);</p><p>  led:out std_logic_vector(6 downto 0));</p><p>  end component;</p><p>  component mulx</p><p>  port (clr:in std_logic;</p><

65、;p>  clk:in std_logic;</p><p>  en:in std_logic;</p><p>  S_10ms:in std_logic_vector(3 downto 0);</p><p>  S_100ms:in std_logic_vector(3 downto 0);</p><p>  S_1s:in

66、std_logic_vector(3 downto 0);</p><p>  S_10s:in std_logic_vector(3 downto 0);</p><p>  M_1min:in std_logic_vector(3 downto 0);</p><p>  M_10min:in std_logic_vector(3 downto 0);</

67、p><p>  outbcd:out std_logic_vector(3 downto 0);</p><p>  seg:out std_logic_vector(2 downto 0));</p><p>  end component;</p><p>  signal c,e:std_logic;</p><p>

68、;  signal ms10_s,ms100_s:std_logic_vector(3 downto 0);</p><p>  signal s1_s,s10_s:std_logic_vector(3 downto 0);</p><p>  signal min1_s,min10_s:std_logic_vector(3 downto 0);</p><p> 

69、 signal bcd_s,s:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  u0:ctrl port map(clr,clk,sp,e);</p><p>  u1:cb10 port map(clk,c);</p><p>  u2:c

70、ount port map(c,clr,e,ms10_s,ms100_s,s1_s,s10_s,min1_s,min10_s);</p><p>  u3:mulx port map(clr,clk,e,ms10_s,ms100_s,s1_s,s10_s,min1_s,min10_s,bcd_s,seg);</p><p>  u4:bcd7 port map (bcd_s,led);&l

71、t;/p><p><b>  end art;</b></p><p><b>  設(shè)計解決的關(guān)鍵問題</b></p><p>  本次設(shè)計的關(guān)鍵性問題是分頻和頂層文件的設(shè)計,在分頻代碼段中可以看出我們本次采用的主頻率是5MHZ。1/100秒的頻率為100HZ所以只需要用5MHZ乘以1/50000即可得到100HZ的分頻信號,

72、即1/100秒。數(shù)碼管顯示部分的關(guān)鍵就是弄清楚每個數(shù)字對應(yīng)的二進制代碼,剛開始我們用畫原理圖的方法進行頂層文件設(shè)計,完成了實驗,而后又嘗試用VHDL語言進行程序設(shè)計,雖然程序復(fù)雜而且老出編譯錯誤,期間反復(fù)看書,和上網(wǎng)查找資料,經(jīng)過幾天的修改終于將此頂層程序的設(shè)計工作完成。</p><p><b>  五:設(shè)計分工說明</b></p><p>  主程序設(shè)計,編寫實驗報

73、告——易新會</p><p>  程序修改,用VHDL語言頂層文件設(shè)計——陳虹余</p><p>  上機硬件調(diào)試,用原理圖的方法設(shè)計頂層文件——王偉</p><p>  收集相關(guān)資料、拍照——迪拉熱</p><p><b>  仿真結(jié)果與分析</b></p><p><b>  一:測

74、試數(shù)據(jù)選擇</b></p><p>  測試數(shù)據(jù)選擇為00:00:00——03:56:38</p><p><b>  二:波形分析</b></p><p><b>  三:問題說明</b></p><p>  數(shù)碼管的顯示由sel片選信號來控制。硬件調(diào)試功能正常。</p>

75、<p><b>  總結(jié)</b></p><p>  開始VHDL語言不是很熟練,做設(shè)計時總是會犯一些錯誤且花費的時間比較多,例如在做頂層文件設(shè)計的時候總是會出現(xiàn)一些編譯錯誤,其中有些錯誤是因為一個字母沒寫對而導(dǎo)致,相比較來說在此次設(shè)計中用原理圖做頂層設(shè)計似乎更容易,當(dāng)然這主要是我們做的這個小設(shè)計不是一個大型的系統(tǒng),當(dāng)系統(tǒng)復(fù)雜時用VHDL語言更省事,在編程時,我們使用了自頂向下的

76、設(shè)計思想,這樣程序檢查起來也比較方便,也便于小組分工,做EDA設(shè)計考驗我們的耐心、毅力和細(xì)心,而對錯誤的檢查要求我們要有足夠的耐心,通過這次實戰(zhàn),我們對VHDL語言了解的更深了,也積累了一定的解決問題的經(jīng)驗,對以后從事集成電路設(shè)計工作會有一定的幫助。在設(shè)計工作中,分工很重要,即使你一個人能夠把整個程序?qū)懗鰜?,但與分工良好的組相比較,分工不好的組效率更低</p><p>  在應(yīng)用VHDL的過程中我們領(lǐng)會到了其并行

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論