欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      基于FPGA的彩燈控制器設(shè)計(jì)(5篇)

      時(shí)間:2019-05-12 07:14:38下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《基于FPGA的彩燈控制器設(shè)計(jì)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《基于FPGA的彩燈控制器設(shè)計(jì)》。

      第一篇:基于FPGA的彩燈控制器設(shè)計(jì)

      《EDA原理及應(yīng)用》 課程設(shè)計(jì)報(bào)告

      課題名稱: 基于數(shù)碼管顯示的彩燈控制器 院 系: 機(jī)電工程學(xué)院

      專 業(yè): 電子信息工程

      學(xué)生姓名: 陳納爽 學(xué)生學(xué)號: 201033285123

      彩燈及數(shù)碼管顯示控制

      摘 要

      隨著科技的發(fā)展 , 在現(xiàn)代生活中, 彩燈作為一種景觀應(yīng)用越來越多。而在電子電路設(shè)計(jì)領(lǐng)域中,電子設(shè)計(jì)自動(dòng)化(EDA)工具已成為主要的設(shè)計(jì)手段,VHDL語言則是EDA的關(guān)鍵技術(shù)之一,它采用自頂向下的設(shè)計(jì)方法,即從系統(tǒng)總體要求出發(fā),自上至下地將設(shè)計(jì)任務(wù)分解為不同的功能模塊,最后將各功能模塊連接形成頂層模塊,完成系統(tǒng)硬件的整體設(shè)計(jì)。本文介紹了基于EDA技的多路彩燈控制器的設(shè)計(jì)與分析。在MAX+PLUSII環(huán)境下采用VHDL語言實(shí)現(xiàn),論述了基于VHDL語言和FPGA芯片的數(shù)字系統(tǒng)設(shè)計(jì)思想和實(shí)現(xiàn)過程。電子設(shè)計(jì)自動(dòng)化技術(shù)EDA的發(fā)展給電子系統(tǒng)的設(shè)計(jì)帶來了革命性的變化,EDA軟件設(shè)計(jì)工具,硬件描述語言,可編程邏輯器件使得EDA技術(shù)的應(yīng)用走向普及。FPGA是新型的可編程邏輯器件,采用FPGA進(jìn)行產(chǎn)品開發(fā)可以靈活地進(jìn)行模塊配置,大大縮短了產(chǎn)品開發(fā)周期,也有利于產(chǎn)品向小型化,集成化的方向發(fā)展。

      關(guān)鍵詞: VHDL 彩燈 仿真

      1、概述

      1.1、設(shè)計(jì)目的:

      設(shè)計(jì)一個(gè)彩燈控制器,使彩燈(LED管)可以實(shí)現(xiàn)彩燈逐漸增多及兩種不同頻率的閃爍,有復(fù)位開關(guān)。整個(gè)系統(tǒng)有四個(gè)輸入信號clk,option,fan,clr,三個(gè)輸出信號控制倆個(gè)八路彩燈及數(shù)碼管顯示。option的高低電平控制彩燈閃爍的快慢,fan的高低電平控制彩燈的逐漸增多減少。

      1.2、設(shè)計(jì)要求:

      ? 掌握FPGA 的程序設(shè)計(jì)方法。? 掌握硬件描述語言語法。

      ? 程序設(shè)計(jì)完成后要求在軟件中實(shí)現(xiàn)功能仿真。

      2、系統(tǒng)設(shè)計(jì)

      2.1、設(shè)計(jì)原理:

      整個(gè)系統(tǒng)共有四個(gè)輸入信號:基準(zhǔn)時(shí)鐘信號clk,系統(tǒng)清零信號(復(fù)位信號)clr,彩燈節(jié)奏快慢選擇開關(guān)option;共有3個(gè)輸出信號ledout[7..0],shuguan[6..0],doubleled[7..0],分別用于控制彩燈及數(shù)碼管的顯示。據(jù)此,我們可將整個(gè)彩燈控制器CDKZQ分為四大部分:彩燈花樣控制部分、分頻部分、定時(shí)部分和計(jì)數(shù)部分。當(dāng)各個(gè)模塊均完成上述操作之后,形成最后的彩燈顯示系統(tǒng),并且進(jìn)行仿真。仿真通過,即可下載到指定的FPGA芯片里面,并進(jìn)行實(shí)際連線,進(jìn)行最后的硬件測試。把分頻部分的不同頻率的時(shí)鐘信號CP輸送到計(jì)數(shù)部分 ,從而控制彩燈閃爍速度的快慢 ,定時(shí)部分控制每種速度維持的時(shí)間長短。

      原理圖

      模塊原理圖

      管腳圖

      2.2、設(shè)計(jì)方案:

      在電路中以 1 代表燈亮,以 0 代表燈滅,由 0、1按不同的規(guī)律組合代表不同的燈光圖案,同時(shí)使其選擇不同的頻率,從而實(shí)現(xiàn)多種圖案多種頻率的花樣功能顯示。在該電路中只需簡單的修改程序就可以靈活地調(diào)整彩燈圖案和變化方式。下面就以一個(gè)彩燈控制系統(tǒng)的實(shí)現(xiàn)為例進(jìn)行簡單說明。此彩燈控制系統(tǒng)設(shè)定有兩種花樣變化。彩燈圖案狀態(tài)變換的速度有快、慢兩種。

      3、程序仿真圖

      start compilation先編譯

      generate functional simulation netlist然后生成功能仿真網(wǎng)絡(luò)表 assignments–setting—simulation setting設(shè)置成功能仿真 然后新建一個(gè)vector waveform file 通過view—utility windows--node finder 把輸入輸出管腳添加進(jìn)波形仿真圖里 點(diǎn)擊start simulation 得到仿真圖WAVEFORM1:

      4、實(shí)驗(yàn)結(jié)果分析

      實(shí)驗(yàn)表明 ,此設(shè)計(jì)方法能夠滿足多種不同花樣彩燈的變化要求 ,并且該方法便于擴(kuò)展不同變化模式的彩燈花樣,同時(shí)又實(shí)現(xiàn)了彩燈的兩種不同頻率的閃爍。如果不按任何按鍵時(shí)候,燈就按四種花樣順序循環(huán)跑,如果按下某個(gè)鍵再松開,比如按下C鍵然后松開,那么不管之前燈跑到哪個(gè)花樣,按鍵后燈就會(huì)從C代表的花樣處開始跑,然后是D花樣,然后是A花樣,依次循環(huán)。但是A,B,C,D認(rèn)為是按下會(huì)彈起的按鍵,因?yàn)檫@個(gè)程序里,如果一直按著按鍵不松手,會(huì)導(dǎo)致燈只是反復(fù)跑一個(gè)花樣。比如按著B鍵不松手,那么就會(huì)反復(fù)跑B花樣。還有不能允許同時(shí)按下兩個(gè)鍵,三個(gè)鍵,4個(gè)鍵,也就是說,同一時(shí)刻ABCD只能有一個(gè)是高電平,否則會(huì)出錯(cuò),因?yàn)檫@個(gè)程序并沒有防錯(cuò)機(jī)制。

      5、心得體會(huì)

      本次設(shè)計(jì)的課題是彩燈控制器的設(shè)計(jì),當(dāng)拿到這個(gè)課題的時(shí)候經(jīng)過分析就知道關(guān)鍵是計(jì)數(shù)器和分頻器的使用,分頻的方法有很多種,對于同一種功能的實(shí)現(xiàn),用VHDL可以采用多種方式進(jìn)行描述,每種方式之間各有優(yōu)劣,本次設(shè)計(jì)只采用了其中較簡單的一種,應(yīng)盡量用最簡潔的語言寫出所需功能的程序。

      通過這次課程設(shè)計(jì)對EDA技術(shù)有了更進(jìn)一步的熟悉,VHDL 語言和C語言等其他語言還是有很大的區(qū)別。VHDL是EDA技術(shù)的重要組成部分,其具有與具體硬件電路無關(guān)和與設(shè)計(jì)平臺(tái)無關(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)用以及和其他功能綜合起來就有些困難。通過設(shè)計(jì)也鞏固了我們的書本知識以及通過借閱書籍和上網(wǎng)查找資料,也豐富了自己對EDA的了解。

      6、致謝

      7、參考文獻(xiàn)

      [1] 周潤景.基于QuartusⅡ的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例[M].電子工業(yè)出版社.2007,8

      [2] 潘松 黃繼業(yè).EDA技術(shù)實(shí)用教程(第二版).北京:科學(xué)出版社,2006.9 [3] 林明權(quán) 馬維旻 VHDL數(shù)字控制系統(tǒng)設(shè)計(jì)范例.電子工業(yè)出版社2003,1 [4] 褚振勇.FPGA設(shè)計(jì)及應(yīng)用(第三版)[M].西安電子科技大學(xué)出版社.2012,4

      8、附錄

      彩燈顯示控制器的源程序

      library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

      ----Uncomment the following library declaration if instantiating----any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;

      entity colorled is

      Port(clk : in STD_LOGIC;

      clr : in STD_LOGIC;

      option : in STD_LOGIC;

      fan:in std_logic;

      ledout:out STD_LOGIC_VECTOR(7 downto 0);

      shuma:out std_logic_vector(6 downto 0);

      doubleled:out std_logic_vector(7 downto 0));end colorled;architecture rtl of colorled is component timer is port(clk : in std_logic;

      clr : in std_logic;

      option : in std_logic;fan:in std_logic;fanout:out std_logic;clkout : out std_logic);end component timer;component shower is port(clk : in std_logic;

      clr : in std_logic;

      fanin:in std_logic;ledout:out std_logic_vector(7 downto 0);shuma:out std_logic_vector(6 downto 0);

      doubleled:out std_logic_vector(7 downto 0));end component shower;signal clk_tmp:std_logic;signal fan_tmp:std_logic;begin U1:timer port map(clk,clr,option,fan,fan_tmp,clk_tmp);U2:shower port map(clk_tmp,clr,fan_tmp,ledout,shuma,doubleled);end rtl;以上為頂層文件代碼

      以下為分頻計(jì)數(shù)模塊及彩燈顯示控制模塊的代碼 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;----Uncomment the following library declaration if instantiating----any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity timer is

      Port(clk : in STD_LOGIC;--時(shí)鐘

      clr : in STD_LOGIC;--復(fù)位

      fan:in std_logic;

      fanout:out std_logic;

      option : in STD_LOGIC;--快慢分頻

      clkout : out STD_LOGIC);--輸出時(shí)鐘 end timer;architecture rtl of timer is signal clk_tmp:std_logic;signal fan_tmp:std_logic;--signal counter:std_logic_vector(1 downto 0);--計(jì)數(shù)器 signal counter:integer range 0 to 16000000;begin process(clk,clr,option)begin

      if clr='1' then

      clk_tmp<='0';

      counter<=0;elsif clk'event and clk='1' then

      if option='0' then--四分頻

      if counter=16000000 then

      counter<=0;clk_tmp<=not clk_tmp;else

      counter<=counter+1;

      end if;

      else--八分頻

      if counter=8000000 then

      counter<=0;clk_tmp<=not clk_tmp;else

      counter<=counter+1;end if;

      end if;end if;end process;--begin--

      if clr='1' then--

      clk_tmp<='0';--

      counter<=“00”;--elsif clk'event and clk='1' then--

      if option='0' then--四分頻----------

      if counter=“01” then

      counter<=“00”;clk_tmp<=not clk_tmp;else

      counter<=counter+'1';------------------

      end if;

      else--八分頻

      if counter=“11” then

      counter<=“00”;clk_tmp<=not clk_tmp;else

      counter<=counter+'1';end if;

      end if;--end if;--end process;clkout<=clk_tmp;--輸出分頻時(shí)鐘 fan_tmp<=fan;fanout<=fan_tmp;end rtl;

      library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;----Uncomment the following library declaration if instantiating----any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;

      entity shower is

      Port(clk : in STD_LOGIC;

      clr : in STD_LOGIC;

      fanin:in std_logic;

      ledout:out STD_LOGIC_VECTOR(7 downto 0);出

      doubleled:out std_logic_vector(7 downto 0));

      shuma:out std_logic_vector(6 downto 0);--8位彩燈輸end shower;

      architecture rtl of shower is type states is

      (s0,s1,s2,s3,s4,s5,s6,s7);--Moore狀態(tài) signal state:states;begin process(clk,clr,fanin)begin

      if clr='1' then

      state<=s0;

      ledout<=“00000000”;

      doubleled<=“00000000”;

      shuma<=“0000000”;

      elsif clk'event and clk='1' then

      case state is

      when s0=>

      if fanin='1' then

      state<=s7;

      ledout<=“11111110”;

      doubleled<=“11111110”;

      shuma<=“1111001”;

      else

      state<=s1;

      ledout<=“00000000”;

      doubleled<=“00000000”;

      shuma<=“0000000”;end if;when s1=> if fanin='1' then

      state<=s0;

      ledout<=“00000000”;

      doubleled<=“00000000”;

      shuma<=“0000000”;else

      state<=s2;

      ledout<=“10000000”;

      doubleled<=“10000000”;

      shuma<=“1111000”;

      end if;

      when s2=> if fanin='1' then

      state<=s1;

      ledout<=“10000000”;

      doubleled<=“10000000”;

      shuma<=“1111000”;

      else

      state<=s3;

      ledout<=“11000000”;

      doubleled<=“11000000”;

      shuma<=“0000010”;

      end if;

      when s3=>

      if fanin='1' then

      state<=s2;

      ledout<=“11000000”;

      doubleled<=“11000000”;

      shuma<=“0000010”;

      else

      state<=s4;

      ledout<=“11100000”;

      doubleled<=“11100000”;

      shuma<=“0010010”;end if;when s4=> if fanin='1' then

      state<=s3;

      ledout<=“11100000”;

      doubleled<=“11100000”;

      shuma<=“0010010”;else

      state<=s5;

      ledout<=“11110000”;

      doubleled<=“11110000”;

      shuma<=“0011001”;

      end if;when s5=> if fanin='1' then

      state<=s4;

      ledout<=“11110000”;

      doubleled<=“11110000”;

      shuma<=“0011001”;else

      state<=s6;

      ledout<=“11111000”;

      doubleled<=“11111000”;

      shuma<=“0110000”;end if;when s6=> if fanin='1' then

      state<=s5;

      ledout<=“11111000”;

      doubleled<=“11111000”;

      shuma<=“0110000”;else

      state<=s7;

      ledout<=“11111100”;

      doubleled<=“11111100”;

      shuma<=“0100100”;end if;

      when s7=>

      if fanin='1' then

      state<=s6;

      ledout<=“11111100”;

      doubleled<=“11111100”;

      shuma<=“0100100”;

      else

      state<=s0;

      ledout<=“11111110”;

      doubleled<=“11111110”;

      shuma<=“1111001”;

      end if;

      end case;end if;end process;end rtl;

      第二篇:基于FPGA的彩燈控制器設(shè)計(jì)

      鄭州輕工業(yè)學(xué)院

      可編程數(shù)字系統(tǒng)設(shè)計(jì)

      題 目 學(xué)生姓名 專業(yè)班級 學(xué) 號 院(系)指導(dǎo)教師 完成時(shí)間

      基于FPGA的彩燈控制器的設(shè)計(jì) 張煥煥 電子信息工程10-2班 電氣信息工程學(xué)院

      基于FPGA的彩燈控制器設(shè)計(jì)

      摘 要

      隨著科技的發(fā)展 , 在現(xiàn)代生活中, 彩燈作為一種景觀應(yīng)用越來越多。而在電子電路設(shè)計(jì)領(lǐng)域中,電子設(shè)計(jì)自動(dòng)化(EDA)工具已成為主要的設(shè)計(jì)手段,VHDL語言則是EDA的關(guān)鍵技術(shù)之一,它采用自頂向下的設(shè)計(jì)方法,即從系統(tǒng)總體要求出發(fā),自上至下地將設(shè)計(jì)任務(wù)分解為不同的功能模塊,最后將各功能模塊連接形成頂層模塊,完成系統(tǒng)硬件的整體設(shè)計(jì)。本文介紹了基于EDA技的多路彩燈控制器的設(shè)計(jì)與分析。在MAX+PLUSII環(huán)境下采用VHDL語言實(shí)現(xiàn),論述了基于VHDL語言和FPGA芯片的數(shù)字系統(tǒng)設(shè)計(jì)思想和實(shí)現(xiàn)過程。電子設(shè)計(jì)自動(dòng)化技術(shù)EDA的發(fā)展給電子系統(tǒng)的設(shè)計(jì)帶來了革命性的變化,EDA軟件設(shè)計(jì)工具,硬件描述語言,可編程邏輯器件使得EDA技術(shù)的應(yīng)用走向普及。FPGA是新型的可編程邏輯器件,采用FPGA進(jìn)行產(chǎn)品開發(fā)可以靈活地進(jìn)行模塊配置,大大縮短了產(chǎn)品開發(fā)周期,也有利于產(chǎn)品向小型化,集成化的方向發(fā)展。

      關(guān)鍵詞: VHDL 彩燈 仿真

      1、概述

      1.1、設(shè)計(jì)目的:

      設(shè)計(jì)一個(gè)彩燈控制器,使彩燈(LED管)可以實(shí)現(xiàn)四種花樣循環(huán)變化及兩種不同頻率的閃爍,有復(fù)位開關(guān)。整個(gè)系統(tǒng)有七個(gè)輸入信號CLK,CLR,A,B,C,D,OPT,六個(gè)輸出信號控制六個(gè)彩燈。OPT的高低電平控制彩燈閃爍的快慢,A,B,C,D控制各種不同花樣彩燈的變換。此彩燈控制系統(tǒng)設(shè)定有四種花樣變化。四種花樣分別為:a.彩燈從左到右逐次亮起,再逐次從右到左熄滅;b.彩燈兩邊同時(shí)亮兩個(gè),再逐次向中間亮;c.彩燈從左到右兩個(gè)兩個(gè)的亮,再從右到左兩個(gè)兩個(gè)逐次的亮;d.彩燈中間兩個(gè)亮,再同時(shí)向兩邊散開。

      1.2、設(shè)計(jì)要求:

      ? 掌握FPGA 的程序設(shè)計(jì)方法。? 掌握硬件描述語言語法。

      ? 程序設(shè)計(jì)完成后要求在軟件中實(shí)現(xiàn)功能仿真。

      2、系統(tǒng)設(shè)計(jì)

      2.1、設(shè)計(jì)原理:

      整個(gè)系統(tǒng)共有七個(gè)輸入信號:基準(zhǔn)時(shí)鐘信號CLK,系統(tǒng)清零信號(復(fù)位信號)CLR,彩燈節(jié)奏快慢選擇開關(guān)OPT;共有4個(gè)輸出信號Q[3..0],分別用于控制四路彩燈。據(jù)此,我們可將整個(gè)彩燈控制器CDKZQ分為四大部分:彩燈花樣控制部分、分頻部分、定時(shí)部分和計(jì)數(shù)部分。當(dāng)各個(gè)模塊均完成上述操作之后,形成最后的四路彩燈顯示系統(tǒng),并且進(jìn)行仿真。仿真通過,即可下載到指定的FPGA芯片里面,并進(jìn)行實(shí)際連線,進(jìn)行最后的硬件測試。把分頻部分的不同頻率的時(shí)鐘信號CP輸送到計(jì)數(shù)部分 ,從而控制彩燈閃爍速度的快慢 ,定時(shí)部分控制每種速度維持的時(shí)間長短。

      圖表 1 2.

      2、設(shè)計(jì)方案:

      在電路中以 1 代表燈亮,以 0 代表燈滅,由 0、1按不同的規(guī)律組合代表不同的燈光圖案,同時(shí)使其選擇不同的頻率,從而實(shí)現(xiàn)多種圖案多種頻率的花樣功能顯示。在該電路中只需簡單的修改程序就可以靈活地調(diào)整彩燈圖案和變化方式。下面就以一個(gè)四路彩燈控制系統(tǒng)的實(shí)現(xiàn)為例進(jìn)行簡單說明。此四路彩燈控制系統(tǒng)設(shè)定有四種花樣變化。彩燈圖案狀態(tài)變換的速度有快、慢兩種。

      3、程序仿真過程

      start compilation先編譯

      generate functional simulation netlist然后生成功能仿真網(wǎng)絡(luò)表 assignments–setting—simulation setting設(shè)置成功能仿真 然后新建一個(gè)vector waveform file 通過view—utility windows--node finder 把輸入輸出管腳添加進(jìn)波形仿真圖里 點(diǎn)擊start simulation 得到仿真圖WAVEFORM1:

      由圖可見:正常情況下 燈按照花樣abcd的順序循環(huán)d在80NS---120NS的高電平使得花樣變?yōu)镈花樣,D高電平結(jié)束,燈順序進(jìn)行A花樣。

      OPT 在80NS---170NS高電平使得燈變換速度提高2倍 但是001100和100000這兩種燈的狀態(tài)任然占用了兩個(gè)時(shí)鐘周期,這是因?yàn)榛觗和花樣a狀態(tài)轉(zhuǎn)換之間沒有立即銜接,導(dǎo)致220NS處CLR高電平使得燈全部清0,不再變化DIV2是二分頻輸出,由圖可見是輸入時(shí)鐘CLK的二分頻

      4、實(shí)驗(yàn)結(jié)果分析

      實(shí)驗(yàn)表明 ,此設(shè)計(jì)方法能夠滿足多種不同花樣彩燈的變化要求 ,并且該方法便于擴(kuò)展不同變化模式的彩燈花樣,同時(shí)又實(shí)現(xiàn)了彩燈的兩種不同頻率的閃爍。如果不按任何按鍵時(shí)候,燈就按四種花樣順序循環(huán)跑,如果按下某個(gè)鍵再松開,比如按下C鍵然后松開,那么不管之前燈跑到哪個(gè)花樣,按鍵后燈就會(huì)從C代表的花樣處開始跑,然后是D花樣,然后是A花樣,依次循環(huán)。但是A,B,C,D認(rèn)為是按下會(huì)彈起的按鍵,因?yàn)檫@個(gè)程序里,如果一直按著按鍵不松手,會(huì)導(dǎo)致燈只是反復(fù)跑一個(gè)花樣。比如按著B鍵不松手,那么就會(huì)反復(fù)跑B花樣。還有不能允許同時(shí)按下兩個(gè)鍵,三個(gè)鍵,4個(gè)鍵,也就是說,同一時(shí)刻ABCD只能有一個(gè)是高電平,否則會(huì)出錯(cuò),因?yàn)檫@個(gè)程序并沒有防錯(cuò)機(jī)制。

      5、心得體會(huì)

      本次設(shè)計(jì)的課題是彩燈控制器的設(shè)計(jì),當(dāng)拿到這個(gè)課題的時(shí)候經(jīng)過分析就知道關(guān)鍵是計(jì)數(shù)器和分頻器的使用,分頻的方法有很多種,對于同一種功能的實(shí)現(xiàn),用VHDL可以采用多種方式進(jìn)行描述,每種方式之間各有優(yōu)劣,本次設(shè)計(jì)只采用了其中較簡單的一種,應(yīng)盡量用最簡潔的語言寫出所需功能的程序。

      通過這次課程設(shè)計(jì)對EDA技術(shù)有了更進(jìn)一步的熟悉,VHDL 語言和C語言等其他語言還是有很大的區(qū)別。VHDL是EDA技術(shù)的重要組成部分,其具有與具體硬件電路無關(guān)和與設(shè)計(jì)平臺(tái)無關(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)用以及和其他功能綜合起來就有些困難。通過設(shè)計(jì)也鞏固了我們的書本知識以及通過借閱書籍和上網(wǎng)查找資料,也豐富了自己對EDA的了解。

      6、致謝

      7、參考文獻(xiàn)

      [1] 周潤景.基于QuartusⅡ的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例[M].電子工業(yè)出版社.2007,8

      [2] 潘松 黃繼業(yè).EDA技術(shù)實(shí)用教程(第二版).北京:科學(xué)出版社,2006.9 [3] 林明權(quán) 馬維旻 VHDL數(shù)字控制系統(tǒng)設(shè)計(jì)范例.電子工業(yè)出版社2003,1 [4] 褚振勇.FPGA設(shè)計(jì)及應(yīng)用(第三版)[M].西安電子科技大學(xué)出版社.2012,4

      8、附錄

      彩燈控制器的源程序

      library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity horseracelamp is port(clk:in std_logic;clr:in std_logic;a:in std_logic;b:in std_logic;c:in std_logic;d:in std_logic;opt:in std_logic;q:out std_logic_vector(5 downto 0);div2:out std_logic);end;architecture one of horseracelamp is

      type states is(s0,s1,s2,s3);

      signal present:states;

      signal q1:std_logic_vector(5 downto 0);

      signal count:std_logic_vector(3 downto 0);

      signal halfclk:std_logic_vector(1 downto 0);

      signal clkin:std_logic_vector(1 downto 0);begin

      process(clk)--------------------該進(jìn)程實(shí)現(xiàn)二分頻 begin if clk'event and clk='1' then

      halfclk<=halfclk+1;end if;end process;

      process(opt)---------------------該進(jìn)程實(shí)現(xiàn)OPT高時(shí)候用原來的時(shí)鐘,OPT低的時(shí)候用二分頻后的時(shí)鐘,信號CLKIN(0)會(huì)傳遞到下一個(gè)進(jìn)程里

      begin

      if opt='0' then

      clkin(0)<=halfclk(0);

      else

      clkin(0)<=clk;

      end if;

      end process;

      process(clk,clr,a,b,c,d)

      ------------S1,S2,S3,S4分別對應(yīng)

      A,B,C,D四種花樣,它們之間會(huì)自動(dòng)按順序循環(huán),也

      會(huì)因?yàn)锳,B,C,D中某個(gè)置高而改變循環(huán)順序,所以用了大量的IF ELSIF語句

      begin if clr='1' then

      present<=s0;

      q1<=(others=>'0');elsif clkin(0)'event and clkin(0)='1' then

      case present is

      when s0=>if q1=“000000”then

      q1<=“100000”;else

      if count=“1100” then

      count<=(others=>'0');q1<=“100001”;present<=s1;

      elsif b='1'then

      count<=(others=>'0');

      q1<=“100001”;

      present<=s1;

      elsif c='1'then

      count<=(others=>'0');

      q1<=“110000”;

      present<=s2;

      elsif d='1'then count<=(others=>'0');

      q1<=“001100”;

      present<=s3;

      else

      case count is when “0000”=>q1<=“100000”;when “0001”=>q1<=“110000”;when “0010”=>q1<=“111000”;when “0011”=>q1<=“111100”;when “0100”=>q1<=“111110”;when “0101”=>q1<=“111111”;when “0110”=>q1<=“111110”;when “0111”=>q1<=“111100”;when “1000”=>q1<=“111000”;when “1001”=>q1<=“110000”;when “1010”=>q1<=“100000”;when “1011”=>q1<=“000000”;when others=>null;end case;

      count<=count+1;present<=s0;

      end if;end if;

      when s1=>if count=“0011” then

      count<=(others=>'0');q1<=“110000”;present<=s2;elsif a='1'then

      count<=(others=>'0');

      q1<=“100000”;

      present<=s0;

      elsif c='1'then

      count<=(others=>'0');

      q1<=“110000”;

      present<=s2;

      elsif d='1'then count<=(others=>'0');

      q1<=“001100”;

      present<=s3;

      else

      case count is when “0000”=>q1<=“100001”;when “0001”=>q1<=“110011”;when “0010”=>q1<=“111111”;when others=>null;end case;

      count<=count+1;present<=s1;

      end if;

      when s2=>if count=“0110” then

      count<=(others=>'0');q1<=“001100”;present<=s3;elsif a='1'then

      count<=(others=>'0');

      q1<=“100000”;

      present<=s0;

      elsif b='1'then

      count<=(others=>'0');

      q1<=“100001”;

      present<=s1;

      elsif d='1'then count<=(others=>'0');

      q1<=“001100”;

      present<=s3;

      else

      case count is

      when “0000”=>q1<=“110000”;when “0001”=>q1<=“111100”;when “0010”=>q1<=“111111”;when “0011”=>q1<=“000011”;when “0100”=>q1<=“001100”;when “0101”=>q1<=“110000”;when others=>null;end case;

      count<=count+1;present<=s2;

      end if;

      when s3=>if count=“0011” then

      count<=(others=>'0');q1<=“100000”;present<=s0;elsif a='1'then

      count<=(others=>'0');

      q1<=“100000”;

      present<=s0;

      elsif b='1'then

      count<=(others=>'0');

      q1<=“100001”;

      present<=s1;

      elsif c='1'then count<=(others=>'0');

      q1<=“110000”;

      present<=s2;

      else

      case count is when “0000”=>q1<=“001100”;when “0001”=>q1<=“010010”;when “0010”=>q1<=“100001”;when others=>null;end case;

      count<=count+1;present<=s3;

      end if;

      end case;

      end if;

      end process;

      div2<=halfclk(0);

      q<=q1;

      end;

      第三篇:基于FPGA的交通燈控制器設(shè)計(jì)

      數(shù)字系統(tǒng)課程設(shè)計(jì)

      基于FPGA的交通控制燈設(shè)計(jì)

      姓名:

      學(xué)號:

      班級:

      摘要

      隨著社會(huì)的發(fā)展,城市規(guī)模的不斷擴(kuò)大,城市交通成為制約城市發(fā)展的一大因素。人口和汽車日益增長,市區(qū)交通也日益擁擠,人們的安全問題當(dāng)然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內(nèi)部的電路控制系統(tǒng)就不斷的被改進(jìn),設(shè)計(jì)方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計(jì)算機(jī)技術(shù)的飛速發(fā)展,電子電路分析和設(shè)計(jì)方法有了很大的改進(jìn),電子設(shè)計(jì)自動(dòng)化也已經(jīng)成為現(xiàn)代電子系統(tǒng)中不可或缺的工具和手段,這些都為交通燈控制系統(tǒng)的設(shè)計(jì)提供了一定的技術(shù)基礎(chǔ)。本課程設(shè)計(jì)運(yùn)用erilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計(jì)數(shù)法,實(shí)現(xiàn)設(shè)計(jì)所要求的交通燈控制及時(shí)間顯示,并最后進(jìn)行了軟件實(shí)現(xiàn),達(dá)到了系統(tǒng)要求的功能。

      設(shè)計(jì)原理

      1.1設(shè)計(jì)要求

      設(shè)計(jì)一個(gè)交通控制器,用LED顯示燈表示交通狀態(tài),并以7段數(shù)碼顯示器顯示當(dāng)前狀態(tài)剩余秒數(shù) 主干道綠燈亮?xí)r,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變?yōu)榧t燈的過程中,亮光的黃燈作為過渡,黃燈的時(shí)間為5s。能進(jìn)行特殊狀態(tài)顯示,特殊狀態(tài)時(shí)東西、南北路口均顯示紅燈狀態(tài)。用LED燈顯示倒計(jì)時(shí),并且能實(shí)現(xiàn)總體清零功能,計(jì)數(shù)器由初始狀態(tài)開始計(jì)數(shù),對應(yīng)狀態(tài)的顯示燈亮。能實(shí)現(xiàn)特殊狀態(tài)的功能顯示,1.2設(shè)計(jì)思路和原理

      本次設(shè)計(jì)是針對十字路口,進(jìn)行南北和東西直行情況下交通燈控制。設(shè)定東西方向?yàn)橹鞲傻婪较颍鶕?jù)交通燈的亮的規(guī)則,在初始狀態(tài)下四個(gè)方向的都為紅燈亮啟,進(jìn)入正常工作狀態(tài)后,當(dāng)主干道上綠燈亮?xí)r,支干道上紅燈亮,持續(xù)35S后,主干道和支干道上的黃燈都亮啟,持續(xù)5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續(xù)25S,之后主干道和支干道上的黃燈都亮啟5s,一個(gè)循環(huán)完成。循環(huán)往復(fù)的直行這個(gè)過程。其過程如下圖所示:

      0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s

      圖1.交通燈點(diǎn)亮?xí)r間控制說明

      1.3實(shí)現(xiàn)方法

      本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態(tài)機(jī)計(jì)數(shù)法,實(shí)現(xiàn)設(shè)計(jì)所要求的交通燈控制及時(shí)間顯示。設(shè)計(jì)中用兩組紅黃綠LED模擬兩個(gè)方向上的交通燈,用4個(gè)7段數(shù)碼管分別顯示兩個(gè)方向上的交通燈剩余時(shí)間,控制時(shí)鐘由試驗(yàn)箱上頻率信號提供。

      Verilog HDL程序設(shè)計(jì)

      2.1整體設(shè)計(jì)

      根據(jù)上章設(shè)計(jì)原理,交通燈控制的關(guān)鍵是各個(gè)狀態(tài)之間的轉(zhuǎn)換和進(jìn)行適當(dāng)?shù)臅r(shí)間延時(shí),根據(jù)狀態(tài)機(jī)的設(shè)計(jì)規(guī)范,本次設(shè)計(jì)了三個(gè)狀態(tài)之間的循環(huán)轉(zhuǎn)化,其真值表及狀態(tài)轉(zhuǎn)化圖如下所示:

      狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010

      圖2.交通燈控制狀態(tài)轉(zhuǎn)化

      說明:該狀態(tài)圖為交通燈在正常情況下的狀態(tài)轉(zhuǎn)化圖,進(jìn)入控制后,狀態(tài)00時(shí)主干道綠燈及支干道紅燈亮起,進(jìn)入狀態(tài)01后兩路黃燈亮起,狀態(tài)11時(shí)主干道紅燈及支干道綠燈亮起。進(jìn)入10狀態(tài)兩路黃燈亮起。結(jié)束一個(gè)循環(huán),從00狀態(tài)重新開始循環(huán)。

      為實(shí)現(xiàn)控制與顯示的功能,需要設(shè)計(jì)交通燈點(diǎn)亮順序控制程序,倒數(shù)計(jì)時(shí)程序,七段數(shù)碼管顯示程序,數(shù)碼管顯示掃描程序,其系統(tǒng)結(jié)構(gòu)圖如下所示:

      holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統(tǒng)結(jié)構(gòu)圖

      其中rst為復(fù)位信號,clk為時(shí)鐘信號,hold為特殊情況控制信號,輸入hold時(shí)兩個(gè)方向紅燈無條件亮起。

      2.2 具體設(shè)計(jì)

      根據(jù)整體設(shè)計(jì)要求,編寫各個(gè)功能部分Verilog HDL程序,設(shè)置各輸入輸出變量說明如下 clk: 為計(jì)數(shù)時(shí)鐘; qclk:為掃描顯示時(shí)鐘;

      en: 使能信號,為1 的話,則控制器開始工作; rst: 復(fù)位信號,為1的話,控制及技術(shù)回到初始狀態(tài);

      hoid:特殊情況控制信號,為1的話,則兩個(gè)方向無條件顯示為紅燈;

      light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;

      light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;

      num1: 用于主干道方向燈的時(shí)間顯示,8 位,可驅(qū)動(dòng)兩個(gè)數(shù)碼管; num2: 用于支干道方向燈的時(shí)間顯示,8 位,可驅(qū)動(dòng)兩個(gè)數(shù)碼管; counter:用于數(shù)碼管的譯碼輸出; st1,st2:數(shù)碼管掃描信號。輸入輸出及中間變量設(shè)置如下:

      module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;

      1.二極管點(diǎn)亮控制

      該部分程序的作用是根據(jù)計(jì)數(shù)器的計(jì)數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計(jì)時(shí)數(shù)值給七段數(shù)碼管的譯碼電路。此外,當(dāng)檢測到特殊情況(hold=‘1’)發(fā)生時(shí),無條件點(diǎn)亮紅燈的二極管,當(dāng)檢測到復(fù)位信號,兩個(gè)方向計(jì)數(shù)與控制回復(fù)到00狀態(tài)。因?yàn)橹?、支干道兩個(gè)方向二極管點(diǎn)亮的順序與延遲時(shí)間不同,顧編寫兩個(gè)獨(dú)立的部分來控制,具體程序如下: 1)主干道方向 always @(posedge clk)begin

      if(rst)//復(fù)位與特殊情況控制

      begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)

      begin //使能有效開始控制計(jì)數(shù)

      if(!tim1)//

      begin //主干道交通燈點(diǎn)亮控制

      tim1<=1;

      case(state1)

      2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end

      2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end

      2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end

      2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end

      default:light1<=3'b100;

      endcase

      end 2)支干道方向

      always @(posedge clk)begin

      if(rst)//復(fù)位與特殊情況控制

      begin

      light2<=3'b100;

      num2<=red2;

      end

      else if(hold)

      begin

      light2<=3'b100;

      num2<=red2;

      end

      else if(en)

      begin

      if(!tim2)

      begin

      tim2<=1;

      case(state1)

      2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end

      2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end

      2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end

      2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end

      default:light2<=3'b100;

      endcase

      end

      2.倒數(shù)計(jì)時(shí)

      該部分程序完成二極管發(fā)光時(shí)延的計(jì)數(shù),并將計(jì)數(shù)結(jié)果送到數(shù)碼管顯示電路,每切換到一個(gè)狀態(tài),計(jì)數(shù)器的初值都被重置,以實(shí)現(xiàn)不同顏色二極管不同的時(shí)延要求。本次設(shè)計(jì)直接用邏輯運(yùn)算完成2位十進(jìn)制數(shù)的計(jì)數(shù),未采用分位器的設(shè)計(jì)。因?yàn)橹鳌⒅Ц傻郎嫌?jì)數(shù)器的結(jié)構(gòu)完全相同,顧只列出一路的程序,其具體程序如下所示:

      always @(posedge clk)begin else begin //倒數(shù)計(jì)時(shí)

      if(num1>0)

      if(num1[3:0]==0)

      begin

      num1[3:0]<=4'b1001;

      num1[7:4]<=num1[7:4]-1;

      end

      else num1[3:0]<=num1[3:0]-1;

      if(num1==1)tim1<=0;

      end

      end

      else

      begin

      light1<=3'b010;

      num1=2'b00;

      tim1<=0;

      end end

      3.數(shù)碼管的譯碼及掃描顯示

      該段程序主要完成4個(gè)7段數(shù)碼管的譯碼顯示及掃描,使系統(tǒng)能正常顯示主、支干道兩個(gè)方向上的剩余時(shí)間。譯碼的時(shí)鐘頻率要低,為Hz級。掃描的時(shí)鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數(shù)碼管掃描

      if(rst1)

      begin

      st1=0;

      st2=0;

      end else

      begin

      case({st2,st1})

      2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end

      2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end

      2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end

      2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end

      endcase

      end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示

      仿真與硬件調(diào)試

      3.1 波形仿真

      在QuartursⅡ軟件下創(chuàng)建工程,新建編輯設(shè)計(jì)文件,將程序輸入,整體編譯后,新建波形仿真文件。設(shè)置仿真時(shí)間,時(shí)鐘周期,輸入輸出端口,進(jìn)行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時(shí)間:100us; 時(shí)鐘:clk 1us,qclk 0.1us 1.正常工作時(shí)波形仿真圖

      圖4.正常工作時(shí)波形仿真圖

      圖形說明

      波形仿真主要完成了控制與計(jì)數(shù)以及數(shù)碼管顯示的波形圖。en為低電品時(shí),計(jì)數(shù)器置初值,高電平時(shí)開始正常控制與計(jì)數(shù)??刂瓢l(fā)光二極管首次輸出為“l(fā)ight1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計(jì)數(shù)器num1和num2從“00110101”開始遞減計(jì)數(shù),計(jì)數(shù)至“00000000”時(shí),進(jìn)入下一個(gè)狀態(tài),控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計(jì)數(shù)器num1和num2從“00000101”開始計(jì)數(shù)遞減,計(jì)數(shù)至”00000000”時(shí)進(jìn)入下一個(gè)狀態(tài),light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據(jù)num1,num2變化隨時(shí)鐘上升沿輸出譯碼后的數(shù)據(jù)。由于屏幕顯示大小有限,未仿真出一個(gè)完整周期。

      2.特殊情況仿真波形

      圖5.特殊情況仿真波形

      圖形說明

      當(dāng)hold輸入高電平時(shí),在時(shí)鐘上升沿的控制下,light 1與light2被強(qiáng)制置位為”100”,表示兩路紅燈均亮起

      3.復(fù)位情況仿真波形

      圖6.復(fù)位情況仿真波形

      圖形說明

      當(dāng)rst輸入高電平時(shí),在時(shí)鐘上升沿控制下,計(jì)數(shù)與控制都回到00狀態(tài),即light1=001,light2=100,計(jì)數(shù)器num1和num2從“00110101”開始遞減計(jì)數(shù)。3.2 硬件調(diào)試

      完成時(shí)序仿真確認(rèn)無誤后,進(jìn)行實(shí)驗(yàn)箱管腳設(shè)置,注意設(shè)置完成后一定要再進(jìn)行一次全局仿真,使程序真正對應(yīng)于硬件輸出輸出。具體連接說明如下所示

      輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關(guān),以穩(wěn)定的輸出可變化的電平。計(jì)數(shù)時(shí)鐘clk接實(shí)驗(yàn)箱上1Hz時(shí)鐘,掃描顯示時(shí)鐘qclk接125Khz時(shí)鐘。

      輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中l(wèi)ight1[0]、light2[0]分別接綠色的發(fā)光二極管;light1[1]、light2[1] 分別接黃色的發(fā)光二極管;light1[2]、light2[2]分別接紅色的發(fā)光二極管。counter[0]~counter[6],分別接七段數(shù)碼管的a~f,st1、st2分別接試驗(yàn)箱上”4-16”譯碼器的低兩位。

      完成接線后將程序燒寫到芯片上,開始功能調(diào)試。分辨改變使能信號,復(fù)位信號以及特殊情況信號,觀察數(shù)碼管以及發(fā)光二級管情況。

      程序清單

      module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;

      always @(en)if(!en)begin //設(shè)置計(jì)數(shù)初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end

      always @(posedge clk)begin if(rst)//復(fù)位與特殊情況控制

      begin

      light1<=3'b001;num1<=green1;

      end else if(hold)

      begin

      light1<=3'b100;

      num1<=green1;

      end

      else if(en)

      begin //使能有效開始控制計(jì)數(shù)

      if(!tim1)//開始控制

      begin //主干道交通燈點(diǎn)亮控制

      tim1<=1;

      case(state1)

      2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end

      2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end

      2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end

      2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end

      default:light1<=3'b100;

      endcase

      end

      else

      begin //倒數(shù)計(jì)時(shí)

      if(num1>0)

      if(num1[3:0]==0)

      begin

      num1[3:0]<=4'b1001;

      num1[7:4]<=num1[7:4]-1;

      end

      else num1[3:0]<=num1[3:0]-1;

      if(num1==1)tim1<=0;

      end

      end

      else

      begin

      light1<=3'b010;

      num1=2'b00;

      tim1<=0;

      end

      end

      always @(posedge clk)begin

      if(rst)//復(fù)位與特殊情況控制

      begin

      light2<=3'b100;

      num2<=red2;

      end

      else if(hold)

      begin

      light2<=3'b100;

      num2<=red2;

      end

      else if(en)

      begin

      if(!tim2)

      begin

      tim2<=1;

      case(state1)

      2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end

      2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end

      2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end

      2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end

      default:light2<=3'b100;

      endcase

      end

      else

      begin //倒數(shù)計(jì)時(shí)

      if(num2>0)

      if(num2[3:0]==0)

      begin

      num2[3:0]<=4'b1001;

      num2[7:4]<=num2[7:4]-1;

      end

      else num2[3:0]<=num2[3:0]-1;

      if(num2==1)tim2<=0;

      end

      end

      else

      begin

      tim2<=0;

      state2<=2'b00;

      light2<=3'b010;

      end

      end

      always @(posedge qclk)begin //數(shù)碼管掃描

      if(rst1)

      begin

      st1=0;

      st2=0;

      end else

      begin

      case({st2,st1})

      2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end

      2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end

      2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end

      2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end

      endcase

      end end always @(posedge qclk)begin //數(shù)碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule

      總結(jié)

      在設(shè)計(jì)中采用V erilog HDL語言設(shè)計(jì)交通燈控制系統(tǒng), 借助其功能強(qiáng)大的語言結(jié)構(gòu), 簡明的代碼描述復(fù)雜控制邏輯設(shè)計(jì), 與工藝無關(guān)特性, 在提高工作效率的同時(shí)達(dá)到求解目的, 并可以通過V erilog HDL 語言的綜合工具進(jìn)行相應(yīng)硬件電路生成, 具有傳統(tǒng)邏輯設(shè)計(jì)方法所無法比擬的優(yōu)越性。

      在設(shè)計(jì)過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計(jì)數(shù)器無法正常計(jì)數(shù),就是控制輸出無法進(jìn)入到下一個(gè)狀態(tài),每次出現(xiàn)問題就必須返回重新修改程序。實(shí)踐證明,在編寫一個(gè)較復(fù)雜的程序時(shí),一開始一定要畫流程圖,弄清楚各個(gè)功能及實(shí)現(xiàn)它們的邏輯算法,做到心中有數(shù)后在開始下筆寫編寫程序。在編寫的時(shí)候要尤其要注意語言的規(guī)范,如本次設(shè)計(jì)中編寫的V erilog在Quartus8.1中可以正常生成時(shí)序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規(guī)范,在解決這個(gè)問題時(shí)我總結(jié)了一些經(jīng)驗(yàn),首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當(dāng)?shù)亟o程序加上注解文字,提高可讀性,以方便之后的程序出錯(cuò)時(shí)進(jìn)行查找,最后充分利用仿真軟件提供的各項(xiàng)編譯工具與報(bào)錯(cuò)消息,按圖索驥,有方向的完成程序調(diào)試。

      完成仿真后進(jìn)行,進(jìn)行試驗(yàn)箱上的硬件調(diào)試,該步驟主要是要求細(xì)心,按照引腳清單,逐一完成連線,本次設(shè)計(jì)用到兩個(gè)時(shí)鐘輸入,注意一定要選擇合適頻率的時(shí)鐘,以便達(dá)到期望的效果。注意觀察實(shí)物的現(xiàn)象,看是否滿足設(shè)計(jì)要求,不滿足時(shí)檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯(cuò)誤,直至達(dá)到滿意的效果。

      通過這次課程設(shè)計(jì),熟悉了簡單EDA設(shè)計(jì)的整個(gè)流程,加深了對Verilog HDL硬件描述語言的理解,提高了動(dòng)手能力,并且鍛煉了自己的耐心,收獲頗豐,我會(huì)把在本次課程設(shè)計(jì)中學(xué)到的東西應(yīng)用到今后的工作學(xué)習(xí)中。

      參考資料

      [1] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的V erilog HDL設(shè)計(jì)技術(shù) [M ].北京: 北京航空航天大學(xué)出版社, 1998 [2] 郭梯云.移動(dòng)通信[M ].西安: 西安電子科技大學(xué)出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數(shù)字移動(dòng)通信系統(tǒng)[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業(yè)出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發(fā)環(huán)境L abW indow s?CV I 610 編程指南[M ].北京: 機(jī)械工業(yè)出版社, 2002 [5] 劉國權(quán).GSM 手機(jī)的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數(shù)字蜂窩移動(dòng)交換系統(tǒng)測試[J ].電信科學(xué), 2000 [7] 張明.V erilog HDL 實(shí)用教程[M ].成都: 電子科技大學(xué)出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術(shù)基礎(chǔ)(數(shù)字部分)[M ].北京: 高等教育出版社, 1988

      第四篇:EDA課程設(shè)計(jì)彩燈控制器

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      1設(shè)計(jì)目的

      熟練掌握EDA技術(shù)利用計(jì)算機(jī)方面的課程解決專業(yè)課程方面點(diǎn)具體問題,達(dá)到解決問題,完成課程設(shè)計(jì)任務(wù),培養(yǎng)實(shí)踐的目的。

      2設(shè)計(jì)要求和任務(wù)

      利用所學(xué)的EDA設(shè)計(jì)方法設(shè)計(jì)彩燈控制器,熟練使用使用QUARTUSII應(yīng)用軟件,進(jìn)一步學(xué)習(xí)使用VHDL語言、原理圖等EDA設(shè)計(jì)方法進(jìn)行綜合題目的方法。

      功能要求: 1.要有多種花型變化(至少4種).2.多種花型可以自動(dòng)變換,循環(huán)往復(fù).3.彩燈變換的快慢節(jié)拍可以選擇.4.具有清零開關(guān).總體設(shè)計(jì)思路及原理描述

      3.1功能描述

      在電路中以 1 代表燈亮,以 0 代表燈滅,由 0,1按不同的規(guī)律組合代表不同的燈光圖案,同時(shí)使其選擇不同的頻率,從而實(shí)現(xiàn)多種圖案多種頻率的花樣功能顯示。在該電路中只需簡單的修改程序就可以靈活地調(diào)整彩燈圖案和變化方式。下面就以一個(gè)十六路彩燈控制系統(tǒng)的實(shí)現(xiàn)為例進(jìn)行簡單說明。此十六路彩燈控制系統(tǒng)設(shè)定有六種花樣變化 ,這六種花樣可以進(jìn)行自動(dòng)切換 ,并且每種花樣可以選擇不同的頻率。

      3.2設(shè)計(jì)原理

      用VHDL進(jìn)行設(shè)計(jì) ,首先應(yīng)該了解 ,VHDL語言一種全方位硬件描述語言 ,包括系統(tǒng)行為級 ,寄存?zhèn)鬏敿壓瓦壿嬮T級多個(gè)設(shè)計(jì)層次。應(yīng)充分利用DL “自頂向下” 的設(shè)計(jì)優(yōu)點(diǎn)以及層次化的設(shè)計(jì)概層次概念對于設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)是非常

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      有用它使得人們可以從簡單的單元入手 ,逐漸構(gòu)成龐大而復(fù)雜的系統(tǒng)。首先應(yīng)進(jìn)行系統(tǒng)模塊的劃分 ,規(guī)定每一模塊的功能以及各個(gè)模塊之間的接口。最終設(shè)計(jì)方案為:以一個(gè)十六路彩燈花樣控制器、一個(gè)四頻率輸出分頻器 ,一個(gè)四選一控制器和一個(gè)時(shí)間選擇器總共四部分來完成設(shè)計(jì)。四選一控制器從分頻器選擇不同頻率的時(shí)鐘信號輸送到彩燈花樣控制器 ,從而達(dá)到控制彩燈閃爍速度的快慢 ,時(shí)間選擇器控制每種速度維持的時(shí)間長短。整個(gè)十六路彩燈控制系統(tǒng)設(shè)計(jì)的模塊圖如圖 1所示

      圖一

      4分層次方案設(shè)計(jì)及代碼描述

      4.1子模塊及其功能

      本次設(shè)計(jì)分為四個(gè)子模塊 ,即十六路彩燈花樣控制器、四頻率輸出分頻器 ,四選一控制器和時(shí)間選擇器 ,其子模塊及其功能如下: 2

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      4.1.1四頻率輸出分頻器

      在本次設(shè)計(jì)中 ,設(shè)計(jì)了六種花樣 ,要求這六種花樣以不同的頻率顯示 ,而只有一個(gè)輸入的時(shí)鐘信號 ,所以對所輸入的時(shí)鐘信號進(jìn)行 2 分頻 ,4 分頻 ,8分頻 ,16分頻 ,得到四種頻率信號 ,CLKDIV模塊用來完成此功能。

      4.1.2時(shí)間選擇器

      時(shí)間選擇器實(shí)際上是兩個(gè)分頻器 ,其中一個(gè)頻率是另一個(gè)頻率的兩倍。本來這兩個(gè)分頻器是可以在上述的四頻率輸出器中實(shí)現(xiàn)的 ,但為了方便地為四選一控制器提供不同的時(shí)間選擇條件 ,就將這兩個(gè)分頻器獨(dú)立開來。這兩個(gè)輸出的時(shí)鐘信號組合起來就可以為四選一控制器提供 00,01,10,11 四個(gè)時(shí)間選擇條件 ,如

      下圖三所示。

      圖二

      4.1.3四選一控制器

      四選一控制器功能是從分頻器中選擇不同頻率的時(shí)鐘信號送給彩燈控制器 ,實(shí)現(xiàn)彩燈閃爍的頻率變化。

      4.1.4彩燈控制器

      彩燈控制電路是整個(gè)設(shè)計(jì)的核心 ,它負(fù)責(zé)整個(gè)設(shè)計(jì)的輸出效果即各種彩燈圖案的樣式變化。該程序充分地說明了用 VHDL設(shè)計(jì)電路的 “彈” 性 ,即可通過改變程序中輸出變量 Q 的位數(shù)來改變彩燈的數(shù)目。其中 ,P1進(jìn)程對燈閃的速度控制有兩種方式可改變燈閃的速度:一是改變外部時(shí)鐘的賦值 ,二是改變信號U 的位數(shù)。P2進(jìn)程能進(jìn)行彩燈的圖案控制 ,改變 s的位數(shù)即可改變要控制圖案的數(shù)目 ,改變輸出變量 Q 的組合即可變幻彩燈圖案。

      最后 ,當(dāng)各個(gè)模塊均完成上述操作之后 ,即可利用MAXPLUS2的原理圖輸

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      入 ,調(diào)用各個(gè)元器件(底層文件),以原理圖的形式形成最后的十六路彩燈顯示系統(tǒng)(頂層文件),并且進(jìn)行仿真。仿真通過 ,即可下載到指定的 CPLD芯片里面 ,并進(jìn)行實(shí)際連線 ,進(jìn)行最后的硬件測試。當(dāng)然 ,可以將各個(gè)模塊所生成的元件符號存放在元件庫中 ,用以被其它人或其它的設(shè)計(jì)所重復(fù)調(diào)用 ,以簡化后面的設(shè)計(jì)。

      4.2 代碼描述

      4.2.1 時(shí)序控制電路部分

      程序如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity timecontrol is--定義實(shí)體 port(clk: in std_logic;--時(shí)鐘信號 clr: in std_logic;--復(fù)位信號 opt: in std_logic;--快慢控制信號 clkout: out std_logic--輸出時(shí)鐘信號);end timecontrol;architecture one of timecontrol is signal clk_tmp: std_logic;signal counter: std_logic_vector(1 downto 0);--定義計(jì)數(shù)器 begin process(clk,clr,opt)begin 4

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      if clr='0' then--清零 clk_tmp<='0';counter<=“00”;elsif clk'event and clk='1' then if opt='0' then--四分頻 if counter=“01” then counter<=“00”;clk_tmp<=not clk_tmp;else counter<=counter+'1';end if;else--八分頻 if counter=“11” then counter<=“00”;clk_tmp<=not clk_tmp;else counter<=counter+'1';end if;end if;end if;end process;clkout<=clk_tmp;--輸出分頻后的信號 end architecture one;

      4.2.2顯示控制電路部分

      程序如下: library ieee;use ieee.std_logic_1164.all;

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      entity showcontrol is port(clk: in std_logic;--輸入時(shí)鐘信號 clr: in std_logic;--復(fù)位信號

      led: out std_logic_vector(15 downto 0));--彩燈輸出

      end showcontrol;architecture one1 of showcontrol is type states is--狀態(tài)機(jī)狀態(tài)列舉(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);signal state: states;begin process(clk,clr)begin

      if clr='0'then state<=s0;led<=“***0”;elsif clk'event and clk='1'then case state is when s0=>state<=s1;led<= “***1”;when s1=> state<=s2;led<=“***1”;when s2=> state<=s3;led<=“***0”;when s3=> state<=s4;led<=“***1”;when s4=> state<=s5;6

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      led<=“***0”;when s5=>state<=s6;led<=“***1”;when s6=>state<=s7;led<=“***0”;when s7=>state<=s8;led<=“***1”;when s8=>state<=s9;led<=“***0”;when s9=>state<=s10;led<=“***1”;when s10=>state<=s11;led<=“***0”;when s11=>state<=s12;led<=“***1”;when s12=>state<=s13;led<=“***0”;when s13=>state<=s14;led<=“***1”;when s14=>state<=s15;led<=“***0”;when s15=>state<=s0;led<=“***1”;when others=>null;end case;end if;end process;end architecture one1;

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      4.2.3頂層電路部分

      程序如下:

      library ieee;use ieee.std_logic_1164.all;entity root is port(clk: in std_logic;clr: in std_logic;opt:in std_logic;led: out std_logic_vector(15 downto 0));--八路彩燈輸出 end colorled;architecture one3 of root is component timecontrol is--定義元件:時(shí)序控制電路 port(clk: in std_logic;clr: in std_logic;opt:in std_logic;clkout: out std_logic);end component timecontrol;component showcontrol is--定義元件:顯示電路

      port(clk: in std_logic;clr: in std_logic;led: out std_logic_vector(15 downto 0));end component showcontrol;signal clk_tmp: std_logic;begin u1: timecontrol port map(clk=>clk,clr=>clr,opt=>opt,clkout=>clk_tmp);--例化時(shí)序控制模塊

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      u2: showcontrol port map(clk=>clk_tmp,clr=>clr,led=>led);--例化顯示電路模塊 end architecture one3;

      5各模塊的時(shí)序仿真圖

      5.1時(shí)序控制電路timecontrol的仿真圖如下:

      圖三

      功能:時(shí)序控制電路metronome的功能是,用OPT控制輸入信號CKL_IN的快慢節(jié)拍。而CLR是控制開關(guān)。且從圖中可以看出,當(dāng)復(fù)位信號為高電平時(shí),電路時(shí)鐘輸出清零,當(dāng)快慢信號OPT為低電平時(shí),時(shí)序控制電路四分頻起作用,當(dāng)快慢信號OPT為高電平時(shí),時(shí)序控制電路八分頻起作用,仿真結(jié)果符合電路要求。

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      5.2 顯示控制電路showcontrol的仿真圖如下:

      圖四

      功能:顯示控制電路showcontrol的功能是控制花形的。且從圖中可以看出,當(dāng)復(fù)位信號有效時(shí)彩燈輸出為零,否則,顯示電路在十六種不同狀態(tài)間轉(zhuǎn)換。

      5.3 頂層電路root系統(tǒng)的仿真圖如下:

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告

      圖五

      功能:整個(gè)電路root系統(tǒng)是把showcontrol與timecontrol綜合成一個(gè)電路。且從圖中可以看出,從圖中可以看出當(dāng)OPT為高電平時(shí)彩燈狀態(tài)轉(zhuǎn)換慢,為低電平時(shí)轉(zhuǎn)換要快,當(dāng)復(fù)位信號有效時(shí),所用輸出都清零。

      6總結(jié)

      通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,通過這次的課程設(shè)計(jì),發(fā)現(xiàn)自己的實(shí)踐經(jīng)驗(yàn)還是不足的,以后多應(yīng)該以理論為基礎(chǔ),然后應(yīng)用到實(shí)踐中來,從理論中得出結(jié)論,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。

      在這次的課程設(shè)計(jì)里深入的接觸了運(yùn)用電子集成元器件制作多路彩燈的過程,并和同學(xué)一起討論用軟件制作出了這一個(gè)多路彩燈控制系統(tǒng)。正所謂“紙上談兵終覺淺,覺知此事要躬行?!睂W(xué)習(xí)任何知識,都要進(jìn)行實(shí)踐,只有那樣才能達(dá)到事半功倍的效果。

      沈陽理工大學(xué)EDA技術(shù)課程設(shè)計(jì)報(bào)告 參考文獻(xiàn)

      《EDA技術(shù)與數(shù)字系統(tǒng)設(shè)計(jì)》

      鄒彥主編

      電子工業(yè)出版社

      《EDA技術(shù)實(shí)用教程》,潘松、黃繼業(yè),科學(xué)出版社 《數(shù)字電子技術(shù)基礎(chǔ)》(第五版),閻石,高等教育出版社

      《電子設(shè)計(jì)自動(dòng)化(EDA)手冊》,王丹、童如松,電子工業(yè)出版社 《EDA技術(shù)程設(shè)計(jì)》,劉江海,華中科技大學(xué)出版社

      第五篇:eda課程設(shè)計(jì)-彩燈控制器

      1.設(shè)計(jì)目的

      學(xué)習(xí)EDA開發(fā)軟件和MAX+plus Ⅱ的使用方法,熟悉可編程邏輯器件的使用,通過制作來了解彩燈控制系統(tǒng)。2.設(shè)計(jì)題目描述和要求

      1)設(shè)計(jì)一個(gè)彩燈控制器,使彩燈(LED管)能連續(xù)發(fā)出四種以上不同的顯示形式;

      2)隨著彩燈顯示圖案的變化,發(fā)出不同的音響聲。3)擴(kuò)充其它功能。3.設(shè)計(jì)原理 3.1 方案論證

      這次的彩燈設(shè)計(jì)采用的是分模塊來完成的,包括分頻器、計(jì)數(shù)器、選擇器、彩燈控制器。其中彩燈控制器是用來輸出不同的花樣,彩燈控制器的輸出則是用一個(gè)32進(jìn)制的計(jì)數(shù)器來控制,揚(yáng)聲器的輸出時(shí)用不同的頻率來控制,所以用了一個(gè)集成分頻器來使輸入的頻率被分為幾種不同的頻率,不同頻率的選擇性的輸出則是用一個(gè)4選一的選擇器來控制?;谏鲜龅慕榻B本次的彩燈控制采用的模式6來進(jìn)行顯示。

      圖3-1-1 模式6結(jié)構(gòu)圖

      3.2 模塊設(shè)計(jì)

      1)集成分頻器模塊

      設(shè)計(jì)要求顯示不同的彩燈的時(shí)候要伴隨不同的音樂,所以設(shè)計(jì)分頻器來用不同的頻率控制不同的音樂輸出。模塊說明:

      Rst:輸入信號 復(fù)位信號 用來復(fù)位集成分頻器的輸出使輸出為“0”,及沒有音樂輸出。

      Clk:輸入信號 模塊的功能即為分頻輸入的頻率信號。

      Clk_

      4、clk_

      6、clk_

      8、clk_10:輸出信號 即為分頻模塊對輸入信號clk的分頻,分別為1/4分頻輸出、1/6分頻輸出、1/8分頻輸出、1/10分頻輸出。

      圖3-2-1 集成分頻器

      2)32進(jìn)制計(jì)數(shù)器模塊

      32進(jìn)制模塊用來控制彩燈輸出模塊,即確定彩燈控制器的不同的輸出。Rst:輸入信號 復(fù)位信號 用來復(fù)位32進(jìn)制使其輸出為“00000”。Clk:輸入信號 用來給模塊提供工作頻率。

      Count_out[4..0]:輸出信號 即為32進(jìn)制計(jì)數(shù)器的輸出。

      圖3-2-2 32進(jìn)制計(jì)數(shù)器

      3)彩燈控制模塊

      彩燈控制模塊用來直接控制彩燈的輸出,使彩燈表現(xiàn)出不同的花樣。Rst:輸入信號 使彩燈控制模塊的輸出為“00000000”,即讓彩燈無輸出。Input[4..0]:輸入信號 不同的輸入使彩燈控制模塊有不同的輸出即彩燈顯示出不同的花樣。

      Output[7..0]:輸出信號 直接與彩燈相連來控制彩燈。

      圖3-2-3 彩燈控制模塊 4)4選1選擇器模塊

      Rst:輸入信號 復(fù)位信號 使選擇器的輸出為“0”。In1、in2、in3、in4:輸入信號 接分頻器的輸出。

      Inp[1..0]:輸入信號 接4進(jìn)制計(jì)數(shù)器的輸出用來控制選擇器的選擇不同的輸入選擇不同的輸出。

      Output:輸出信號 直接接揚(yáng)聲器即輸出的是不同的頻率來控制揚(yáng)聲器播放音樂。

      圖3-2-4 4選1選擇器

      5)4進(jìn)制計(jì)數(shù)器模塊

      4進(jìn)制計(jì)數(shù)器作為選擇器的輸入來控制選擇器選擇不同的頻率作為輸出控制揚(yáng)聲器工作。

      Clk:輸入信號 來為計(jì)數(shù)器提供工作頻率。

      Rst:輸入信號 復(fù)位信號 使計(jì)數(shù)器的輸出為“00”。

      圖3-2-5 4進(jìn)制計(jì)數(shù)器

      3.3 系統(tǒng)結(jié)構(gòu)

      整個(gè)系統(tǒng)就是各個(gè)分模塊組成來實(shí)現(xiàn)最后的彩燈控制功能,系統(tǒng)又兩個(gè)時(shí)鐘來控制一個(gè)是控制32進(jìn)制計(jì)數(shù)器即控制彩燈控制模塊來實(shí)現(xiàn)彩燈的不同輸出,另一個(gè)時(shí)鐘為分頻器的輸入來進(jìn)行分頻處理,最后用來控制揚(yáng)聲器發(fā)出不同的音樂,具體分頻處理的時(shí)鐘的頻率比實(shí)現(xiàn)彩燈控制的時(shí)鐘頻率要高。

      圖 3-3-1 系統(tǒng)功能模塊

      4.總結(jié)

      這次的EDA課程設(shè)計(jì)有一周的時(shí)間,在這一周的時(shí)間里我們充分合理的安排了自己的時(shí)間來使本次的課程設(shè)計(jì)能夠順利的完成,當(dāng)然我們在本次的設(shè)計(jì)中并不是一帆風(fēng)順的,我們遇到了一些的問題,例如我們開始時(shí)用的文本的方式用一個(gè)總的程序來完成,可以在設(shè)計(jì)的過程中我們發(fā)現(xiàn)程序編到后面變量越到很容易搞混淆同時(shí)各個(gè)進(jìn)程間的聯(lián)系也越來越模糊以至于后面我們自己都不知道程序的整體框圖是什么,導(dǎo)致后面不能夠繼續(xù)下去,后面我們再一次對我們這次的設(shè)計(jì)題目進(jìn)行了分析和整理,最后我和我的同伴決定采用分模塊的方式來完成本次的課題設(shè)計(jì),當(dāng)然最重要的是分析各個(gè)模塊間的關(guān)系。最后我們采用上面分析的結(jié)構(gòu)框圖。最后我們的設(shè)計(jì)很成功,仿真和硬件測試都是正確的,實(shí)現(xiàn)了我們的設(shè)計(jì)要求和目的。

      在這次設(shè)計(jì)中我們收獲了很多,首先最直接的收獲就是我們鞏固了這門課程所學(xué)過的知識,把它運(yùn)用到了實(shí)踐當(dāng)中,并且學(xué)到了很多在書本撒和那個(gè)所沒有學(xué)到的知識,通過查閱相關(guān)資料進(jìn)一步加深了對EDA的了??偟膩碚f,通過這次課程設(shè)計(jì)不僅鍛煉了我們的動(dòng)手和動(dòng)腦能力,也使我懂得了理論與實(shí)際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,要把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在我們的共同努力和指導(dǎo)老師的指引下我們圓滿的完成了彩燈控制器的設(shè)計(jì),實(shí)現(xiàn)了設(shè)計(jì)目的。

      6附錄一 程序:

      ---------------分頻器模塊----------LIBRARY ieee;USE ieee.std_logic_1164.all;

      ENTITY fenpinqi IS

      PORT(clk,rst : IN std_logic;

      clk_10,clk_4,clk_6,clk_8 : OUT std_logic);

      END fenpinqi;

      ARCHITECTURE cd OF fenpinqi IS begin p1:process(clk,rst)

      variable a:integer range 0 to 20;

      begin if rst='1' then

      clk_4<='0';

      -----

      復(fù)位信號控制部分 else if clk'event and clk='1'then

      if a>=3 then

      a:=0;

      clk_4<='1';

      else

      a:=a+1;

      clk_4<='0';

      end if;

      end if;

      end if;end process p1;

      p2:process(clk,rst)

      variable b:integer range 0 to 20;

      begin if rst='1' then

      clk_6<='0';

      -----

      復(fù)位信號控制部分

      else if clk'event and clk='1'then

      if b>=5 then

      b:=0;

      clk_6<='1';

      else

      b:=b+1;

      clk_6<='0';

      end if;

      end if;

      end if;end process p2;

      p3:process(clk,rst)

      variable c:integer range 0 to 20;

      begin if rst='1' then

      clk_8<='0';

      -----else if clk'event and clk='1'then

      if c>=7 then

      c:=0;

      clk_8<='1';

      else

      c:=c+1;

      clk_8<='0';

      end if;

      end if;

      end if;end process p3;

      p4:process(clk,rst)

      variable d:integer range 0 to 20;

      begin if rst='1' then

      clk_10<='0';

      -----else if clk'event and clk='1'then

      if d>=9 then

      d:=0;

      clk_10<='1';

      else

      復(fù)位信號控制部分7

      復(fù)位信號控制部分

      d:=d+1;

      clk_10<='0';

      end if;

      end if;

      end if;end process p4;end cd;

      ---------------4選1選擇器--------LIBRARY ieee;USE ieee.std_logic_1164.all;

      ENTITY xzq4_1 IS

      PORT(rst:in std_logic;

      inp:in integer range 0 to 3;

      in1,in2,in3,in4 : In std_logic;

      output : OUT std_logic);

      END xzq4_1;

      ARCHITECTURE a OF xzq4_1 IS

      BEGIN

      PROCESS(rst,inp)BEGIN

      if(rst='1')then output<='0';

      else

      case inp is

      when 0=>output<=in1;

      when 1=>output<=in2;

      when 2=>output<=in3;

      when 3=>output<=in4;

      when others=>null;

      end case;

      end if;

      END PROCESS;END a;

      ------------彩燈控制模塊---------LIBRARY ieee;USE ieee.std_logic_1164.all;

      ENTITY caideng IS

      PORT(input : IN INTEGER RANGE 0 TO 31;

      rst:in std_logic;

      output : OUT std_logic_vector(7 downto 0);

      sm :out std_logic_vector(6 downto 0));

      END caideng;

      ARCHITECTURE a OF caideng IS

      BEGIN

      PROCESS(input)BEGIN

      if rst='1' then output<=“00000000”;sm<=“0000000”;

      else

      case input is

      when 0=>output<=“10000000”;sm<=“0000110”;

      when 1=>output<=“01000000”;sm<=“0000110”;

      when 2=>output<=“00100000”;sm<=“0000110”;

      when 3=>output<=“00010000”;sm<=“0000110”;

      when 4=>output<=“00001000”;sm<=“0000110”;

      when 5=>output<=“00000100”;sm<=“0000110”;

      when 6=>output<=“00000010”;sm<=“0000110”;

      when 7=>output<=“00000001”;sm<=“0000110”;

      when 8=>output<=“00010000”;sm<=“0011011”;

      when 9=>output<=“00110000”;sm<=“0011011”;

      when 10=>output<=“00111000”;sm<=“0011011”;

      when 11=>output<=“01111000”;sm<=“0011011”;

      when 12=>output<=“01111100”;sm<=“0011011”;

      when 13=>output<=“01111110”;sm<=“0011011”;

      when 14=>output<=“11111110”;sm<=“0011011”;

      when 15=>output<=“11111111”;sm<=“0011011”;

      when 16=>output<=“10000001”;sm<=“1001111”;

      when 17=>output<=“11000001”;sm<=“1001111”;

      when 18=>output<=“11000011”;sm<=“1001111”;

      when 19=>output<=“11100011”;sm<=“0011011”;

      when 20=>output<=“11100111”;sm<=“1001111”;

      when 21=>output<=“11110111”;sm<=“1001111”;

      when 22=>output<=“11111111”;sm<=“1001111”;

      when 23=>output<=“00001000”;sm<=“1001111”;

      when 24=>output<=“00000001”;sm<=“0100110”;

      when 25=>output<=“00000010”;sm<=“0100110”;

      when 26=>output<=“00000100”;sm<=“0100110”;

      when 27=>output<=“00001000”;sm<=“0100110”;

      when 28=>output<=“00010000”;sm<=“0100110”;

      when 29=>output<=“00100000”;sm<=“0100110”;

      when 30=>output<=“01000000”;sm<=“0100110”;

      when 31=>output<=“10000000”;sm<=“0100110”;

      when others=>null;

      end case;

      end if;

      end process;end a;

      -------------32進(jìn)制計(jì)數(shù)器模塊----

      LIBRARY ieee;USE ieee.std_logic_1164.all;

      ENTITY counter_32 IS

      PORT(clk,rst : IN std_logic;

      count_out : OUT integer range 0 to 31);

      END counter_32;

      ARCHITECTURE a OF counter_32 IS BEGIN PROCESS(rst,clk)

      variable temp:integer range 0 to 32;BEGIN

      IF rst='1' THEN

      temp:=0;

      ELSIF(clk'event and clk='1')THEN

      temp:=temp+1;

      if(temp=32)then

      temp:=0;

      end if;

      END IF;

      count_out<=temp;END PROCESS;

      END a;

      ------------4進(jìn)制計(jì)數(shù)器模塊---LIBRARY ieee;USE ieee.std_logic_1164.all;

      ENTITY counter_4 IS

      PORT(clk,rst : IN std_logic;

      count_out : OUT integer range 0 to 3);

      END counter_4;

      ARCHITECTURE a OF counter_4 IS BEGIN

      PROCESS(rst,clk)

      variable temp:integer range 0 to 32;BEGIN

      IF rst='1' THEN

      temp:=0;

      ELSIF(clk'event and clk='1')THEN

      temp:=temp+1;

      if(temp=4)then

      temp:=0;

      end if;

      END IF;

      count_out<=temp;END PROCESS;END a;

      7附錄二 編譯

      7附錄三 時(shí)序仿真

      下載基于FPGA的彩燈控制器設(shè)計(jì)(5篇)word格式文檔
      下載基于FPGA的彩燈控制器設(shè)計(jì)(5篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        彩燈控制器eda課程設(shè)計(jì)(定稿)

        目錄 1.引言.............................................................. 3 2. EDA技術(shù) ......................................................... 5 2.1 EDA技術(shù)介......

        基于FPGA的乒乓球游戲機(jī)控制器設(shè)計(jì)

        遼寧科技學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 第I頁 基于FPGA的乒乓球游戲機(jī)設(shè)計(jì) 摘 要 Verilog是甚高速集成電路硬件描述語言。目前,verilog已成為許多設(shè)計(jì)自動(dòng)化工具普遍采用的標(biāo)準(zhǔn)化......

        基于FPGA模數(shù)轉(zhuǎn)換控制器的設(shè)計(jì)

        EDA課程設(shè)計(jì)任務(wù)書 1、 設(shè)計(jì)題目:基于FPGA模數(shù)轉(zhuǎn)換控制器的設(shè)計(jì) 2、設(shè)計(jì)目的: (1) 熟悉掌握VHDL語言設(shè)計(jì)基本知識,熟練運(yùn)用QuartusⅡ軟件對各單元電路進(jìn)行軟件模擬、仿真; (2) 學(xué)習(xí)......

        EDA課程設(shè)計(jì):八路彩燈控制器

        EDA課程設(shè)計(jì) 設(shè)計(jì)題目:基于VHDL的8路彩燈控制器設(shè)計(jì) 一、 課程設(shè)計(jì)的目的 1.熟悉QuartusⅡ軟件的使用方法,使用VHDL 文本輸入設(shè)計(jì)法進(jìn)行任務(wù)設(shè)計(jì)。 2.增強(qiáng)自己實(shí)際動(dòng)手能力,獨(dú)......

        基于FPGA的交通紅綠燈控制器

        基于FPGA的交通紅綠燈控制器 姓名: 學(xué)號:專業(yè): 班級: 目錄 1.設(shè)計(jì)思路................................................... 3 1.1設(shè)計(jì)思想....................................

        數(shù)電課程設(shè)計(jì)循環(huán)彩燈控制器

        課 程 設(shè) 計(jì) 說 明 書 班 級:電子信息0901 學(xué) 號:0501090108 學(xué)生姓名:張亞軍 指導(dǎo)教師:曹建生日 期:2011.1.04 緒論 自1879年美國科學(xué)家愛迪生發(fā)明了白熾燈以來,便結(jié)束......

        基于FPGA的(帶有緊急情況處理的)交通燈控制器的設(shè)計(jì).

        學(xué)號成績 評語 《現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課程論文 題目基于FPGA的(帶有緊急情況處理的交通燈控制器的設(shè)計(jì) 作者班級 院別信息與通信工程專業(yè)電子信息工程完成時(shí)間 2011年5月12日......

        《單片機(jī)原理及應(yīng)用課程設(shè)計(jì)》節(jié)日彩燈控制器的設(shè)計(jì)

        《單片機(jī)原理及應(yīng)用課程設(shè)計(jì)》報(bào)告 ——節(jié)日彩燈控制器的設(shè)計(jì) 專業(yè):班級: 姓名: 學(xué)號:2014年2月 1.課程設(shè)計(jì)目的 1.1鞏固和加深對單片機(jī)原理和接口技術(shù)知識的理解; 1.2培養(yǎng)根據(jù)......