eda課程設(shè)計(jì)---彩燈控制器_第1頁
已閱讀1頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  電子設(shè)計(jì)自動化大作業(yè)</p><p>  題 目 彩燈控制器的設(shè)計(jì) </p><p>  學(xué) 院 **學(xué)院 </p><p>  班 級 電氣** </p><p>  學(xué) 號

2、 ********** </p><p>  姓 名 ******** </p><p>  二O一二年十月三十一日</p><p><b>  彩燈控制器的設(shè)計(jì)</b></p><p>  彩燈控制器的設(shè)計(jì)要求</p><p>  設(shè)計(jì)能讓一排彩燈(8只

3、)自動改變顯示花樣的控制系統(tǒng),發(fā)光二極管可作為彩燈用??刂破鲬?yīng)有兩種控制方式:</p><p>  (1)規(guī)則變化。變化節(jié)拍有0.5秒和0.x秒兩種,交替出現(xiàn),每種節(jié)拍可有4種花樣,各執(zhí)行一或二個(gè)周期后輪換。</p><p> ?。?)隨機(jī)變化。無規(guī)律任意變化。</p><p>  二、彩燈控制器的設(shè)計(jì)原理</p><p>  本次彩燈控制器

4、的設(shè)計(jì)包含幾個(gè)主要模塊, 一是彩燈顯示和揚(yáng)聲器的時(shí)序控制部分, 二是 發(fā)光二極管的動態(tài)顯示和數(shù)碼管的動態(tài)顯示,本次設(shè)計(jì)中,二者的顯示同步變化;三是揚(yáng)聲 器的控制部分。流程圖如下所示:</p><p>  圖 1 彩燈控制器的設(shè)計(jì)流程圖</p><p>  彩燈控制器的設(shè)計(jì)核心主要是分頻器的使用,顯示部分的設(shè)計(jì)較簡易。分頻的方法有很 多種,本次設(shè)計(jì)之采用了其中較簡易的一種,通過計(jì)數(shù)器的分頻,

5、將控制器外接的頻率分為 幾個(gè)我們預(yù)先設(shè)定的值。當(dāng)計(jì)數(shù)器達(dá)到預(yù)先設(shè)定的值,即產(chǎn)生一個(gè)上升沿,從而實(shí)現(xiàn)分頻。 揚(yáng)聲器通過不同的頻率控制發(fā)出不同的聲音。 同樣發(fā)光二極管和數(shù)碼管的顯示速度也由其中 分出來的一種頻率控制(控制顯示頻率在 1~4 之間為宜) 。通過使能端的控制可以控制不同 的數(shù)碼管顯示預(yù)先設(shè)定的圖案,數(shù)碼管依次顯示的圖案為 AA、BB、CC,并隨著發(fā)光二極 管同步動態(tài)顯示。AA 為自左向右顯示,BB 為自右向左顯示,CC 從二邊向

6、中間再由中間向 二邊發(fā)散顯示。與此同時(shí),顯示不同的花型時(shí)揚(yáng)聲器發(fā)出不同的聲音,代表不同的花型。本 次設(shè)計(jì)還帶有復(fù)位功能,通過復(fù)位可以使彩燈控制器恢復(fù)到最初的狀態(tài)。 </p><p><b>  三、程序設(shè)計(jì)和分析</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all

7、;</p><p>  use ieee.std_logic_unsigned.all; </p><p>  建立設(shè)計(jì)庫和標(biāo)準(zhǔn)程序包</p><p>  實(shí)體部分: entity pan is</p><p>  port(clk:in std_logic; </p><p>  clr:in std_logic;&

8、lt;/p><p>  speak:out std_logic; </p><p>  led7s1:out std_logic_vector(6 downto 0);</p><p>  led7s2:out std_logic_vector(7 downto 0);</p><p>  led_selout:out std_logic_vec

9、tor(7 downto 0);</p><p>  end entity; </p><p>  實(shí)體名為 pan,定義端口,輸入端口為 clk 和 clr ,其中 clk 接脈沖信號,clr 接復(fù)位端;輸出 端口 speak 接揚(yáng)聲器,led7s1 接數(shù)碼管的七段顯示部分,led7s 接八個(gè)發(fā)光二極管,led_selout 接八個(gè)數(shù)碼管的使能端,控制數(shù)碼管的循環(huán)顯示。 </p&g

10、t;<p>  結(jié)構(gòu)體部分: architecture one of pan is</p><p>  signal s: std_logic_vector(4 downto 0);</p><p>  signal clk1:std_logic; signal clk2:std_logic;</p><p>  signal clk3:std_log

11、ic;</p><p>  定義 4 個(gè)信號,cq,cllk1,clk2,clk3.</p><p>  process(clk)</p><p>  variable a:std_logic_vector(5 downto 0); </p><p><b>  begin </b></p><p&g

12、t;  if clr='1' then </p><p>  clk1<='0'; </p><p><b>  else </b></p><p>  if clk'event and clk='1'then</p><p>  if a="110

13、010"then</p><p>  a:="000000";</p><p>  clk1<='1'; </p><p>  else a:=a+1;</p><p>  clk1<='0'; </p><p><b>  end i

14、f; </b></p><p><b>  end if; </b></p><p><b>  end if; </b></p><p>  end process;</p><p>  以上程序?yàn)榈谝淮畏诸l,為 50 分頻,當(dāng) clk 發(fā)生變化,使 a 從 000000 變化到 11

15、0010 時(shí) 產(chǎn)生一個(gè)上升沿 clk1。如果 a 沒有變化到 110010 則 a 繼續(xù)自加,直到 110010 為止產(chǎn)生下一 個(gè)上升沿。</p><p>  process(clk)</p><p>  variable b:std_logic_vector(4 downto 0); </p><p><b>  begin</b></

16、p><p>  if clr='1' then</p><p>  clk2<='0'; -----復(fù)位信號</p><p><b>  else</b></p><p>  if clk'event and clk='1'then </p&g

17、t;<p>  if b="11001"then </p><p>  b:="00000"; clk2<='1';</p><p><b>  else</b></p><p><b>  b:=b+1; </b></p><

18、p>  clk2<='0'; e</p><p><b>  nd if;</b></p><p><b>  end if;</b></p><p><b>  end if; </b></p><p>  end process;</p&g

19、t;<p>  以上程序?yàn)閷?clk 進(jìn)行 25 分頻,原理同上,產(chǎn)生信號 clk2。</p><p>  process(clk) </p><p>  variable c:std_logic_vector(2 downto 0);</p><p><b>  begin</b></p><p>  i

20、f clr='1' then</p><p>  clk3<='0'; ----復(fù)位信號</p><p><b>  else</b></p><p>  if clk'event and clk='1'then</p><p>  if c="

21、;111"then</p><p><b>  c:="000";</b></p><p>  clk3<='1';</p><p>  else c:=c+1;</p><p>  clk3<='0';</p><p>&

22、lt;b>  end if;</b></p><p><b>  end if; </b></p><p><b>  end if;</b></p><p>  end process; </p><p>  以上程序?yàn)閷?clk 進(jìn)行 8 分頻,產(chǎn)生一個(gè)新的時(shí)鐘脈沖信號 clk

23、3。</p><p>  數(shù)碼管及二極管循環(huán)顯示時(shí)序控制程序:</p><p>  process(clk2) </p><p>  variable z:integer range 0 to 20;</p><p><b>  begin</b></p><p>  if clr='1&

24、#39; then</p><p>  s<="00000"; -------復(fù)位信號</p><p><b>  else</b></p><p>  if clk'event and clk='1'then</p><p><b>  z:=z

25、+1; </b></p><p>  if z=20then s<=s+1;s:=0; </p><p>  if s="10111" then s<="00000"; </p><p>  else s<=s+1;</p><p><b>  end if;&l

26、t;/b></p><p><b>  end if;</b></p><p><b>  end if; </b></p><p><b>  end if;</b></p><p>  end process; </p><p>  該段程序的

27、目的是對 clk2 再進(jìn)行一次分頻,當(dāng) clk2 發(fā)生變化,并且變化為上升沿時(shí),z 就加 1,直到加到為 20 時(shí),s 就發(fā)生變化,加 1,每當(dāng) s 發(fā)生變化,加到 30 時(shí),s 就加 1。 當(dāng) s 從 00000 變化到 10111 時(shí), 就對 s 清零, 從而實(shí)現(xiàn)數(shù)碼顯示管和發(fā)光二極管的循環(huán)顯示, 以達(dá)到顯示速度的要求。</p><p>  發(fā)光二極管及數(shù)碼管顯示程序:</p><p>

28、;  process(s)</p><p><b>  begin </b></p><p>  case s is when"00000"=>led7s1<="0001000";led7s2<="01111111";speak<=clk1;led_selout<="1

29、1000000"; when "00001"=>led7s1<="0001000";led7s2<="10111111";speak<=clk1;led_selout<="01100000"; when "00010"=>led7s1<="0001000";led7s

30、2<="11011111";speak<=clk1;led_selout<="00110000"; when "00011"=>led7s1<="0001000";led7s2<="11101111";speak<=clk1;led_selout<="00011000";

31、 when "00100"=>led7s1<="0001000";led7s2<="11110111";speak<=clk1;led_selout<="00001100"; when "00101"=>led7s1<="0001000";led7s2<="11

32、111011";speak</p><p>  when "01000"=>led7s1<="0000011";led7s2<="11111110";speak<=clk2;led_selout<="00000011"; when "01001"=>led7s1<

33、="0000011";led7s2<="11111101";speak<=clk2;led_selout<="00000110"; when "01010"=>led7s1<="0000011";led7s2<="11111011";speak<=clk2;led_selout

34、<="00001100"; when "01011"=>led7s1<="0000011";led7s2<="11110111";speak<=clk2;led_selout<="00011000"; when "01100"=>led7s1<="0000011

35、";led7s2<="11101111";speak<=clk2;led_selout<="00110000"; when "01101"=>led7s1<="0000011";led7s2<="11011111";speak<=clk2;le</p><p> 

36、 when "10000"=>led7s1<="1000110";led7s2<="01111110";speak<=clk3;led_selout<="10000001"; when"10001"=>led7s1<="1000110";led7s2<="101

37、11101";speak<=clk3;led_selout<="01000010"; when"10010"=>led7s1<="1000110";led7s2<="11011011";speak<=clk3;led_selout<="00100100"; when "1001

38、1"=>led7s1<="1000110";led7s2<="11100111";speak<=clk3;led_selout<="00011000"; when"10100"=>led7s1<="1000110";led7s2<="11100111";spea

39、k<=clk3;led_selout<="00011000"; when"10101"=>led7s1<="1000110";led7s2<="11011011";speak<=clk3;led_se</p><p><b>  end case;</b></p>

40、<p>  end process;</p><p><b>  end;</b></p><p>  此段程序就是當(dāng)敏感信號 s 發(fā)生變化至 10000 時(shí),對數(shù)碼管進(jìn)行置位和置型,1000110 也就是對相應(yīng)的數(shù)碼管使之顯示花型為 C,通過對數(shù)碼管使能端的置位,控制顯示的數(shù)碼管 顯示為 CC ,并且發(fā)光二極管最左邊第一個(gè)和最右邊第一個(gè)顯示為亮。當(dāng) S

41、每變化一次, 數(shù)碼管向中間移動一格, 發(fā)光二極管也同步中間移動, 可以看到由二邊向中間移動再發(fā)散到 二邊的變化過程。當(dāng) s 變化到 10111 之后執(zhí)行再循環(huán)顯示 A 花型,同時(shí)揚(yáng)聲器發(fā)出聲音。</p><p><b>  四、波形仿真分析</b></p><p>  程序經(jīng)過編譯之后即可進(jìn)行波形的仿真,為了方便觀察顯示結(jié)果,這里調(diào)節(jié)仿真時(shí)間為 3us ,脈沖頻率 c

42、lk 的周期為 5ns,復(fù)位信號暫且不進(jìn)行仿真.。執(zhí)行 Quartus 軟件中的 processing--> start simulation 選項(xiàng),即可觀察到波形仿真圖像。如下圖所示為顯示花型 AA 的仿真結(jié)果。</p><p>  圖 2 花型 A 波形仿真圖</p><p>  由圖 2 可知,當(dāng) clk 發(fā)生變化,來上升沿時(shí),led7s1 為 0001000 即數(shù)碼管首先顯示

43、為花 型 A 二極管按規(guī)定的顯示,首先 led7s2 位 01111111 即最右邊的二極管亮燈,led_selout 為 11000000 即最右邊的 2 個(gè)數(shù)碼管顯示 2 個(gè) A 的花型。當(dāng) clk 變化到規(guī)定次數(shù)時(shí)二極管的顯 示開始按左移動,數(shù)碼顯示管也向左移動。Led7s2 依次變化 01111111~11111110,實(shí)現(xiàn)二極 管的向左移動;led_selout 也依次變化 11000000~00000011 實(shí)現(xiàn)數(shù)碼顯示管的

44、向左移動。同 時(shí)當(dāng) clk 信號變化 50 次時(shí)產(chǎn)生一個(gè)上升沿 clk1,控制揚(yáng)聲器發(fā)出聲音。</p><p>  圖 3 花型 BB 的波形仿真圖</p><p>  由圖 3 可知,當(dāng) clk 發(fā)生變化,來上升沿時(shí),led7s1 為 0000011 即數(shù)碼管首先顯示為花 型 B 二極管按規(guī)定的顯示,首先 led7s2 位 11111110 即最右邊的二極管亮燈,led_selout 為

45、 00000011 即最右邊的 2 個(gè)數(shù)碼管顯示 2 個(gè) B 的花型。當(dāng) clk 變化到規(guī)定次數(shù)時(shí)二極管的顯 示開始向右移動,數(shù)碼顯示管也向右移動。Led7s2 依次變化 11111110~01111111,實(shí)現(xiàn)二極 管的向右移動;led_selout 也依次變化 00000011~11000000 實(shí)現(xiàn)數(shù)碼顯示管的向右移動。同 時(shí)當(dāng) clk 信號變化 25 次時(shí)產(chǎn)生一個(gè)上升沿 clk2,控制揚(yáng)聲器發(fā)出聲音。</p>&l

46、t;p>  圖 4 花型 C 的波形仿真圖</p><p>  由圖 4 可知 當(dāng) clk 發(fā)生變化, 來上升沿時(shí), led7s1 為 1000110 即數(shù)碼管首先顯示為花 型 C 二極管按規(guī)定的顯示,首先 led7s2 位 01111110 即最右邊和最右邊的二極管亮燈, led_selout 為 10000001 即最右邊和最左邊的 2 個(gè)數(shù)碼管顯示 2 個(gè) C 的花型。 clk 變化到規(guī) 當(dāng) 定次數(shù)時(shí)

47、二極管的顯示開始向中間移動, 數(shù)碼顯示管中的花型也向中間移動, 然后再由中間 向倆邊移動。 Led7s2 依次變化 01111110~11100111~01111110, 實(shí)現(xiàn)二極管的向中間移動再向 倆邊移動; led_selout 也依次變化 10000001~00011000~10000001 實(shí)現(xiàn)數(shù)碼顯示管的向中間再 向倆邊移動。同時(shí)當(dāng) clk 信號變化 8 次時(shí)產(chǎn)生一個(gè)上升沿 clk3,控制揚(yáng)聲器發(fā)出聲音。 </p>

48、<p>  波形仿真完成之后即可進(jìn)行引腳的分配,并進(jìn)行編程下載至硬件進(jìn)行測試。在 Quartus 中選擇 Assignments->Assignments Editor,在 Assignments Editor 窗口中選擇 pin 標(biāo)簽頁,即可 分配引腳,引腳的分配情況如圖 5 所示。</p><p><b>  圖 5 引腳分配圖</b></p><

49、p>  如上圖所示,在實(shí)驗(yàn)過程中 clk 的引腳選擇 J16 即可外接頻率源,實(shí)驗(yàn)過程中選擇的頻 率為 1KHZ。其余數(shù)碼管和二極管以及 8 個(gè)數(shù)碼管的使能端引腳分配見上圖,復(fù)位鍵引腳 T10 對應(yīng)的按鍵。選擇 process->start compilation,重新編譯,完成后形成可配置到 FPGA 的 pan.sof 文件和配置到外部的 pan.pof 文件。</p><p>  編程下載,在

50、quartus 軟件中,選擇 tools/programmer,在 Mode 中選擇 JTAG,點(diǎn)擊”add file” 按鈕添加需要配置的 pan.sof 文件,選中 program /configure,點(diǎn)擊 start 按鈕對芯片進(jìn)行 配置,等待一段時(shí)間后即可觀察到實(shí)驗(yàn)結(jié)果。</p><p>  在實(shí)驗(yàn)箱上,我們觀察到實(shí)驗(yàn)結(jié)果按我們所設(shè)計(jì)的那樣顯示,即可顯示我們預(yù)先設(shè)定的 三種花型 AA、BB、CC 并且能

51、夠按要求循環(huán)移動,發(fā)光二極管也可按設(shè)計(jì)要求循環(huán)閃爍,并與數(shù)碼顯示管的花型變化同步。 同時(shí)當(dāng)顯示不同的花型時(shí)揚(yáng)聲器發(fā)出了不同的聲音。 當(dāng)按 下復(fù)位鍵時(shí)我們可以看到數(shù)碼顯示管重新開始再最右邊顯示花型AA,并且揚(yáng)聲器停止發(fā)聲。這些實(shí)驗(yàn)結(jié)果驗(yàn)證所設(shè)計(jì)程序的正確性,實(shí)現(xiàn)了設(shè)計(jì)內(nèi)容和要求,并且有了一定的擴(kuò)展功能。 </p><p><b>  五、設(shè)計(jì)體會</b></p><p>

52、;  本次EDA課程設(shè)計(jì)實(shí)驗(yàn),我選擇了彩燈控制器的設(shè)計(jì)實(shí)驗(yàn),我將理論與實(shí)踐充分地結(jié)合到一起。實(shí)踐中驗(yàn)證理論,實(shí)踐中發(fā)現(xiàn)新的問題,用所學(xué)到的理論知識去解決遇到的問題,在實(shí)驗(yàn)的過程中通過思考,摸索以及向老師、同學(xué)請教,我學(xué)到了不少知識,掌握了相關(guān)軟件的操作,而這些是在書本中根本無法學(xué)到的,只有通過自己親自實(shí)踐,才會有所啟發(fā),才會有所收獲。原來所學(xué)的書本知識在學(xué)習(xí)的時(shí)候感到枯燥無味,因此只是理解了個(gè)皮毛。但是,現(xiàn)在通過這次設(shè)計(jì)實(shí)驗(yàn),使得我對書

53、本知識有了一個(gè)更深入的理解,從根本上對有些問題有了一個(gè)全新的看法,希望以后還有更多這樣的實(shí)驗(yàn)機(jī)會。 由于實(shí)驗(yàn)的復(fù)雜性,所以在仿真的過程中也遇到了困難。仿真的過程不能急躁,要一步一步來,看波形之前要先檢查其靜態(tài)工作點(diǎn),如果靜態(tài)工作點(diǎn)都不滿足要求如何能有波形,所以要先調(diào)靜態(tài),后再調(diào)動態(tài)。而且靜態(tài)工作點(diǎn)的位置不好的話,也會導(dǎo)致波形的失真。 這次設(shè)計(jì)實(shí)驗(yàn)是我通過自身去解決,去分析,去探索的,我從中受益匪淺,也更深入地理解理論。</p>

54、;<p>  本次設(shè)計(jì)的課題是彩燈控制器的設(shè)計(jì),這個(gè)課題的關(guān)鍵是計(jì)數(shù)器和分頻器的使用,分頻的方法有很多種,對于同一種功能的實(shí)現(xiàn),用 VHDL可以采用多 種方式進(jìn)行描述,每種方式之間各有優(yōu)劣,本次設(shè)計(jì)只采用了其中較簡單的一種,應(yīng)盡量用 最簡潔的語言寫出所需功能的程序。</p><p>  通過這次課程設(shè)計(jì)對EDA技術(shù)有了更進(jìn)一步的熟悉,VHDL 語言和C語言等其他語 言還是有很大的區(qū)別。VHDL 是

55、EDA 技術(shù)的重要組成部分,其具有與具體硬件電路無關(guān)和與 設(shè)計(jì)平臺無關(guān)的特性, 并且具有良好的電路行為描述和系統(tǒng)描述的能力, 并在語言易讀性和 層次化、結(jié)構(gòu)化設(shè)計(jì)方面,表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。其主要的也是最大的優(yōu)點(diǎn)就在 于設(shè)計(jì)者可以專心致力于其功能的實(shí)現(xiàn), 而不需要對不影響功能的與工藝有關(guān)的因素花費(fèi)過 多的時(shí)間和精力。在實(shí)際操作中發(fā)現(xiàn)設(shè)計(jì)和課本上的知識有很大聯(lián)系,但又高于課本,一個(gè) 簡單的原理要把它應(yīng)用以及和其他功能綜合起來就有些

56、困難。 通過設(shè)計(jì)也鞏固了我們的書本 知識以及通過借閱書籍和上網(wǎng)查找資料,也豐富了自己對EDA的了解。 不過本次設(shè)計(jì)也存在一些不足,暴露了自己對EDA的掌握還有所欠缺。在設(shè)計(jì)過程中,分頻分的太大,頻率太小的話,揚(yáng)聲器的聲音體現(xiàn)不出顯示不同花型時(shí)的區(qū)別;頻率太 大的話,數(shù)碼管顯示速度太快,嘗試分頻時(shí)使用不同的脈沖信號,但沒有成功。在反復(fù)調(diào)試 中,最后還是成功了,但原理還不是很清楚。同時(shí),在課程設(shè)計(jì)過程中通過與老師、同學(xué)的 交流, 也了解了他

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論