第一篇:VHDL課程設(shè)計報告 頻率計
目錄
1.前言...........................................................................................................................2 2.設(shè)計要求...................................................................................................................2 3.整體設(shè)計..................................................................................................................3 4.設(shè)計原理...................................................................................................................3 5.設(shè)計程序...................................................................................................................3
5.1頂層文件.............................................................................................................3 5.2 8位是進(jìn)制計數(shù)器..............................................................................................4 5.3 10進(jìn)制計數(shù)器...................................................................................................5 5.4 測頻控制電路.....................................................................................................6 5.5 32位鎖存器及其控制器.....................................................................................6
6.引腳鎖定...................................................................................................................8 7.綜合結(jié)果...................................................................................................................8
7.1 RTL電路.............................................................................................................8 7.2 測頻控制電路.....................................................................................................9 7.3 8位十進(jìn)制計數(shù)器..............................................................................................9 7.3 32位鎖存器......................................................................................................9
8.實驗結(jié)果.................................................................................................................10 7.實驗總結(jié)...................................................................................................................10 參考文獻(xiàn)......................................................................................................................12
自適應(yīng)數(shù)字頻率計數(shù)器設(shè)計
1.前言
傳統(tǒng)的數(shù)字頻率計一般是由分離元件搭接而成,用到的器件較多,連線比較復(fù)雜,而且會產(chǎn)生比較大的延時,造成測量誤差大、可靠性差。后來隨著單片機(jī)的大規(guī)模的應(yīng)用, 出現(xiàn)了不少用單片機(jī)控制的頻率測量系統(tǒng)。相對于以前用分離元件搭接起來的頻率測量系統(tǒng), 單片機(jī)控制的頻率測量系統(tǒng)在頻率測量范圍、頻率測量精度和頻率測量速度上都有了很大的提高。但由于單片機(jī)工作頻率的限制、單片機(jī)內(nèi)部計數(shù)器位數(shù)的限制等因素, 由單片機(jī)控制的頻率測量系統(tǒng)無法在頻率測量范圍、頻率測量精度和頻率測量速度上取得重大突破。若再增加別的器件, 以彌補(bǔ)單片機(jī)的不足, 不僅會大大增加系統(tǒng)的復(fù)雜性, 而且不利于系統(tǒng)的集成化。以E D A 工具作為開發(fā)平臺,運(yùn)用V H D L 語言,將使整個系統(tǒng)大大簡化,從而提高整體的性能和可靠性。本課題采用的是等精度數(shù)字頻率計,在一片F(xiàn)PGA開發(fā)板里實現(xiàn)了數(shù)字頻率計的絕大部分功能, 它的集成度遠(yuǎn)遠(yuǎn)超過了以往的數(shù)字頻率計。又由于數(shù)字頻率計最初的實現(xiàn)形式是用硬件描述語言寫成的程序, 具有通用性和可重用性。所以在外在的條件(如基準(zhǔn)頻率的提高, 基準(zhǔn)頻率精度的提高)的允許下,只需對源程序作很小的改動, 就可以使數(shù)字頻率計的精度提高幾個數(shù)量級。同時對于頻率精度要求不高的場合, 可以修改源程序, 使之可以用較小的器件實現(xiàn), 從而降低系統(tǒng)的整體造價。
2.設(shè)計要求
設(shè)計一個頻率計,頻率測量范圍為1-9999KHZ,量程分別為10、100、1M三檔,要求如下: a.當(dāng)讀數(shù)大于999時,頻率計處于超量程狀態(tài),下一次測量時,量程自動增大1檔 b.當(dāng)讀數(shù)小于099時,頻率計處于欠量程狀態(tài),下一次測量時,量程自動減小1檔
c.當(dāng)超過頻率范圍時,顯示器自動溢出
3.整體設(shè)計
當(dāng)被測頻率進(jìn)入時候,檔位1、2能自動換擋實現(xiàn)功能,在檔位1中,有一個LED燈亮(表示Hz);檔位2中有2個LED燈亮(表示kHz);當(dāng)計數(shù)頻率超出9999kHz的時候,顯示“E”而且LED燈全部熄滅,表示溢出功能。在程序代碼中,必須要清晰表示出計數(shù)的運(yùn)行狀況。
檔位1:當(dāng)被測頻率為0—9999Hz時候,直接顯示f x的值(單位為Hz); 檔位2:當(dāng)被測頻率為10k—9999kHz時候,顯示10-9999(單位kHz);
4.設(shè)計原理
根據(jù)頻率的定義和頻率測量的基本原理,測定信號的頻率必須有一個脈寬為1 秒的輸入信號脈沖計數(shù)允許的信號;1 秒計數(shù)結(jié)束后,計數(shù)值被鎖入鎖存器,計數(shù)器清0,為下一測頻計數(shù)周期作好準(zhǔn)備。測頻控制信號可以由一個獨立的發(fā)生器來產(chǎn)生。
5.設(shè)計程序
5.1頂層文件
LIBRARY IEEE;--頻率計頂層文件 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST IS PORT(CLK1HZ : IN STD_LOGIC;FSIN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END FREQTEST;ARCHITECTURE struc OF FREQTEST IS COMPONENT FTCTRL PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--計數(shù)器時鐘使能 RST_CNT : OUT STD_LOGIC;--計數(shù)器清零 Load : OUT STD_LOGIC);--輸出鎖存信號 END COMPONENT;COMPONENT COUNTER PORT(FIN : IN STD_LOGIC;--時鐘信號 CLR : IN STD_LOGIC;--清零信號 ENABL : IN STD_LOGIC;--計數(shù)使能信號
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--計數(shù)結(jié)果 END COMPONENT;COMPONENT REG32B PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END COMPONENT;SIGNAL TSTEN1 : STD_LOGIC;SIGNAL CLR_CNT1 : STD_LOGIC;SIGNAL Load1 : STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1, RST_CNT =>CLR_CNT1,Load =>Load1);U2 : REG32B PORT MAP(LK => Load1, DIN=>DTO1, DOUT => DOUT,LEDOUT=>LED);
U3 : COUNTER PORT MAP(FIN => FSIN, CLR => CLR_CNT1, ENABL => TSTEN1, DOUT=>DTO1);END struc;
5.2 8位是進(jìn)制計數(shù)器
LIBRARY IEEE;--8位十進(jìn)制計數(shù)器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER IS PORT(FIN : IN STD_LOGIC;--時鐘信號 CLR : IN STD_LOGIC;--清零信號 ENABL : IN STD_LOGIC;--計數(shù)使能信號
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--計數(shù)結(jié)果 END COUNTER;ARCHITECTURE behav OF COUNTER IS
COMPONENT COUNTER10 IS PORT(FIN : IN STD_LOGIC;--時鐘信號 CLR : IN STD_LOGIC;--清零信號 ENABL : IN STD_LOGIC;--計數(shù)使能信號
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--計數(shù)結(jié)果 COUT : OUT STD_LOGIC);END COMPONENT;
SIGNAL CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7: STD_LOGIC;BEGIN u1 : COUNTER10 PORT MAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3 DOWNTO 0),COUT=>CLK1);u2 : COUNTER10 PORT MAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7 DOWNTO 4),COUT=>CLK2);u3 : COUNTER10 PORT MAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11 DOWNTO 8),COUT=>CLK3);u4 : COUNTER10 PORT MAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15 DOWNTO 12),COUT=>CLK4);u5 : COUNTER10 PORT MAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19 DOWNTO 16),COUT=>CLK5);u6 : COUNTER10 PORT MAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23 DOWNTO 20),COUT=>CLK6);u7 : COUNTER10 PORT MAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27 DOWNTO 24),COUT=>CLK7);u8 : COUNTER10 PORT MAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31 DOWNTO 28));
END ARCHITECTURE behav;
5.3 10進(jìn)制計數(shù)器
LIBRARY IEEE;--10位計數(shù)器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER10 IS PORT(FIN : IN STD_LOGIC;--時鐘信號 CLR : IN STD_LOGIC;--清零信號 ENABL : IN STD_LOGIC;--計數(shù)使能信號
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--計數(shù)結(jié)果 COUT : OUT STD_LOGIC);END COUNTER10;ARCHITECTURE behav OF COUNTER10 IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(FIN, CLR, ENABL)BEGIN IF CLR = '1' THEN CQI <=(OTHERS=>'0');--清零 ELSIF FIN'EVENT AND FIN = '1' THEN IF ENABL = '1' THEN IF CQI<9 THEN CQI <= CQI + 1;ELSE CQI <=(OTHERS=>'0');END IF;END IF;END IF;
IF CQI=“1001” THEN COUT<='1';ELSE COUT<='0';END IF;END PROCESS;DOUT <= CQI;END behav;
5.4 測頻控制電路
LIBRARY IEEE;--測頻控制電路 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--計數(shù)器時鐘使能 RST_CNT : OUT STD_LOGIC;--計數(shù)器清零 Load : OUT STD_LOGIC);--輸出鎖存信號 END FTCTRL;ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC;BEGIN PROCESS(CLKK)BEGIN IF CLKK'EVENT AND CLKK = '1' THEN--1Hz時鐘2分頻 Div2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS(CLKK, Div2CLK)BEGIN IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';--產(chǎn)生計數(shù)器清零信號 ELSE RST_CNT <= '0';END IF;END PROCESS;Load <= NOT Div2CLK;CNT_EN <= Div2CLK;END behav;
5.5 32位鎖存器及其控制器
LIBRARY IEEE;--32位鎖存器及控制器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG32B IS PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END REG32B;ARCHITECTURE behav OF REG32B IS SIGNAL DD : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN
PROCESS(LK, DIN)BEGIN IF LK'EVENT AND LK = '1' THEN DD<=DIN;END IF;if DD(31 DOWNTO 28)=“0000” then IF DD(27 DOWNTO 16)=“000000000000” THEN DOUT<=DD(15 DOWNTO 0);LEDOUT<=“01”;ELSIF DD(27 DOWNTO 16)/=“000000000000” THEN DOUT<=DD(27 DOWNTO 12);LEDOUT<=“11”;end if;else DOUT(15 DOWNTO 0)<=“***0”;LEDOUT<=“00”;END IF;END PROCESS;END behav;
6.引腳鎖定
7.綜合結(jié)果
7.1 RTL電路
7.2 測頻控制電路
7.3 8位十進(jìn)制計數(shù)器
7.3 32位鎖存器
8.實驗結(jié)果
當(dāng)計數(shù)頻率為4Hz(范圍在0-9999Hz)的時候,此時LED燈有一個亮,計數(shù)為:0004;當(dāng)計數(shù)頻率為500KHz(范圍在10K-9999KHz)的時候,此時設(shè)定兩個LED燈都亮,計數(shù)為0500;當(dāng)計數(shù)頻率大于9999KHz的時候,設(shè)定此時兩個LED燈都處于熄滅狀態(tài),而計數(shù)則輸出一個‘E’值,表示范圍超出計數(shù)范圍。
7.實驗總結(jié)
經(jīng)系統(tǒng)測試表明,本圖頻率計的各項功能正常,能實現(xiàn)對頻率的0~9999kHz頻率范圍的測量,并通過LED指示和數(shù)碼管顯示,操作簡單,是理想頻率計解決方案。
經(jīng)過一個多星期的努力,本設(shè)計系統(tǒng)終于完成了。通過該課程設(shè)計,掌握了編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了VHDL程序開發(fā)的總流程框圖,了解了編譯程序的生成過程及其相關(guān)的技術(shù),對課本上的知識也有了更深的理解。老師常說,課本上的知識是機(jī)械的,要學(xué)會去運(yùn)用,要舉一反三。現(xiàn)在終于深刻的了解了這句話。經(jīng)過這次的課程設(shè)計,發(fā)現(xiàn)書本上很深奧的知識變的更為簡單,同樣,對實驗原理也了有更深的理解。知道和理解了該理論在計算機(jī)中是怎樣執(zhí)行的,對該理論在實踐中的應(yīng)用有深刻的理解。通過該課程設(shè)計,把死板的課本知識變得生動有趣,激發(fā)了學(xué)習(xí)的積極性。能夠把課堂上學(xué)的知識通過自己設(shè)計的程序表示出來,加深了對理論知識的理解。
課程設(shè)計中的電路和程序比較復(fù)雜,因此調(diào)試的過程更是考驗我們耐性和細(xì)心。除了課堂外,課程設(shè)計是最能學(xué)到東西的,最考驗人的。在做課程設(shè)計的這段時間,時刻都感到自己學(xué)的知識有多么的貧瘠。經(jīng)過這次課程設(shè)計,讓我對VHDL語言和FPGA有了更深的認(rèn)識,操作能力有了一定的提高。明白了,要想是寫出的代碼能運(yùn)行,需要耐心細(xì)心,毅力以及充沛的體力。只有經(jīng)過多次編輯,多次編譯,再多次運(yùn)行,才能編寫出更好的程序,有時候需要多次的更正才能達(dá)到所要的運(yùn)行結(jié)果。
參考文獻(xiàn)
[1] 潘松、黃繼業(yè),EDA技術(shù)應(yīng)用教程 VHDL篇[J].北京:高等教育出版社.2010
[2] 徐成劉彥李仁發(fā),一種全同步數(shù)字頻率測量方法的研究[J].北京:高等教育出版社.2004 [3] 李云鵬王思明,基于FPGA 的等精度頻率計設(shè)計[J].北京:高等教育出版社.2007
第二篇:VHDL八位數(shù)碼管頻率計課程設(shè)計
一、課程設(shè)計要求
設(shè)計一個8位數(shù)碼管顯示的頻率計(頻率分辨率為1Hz)。
二、總體結(jié)構(gòu)框圖
系統(tǒng)時鐘分頻及控制待測頻率計數(shù)數(shù)據(jù)鎖存動態(tài)掃描數(shù)碼管段選數(shù)碼管位選數(shù)碼管顯示
圖1 總體結(jié)構(gòu)框圖
三、課程設(shè)計原理
在電子技術(shù)中,頻率是最基本的參數(shù)之一,并且與許多點參量的測量方案、測量結(jié)果都有十分密切的關(guān)系,因此,頻率的測量就顯得尤為重要。測量頻率的方法有很多種,其中電子計數(shù)器測量頻率具有精度高、使用方便、測量迅速,以及便于實現(xiàn)測量過程自動化等優(yōu)點,是頻率測量的重要手段之一。
數(shù)字式頻率計的測量原理有兩類:一是直接測頻法,即在一定的閘門時間內(nèi)測量被測信號的脈沖個數(shù);二是間接測頻法即周期法,如周期測頻法。直接測頻法適用于高頻信號的頻率測量,通常采用計數(shù)器、數(shù)據(jù)鎖存器及控制電路實現(xiàn),并通過改變計數(shù)閥門的時間長短以達(dá)到不同的測量精度;間接測頻法適用于低頻信號的頻率測量。
本次課程設(shè)計中使用的是直接測頻法,即用計數(shù)器在計算機(jī)1s內(nèi)輸入信號周期的個數(shù),其測頻范圍為0Hz-99999999Hz。
四、器件的選擇
1、裝有QuartusII軟件的計算機(jī)一臺。
2、芯片:本實驗板中為EP芯片。
3、EDA實驗箱一個。
4、下載接口是數(shù)字芯片的下載接口(JTAG)主要用于FPGA芯片的數(shù)據(jù)下載。
5、時鐘源。
五、功能模塊和信號仿真圖以及源程序
(1)系統(tǒng)時鐘分頻及控制的功能模塊圖及其源程序
圖2 功能模塊圖
作用:將試驗箱上的50MHz的晶振分頻,輸出CLOCK為數(shù)碼管提供1kHz的動態(tài)掃描頻率。CNT_EN輸出為0.05s的信號,對頻率計中的32位十進(jìn)制計數(shù)器CNT10的ENA使能端進(jìn)行同步控制,當(dāng)TSTEN高電平時允許計數(shù),低電平時停止計數(shù),并保持其所計的脈沖數(shù)。在停止計數(shù)期間,首先需要一個鎖存信號LOAD的上跳沿將計數(shù)器在前一秒的計數(shù)值鎖存進(jìn)鎖存器REG32B中,并由外部的十進(jìn)制7段數(shù)碼管顯示計數(shù)值。設(shè)置鎖存器的好處是數(shù)據(jù)顯示穩(wěn)定,不會由于周期性的清零信號而不斷閃爍。鎖存信號后,必須有一個清零信號RST_CNT對計數(shù)器進(jìn)行清零,為下一秒的計數(shù)操作做準(zhǔn)備。該模塊的信號仿真圖如下:
圖3 仿真波形圖
源程序如下:
--分頻
library ieee;use ieee.std_logic_1164.all;entity fdivwangzheng is port(clk0:in std_logic;--輸入系統(tǒng)時鐘
clk1:out std_logic;--輸出1hz時鐘信號
clk2:out std_logic);--輸出顯示掃描時鐘信號
end fdivwangzheng;architecture a of fdivwangzheng is begin
p1:process(clk0)variable cnt:integer range 0 to 49999999;--分頻系數(shù)為24999999 variable ff:std_logic;begin if clk0'event and clk0='1' then if cnt<49999999 then cnt:=cnt+1;else cnt:=0;ff:=not ff;--反向 end if;end if;clk1<=ff;end process p1;p2:process(clk0)
variable cnn:integer range 0 to 999;--分頻系數(shù)為499 variable dd:std_logic;begin if clk0'event and clk0='1' then if cnn<999 then cnn:=cnn+1;else cnn:=0;dd:=not dd;--反向 end if;end if;clk2<=dd;end process p2;end a;
--測頻控制器(testctl.vhd)LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTLwanzheng IS
PORT(CLKK : IN STD_LOGIC;--1Hz
CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC);
END TESTCTLwanzheng;ARCHITECTURE behav OF TESTCTLwanzheng IS
SIGNAL DIV2CLK : STD_LOGIC;BEGIN
PROCESS(CLKK)
BEGIN
IF CLKK'EVENT AND CLKK = '1' THEN DIV2CLK <= NOT DIV2CLK;
END IF;
END PROCESS;
PROCESS(CLKK, DIV2CLK)
BEGIN
IF CLKK='0' AND Div2CLK='0' THEN RST_CNT <= '1';
ELSE RST_CNT <= '0';
END IF;
END PROCESS;
LOAD <= NOT DIV2CLK;
CNT_EN <= DIV2CLK;END behav;(2)十進(jìn)制計數(shù)器的功能模塊圖及其源程序
圖4 功能模塊圖
作用:當(dāng)使能端為高電平,清零端為低電平時,實現(xiàn)十進(jìn)制計數(shù)功能。
第一個CNT10計數(shù)輸出CQ=9時,下一秒時鐘上升沿到來時,將產(chǎn)生一個CARRY_OUT信號作為下一個CNT10的時鐘信號,同時CQ清零,依次遞推到8個CNT10。
當(dāng)清零端為低電平,使能端為低電平時停止計數(shù)。當(dāng)清零端為高電平時,計數(shù)器清零。該模塊的信號仿真圖如下:
圖5 仿真波形圖
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 IS PORT(CLK: IN STD_LOGIC;
CLR: IN STD_LOGIC;
ENA: IN STD_LOGIC;
CQ : OUT INTEGER RANGE 0 TO 9;
CARRY_OUT: OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 IS SIGNAL CQI: INTEGER RANGE 0 TO 9;BEGIN PROCESS(CLR,CLK,ENA)BEGIN IF(CLR='1')THEN CQI<=0;ELSIF(CLK'EVENT AND CLK='1')THEN
IF(ENA='1')THEN
IF(CQI=9)THEN
CQI<=0;
CARRY_OUT<='1';
ELSE
CQI<=CQI+1;
CARRY_OUT<='0';
END IF;
END IF;END IF;END PROCESS;CQ<=CQI;END behav;
(3)32位鎖存器的功能模塊圖及其源程序
圖6 功能模塊圖
實現(xiàn)方式:LOAD信號上升沿到來時將對輸入到內(nèi)部的CNT10計數(shù)信號進(jìn)行鎖存。作用:鎖存信號,并將結(jié)果輸出給SELTIME。該模塊的信號仿真圖如下:
圖7 仿真波形圖
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS
PORT(LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END ENTITY REG32B;ARCHITECTURE behav OF REG32B IS BEGIN
PROCESS(LOAD,DIN)IS BEGIN
IF LOAD'EVENT AND LOAD='1' THEN DOUT<=DIN;
END IF;END PROCESS;END ARCHITECTURE behav;
(4)數(shù)碼管掃描的功能模塊圖及其源程序
圖8 功能模塊圖
作用:鎖存信號輸出DIN[31..0],然后由SELTIME進(jìn)行掃描輸出,當(dāng)SEL為”000”時選通第一個CNT10,輸出到LED7進(jìn)行譯碼輸出。依次類推。該模塊的信號仿真圖如下:
圖9 仿真波形圖
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SELTIME IS PORT(CLK : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DAOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END SELTIME;ARCHITECTURE behav OF SELTIME IS SIGNAL SEC : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN PROCESS(CLK)BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(SEC=“111”)THEN
SEC<=“000”;
ELSE
SEC<=SEC+1;
END IF;
END IF;END PROCESS;
PROCESS(SEC,DIN(31 DOWNTO 0))BEGIN CASE SEC IS WHEN “000”=>DAOUT<=DIN(3 DOWNTO 0);WHEN “001”=>DAOUT<=DIN(7 DOWNTO 4);WHEN “010”=>DAOUT<=DIN(11 DOWNTO 8);WHEN “011”=>DAOUT<=DIN(15 DOWNTO 12);WHEN “100”=>DAOUT<=DIN(19 DOWNTO 16);WHEN “101”=>DAOUT<=DIN(23 DOWNTO 20);WHEN “110”=>DAOUT<=DIN(27 DOWNTO 24);WHEN “111”=>DAOUT<=DIN(31 DOWNTO 28);WHEN OTHERS=>NULL;END CASE;END PROCESS;SEL<=SEC;END behav;
(5)七段數(shù)碼管譯碼顯示的功能模塊圖及其源程序
圖10 功能模塊圖
作用:將實驗結(jié)果使用數(shù)碼管直觀的顯示出來。該模塊的信號仿真圖如下:
圖11 仿真波形圖
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LED7 IS PORT(DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END LED7;ARCHITECTURE behav OF LED7 IS--SIGNAL LED7:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN PROCESS(DIN)BEGIN CASE DIN IS WHEN “0000”=>DOUT<=“0111111”;WHEN “0001”=>DOUT<=“0000110”;WHEN “0010”=>DOUT<=“1011011”;WHEN “0011”=>DOUT<=“1001111”;WHEN “0100”=>DOUT<=“1100110”;WHEN “0101”=>DOUT<=“1101101”;WHEN “0110”=>DOUT<=“1111101”;WHEN “0111”=>DOUT<=“0000111”;WHEN “1000”=>DOUT<=“1111111”;WHEN “1001”=>DOUT<=“1101111”;WHEN “1010”=>DOUT<=“1110111”;WHEN “1011”=>DOUT<=“1111100”;WHEN “1100”=>DOUT<=“0111001”;WHEN “1101”=>DOUT<=“1011110”;WHEN “1110”=>DOUT<=“1111001”;WHEN “1111”=>DOUT<=“1110001”;WHEN OTHERS=>NULL;END CASE;END PROCESS;END ARCHITECTURE behav;(6)3-8譯碼器的功能模塊圖及其源程序
圖12 功能模塊圖
作用:利用3-8譯碼器將數(shù)碼管的位選信號選通。該模塊的信號仿真圖如下:
圖13 仿真波形圖
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS138 IS
PORT(Q: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
dp:OUT STD_LOGIC);END LS138;ARCHITECTURE behav OF LS138 IS BEGIN
WITH Q SELECT
D<=“11111110” WHEN “000”, “11111101” WHEN “001”, “11111011” WHEN “010”, “11110111” WHEN “011”, “11101111” WHEN “100”, “11011111” WHEN “101”, “10111111” WHEN “110”, “01111111” wHEN “111”, “11111111” WHEN OTHERS;WITH Q SELECT
dp<='1' WHEN “001”, '0' WHEN OTHERS;END behav;
六、頂層模塊圖
圖14 總體設(shè)計頂層模塊圖
其中8個十進(jìn)制計數(shù)器模塊JSQ的底層模塊圖如圖15所示:
圖15 計數(shù)器模塊原理圖
本次課程設(shè)計的時鐘信號由試驗箱上面的5MHz的晶振提供,經(jīng)過系統(tǒng)時鐘和控制模塊后分別產(chǎn)生0.05Hz和10kHz的脈沖信號0.05Hz的脈沖信號十進(jìn)制計數(shù)器的使能信號,使計數(shù)器統(tǒng)計出待測信號在1s脈寬之間的脈沖數(shù)目。再由計數(shù)模塊將測得的信號傳送給數(shù)碼管顯示部分,通過譯碼模塊產(chǎn)生可以在數(shù)碼管上顯示的BCD碼。而1kHz是作為數(shù)碼管動態(tài)掃描的頻率,由于人的視覺暫留現(xiàn)象,頻率較高時,數(shù)碼管看起來就是連續(xù)發(fā)光。本設(shè)計中使個位顯示為數(shù)碼管的小數(shù)點后面一位,由此實現(xiàn)了頻率分辨率為1Hz的頻率計設(shè)計。
結(jié)論
EDA技術(shù)是電子設(shè)計的發(fā)展趨勢,利用EDA工具可以代替設(shè)計者完成電子系統(tǒng)設(shè)計中的大部分工作。EDA工具從數(shù)字系統(tǒng)設(shè)計的單一領(lǐng)域,發(fā)展到今天,應(yīng)用范圍己涉及模擬、微波等多個領(lǐng)域,可以實現(xiàn)各個領(lǐng)域電子系統(tǒng)設(shè)計的測試、設(shè)計仿真和布局布線等,這些都是我在這次課設(shè)中深刻體會到的。經(jīng)過這次課程設(shè)計,讓我真正認(rèn)識了EDA這門學(xué)科,了解到這種方式下的設(shè)計方案,硬件電路簡潔,集成度高,體現(xiàn)了當(dāng)今社會所需的先進(jìn)技術(shù),日后必定在有著廣闊的發(fā)展空間。
通過這次對EDA課程設(shè)計的進(jìn)一步操作,能更好的在Quartus II上進(jìn)行VHDL程序的編譯及各個模塊的仿真,雖然在實際操作過程中由于粗心造成了程序的缺失和錯誤,但都在老師和同學(xué)的幫助下一一解決了。很好地鞏固了我們學(xué)過的專業(yè)知識,使我對數(shù)字系統(tǒng)結(jié)構(gòu)也有了更進(jìn)一步的了解和認(rèn)識,同時對數(shù)據(jù)庫軟件EDA技術(shù)、VHDL等系列知識都有了一定的了解。使用EDA技術(shù)開發(fā)頁面的能力也有了很大提高,也使我們把理論與實踐從真正意義上相結(jié)合了起來;考驗了我們借助互聯(lián)網(wǎng)絡(luò)搜集、查閱相關(guān)文獻(xiàn)資料,和組織材料的綜合能力。
在這次課程設(shè)計中,雖然應(yīng)用的都是在書本上學(xué)過的知識,但是只有應(yīng)用到實際中才算真正的學(xué)懂了這些知識。本次數(shù)字頻率計的涉及到了VHDL語言、Quartus II軟件,EDA技術(shù)等。涉及了微機(jī)原理和EDA所學(xué)的大部分內(nèi)容。通過這次課程設(shè)計實踐鞏固了學(xué)過的知識并能夠較好的利用。課程設(shè)計實踐不單是將所學(xué)的知識應(yīng)用于實際,在設(shè)計的過程中,只擁有理論知識是不夠的。邏輯思維、電路設(shè)計的步驟和方法、考慮問題的思路和角度等也是很重要,需要我們著重注意鍛煉的能力。在這次設(shè)計中還發(fā)現(xiàn)理論與實際常常常存在很大差距,為了使電路正常工作,必須靈活運(yùn)用原理找出解決方法。
在課題設(shè)計中,通過使用Quartus II這個完全集成化、易學(xué)易用的可編程邏輯設(shè)計環(huán)境,利用VHDL語言設(shè)計完成八位十進(jìn)制數(shù)字頻率計,能夠較好的測定所給頻率,并且具有自動清零和自動測試的功能,基本符合此次課程設(shè)計給出的要求。
第三篇:數(shù)電課程設(shè)計計數(shù)式頻率計
計數(shù)式數(shù)字頻率計
1、control模塊
功能仿真
時序仿真
Counter100模塊
功能仿真
時序仿真
Counter10模塊
功能仿真
時序仿真
Code1模塊
功能仿真
時序仿真
數(shù)字頻率計頂層邏輯圖
總模塊功能仿真
總模塊時序仿真
第四篇:頻率計設(shè)計實訓(xùn)報告范文
數(shù)字電路實訓(xùn)報告
題目:數(shù)字頻率計 專業(yè):電子信息工程 班級: 姓名: 學(xué)號:
摘要
系統(tǒng)功能介紹:
數(shù)字頻率計是一種基本的測量儀器,是用量最大、品種很多的產(chǎn)品,是計算機(jī)、通訊設(shè)備、音頻視頻等科研生產(chǎn)領(lǐng)域不可缺少的測量儀器。它是一種用十進(jìn)制數(shù)字顯示被測信號頻率的數(shù)字測量儀器。它的基本功能是測量正弦信號,方波信號以及其他各種單位時間內(nèi)變化的物理量。
本次設(shè)計選擇以集成芯片作為核心器件,利用數(shù)字電子技術(shù)基礎(chǔ)的相關(guān)知識,設(shè)計了一個簡易四位數(shù)字頻率計,以分頻器、觸發(fā)器和計數(shù)器為核心,由信號輸入、計數(shù)、數(shù)據(jù)處理和數(shù)據(jù)顯示等功能模塊組成。它是用數(shù)字顯示被測信號頻率的儀器,被測信號可以是正弦波,方波或其它周期性變化的信號。
目錄
一.?dāng)?shù)字頻率計的基本原理.................................................................................4 二.設(shè)計思路.........................................................................................................4
2.1秒信號........................................................................................................4 2.2分頻器........................................................................................................4 2.3計數(shù)器........................................................................................................4 2.4鎖存器........................................................................................................4 2.5顯示譯碼器與數(shù)碼管................................................................................4 三.元件.................................................................................................................5
3.1 CD4060(分頻器芯片)...............................................................................5 3.2 CD4013(D觸發(fā)器芯片)......................................................................5 3.3 CD4017(脈沖分配器)..........................................................................5 3.4 CD4029(計數(shù)器芯片)..........................................................................5 3.5 CD4511(譯碼芯片)..............................................................................5 3.6數(shù)碼管........................................................................................................5 3.7 7404(與非門芯片),兩個電容(20~30pF),電阻(1M)。................5 四.仿真.................................................................................................................5 五.電路圖.............................................................................................................6 六.電路的調(diào)試過程.............................................................................................6 七.心得體會.........................................................................................................7 八.參考文獻(xiàn).........................................................................................................8
數(shù)字頻率計的設(shè)計
一.?dāng)?shù)字頻率計的基本原理
二.設(shè)計思路
根據(jù)上面的分析,數(shù)字頻率計的基本電路由以下五個部分組成。
2.1
秒信號 2.2
分頻器 2.3
計數(shù)器 2.4
鎖存器 2.5
顯示模塊
三.元件
3.1
CD4060BE(分頻器芯片)3.2
SN74HC74N(D觸發(fā)器芯片)3.3
CD4017BE(脈沖分配器)3.4
CD4029BE(計數(shù)器芯片)3.5
CD4511BE(譯碼芯片)3.6
LG5011AH(數(shù)碼管3個)
3.7
SN74HC04N(與非門芯片),兩個電容(20~30pF),電阻(1M)。
四.仿真
五.電路圖
六.電路的調(diào)試過程
電路板焊接完成之后,就需要進(jìn)行調(diào)試過程了,剛開始有的同學(xué)焊接完成之后,讓老師進(jìn)行查看,結(jié)果不顯示,或者顯示不成功,老師就給我們講解了如何進(jìn)行調(diào)試電路,要學(xué)會自己查找問題,自己檢測電路時哪里的問題。首先就是不亮的問題,就是沒有焊接好或者某個地方焊接短路的,這就需要自己一根一根一部分一部分進(jìn)行檢查檢測了。接著是數(shù)碼管全亮了,并沒有計數(shù),老師告訴我們需要把三個4511的5腳三個接到4029的1腳上,不再接地了,如果不出什么意外而且其他電路部分沒有問題,這步完成后,電路應(yīng)該就正常工作了。最后我的電路還遇到的問題是,頻率計計數(shù)了,但是就是不穩(wěn)定,于是老師經(jīng)過思考后,讓我們分別在三個數(shù)碼管上串聯(lián)一個電阻,經(jīng)過這步后,我的電路基本調(diào)試完成,基本沒有什么大的問題了。以上這些是我的電路進(jìn)行調(diào)試的過程中遇到的問題,可能還有其他調(diào)試過程中遇到的問題,這需要我們耐心調(diào)試,不懂的要多問老師同學(xué),這樣電路才能調(diào)試成功。
七.心得體會
本次實訓(xùn)讓我體味到設(shè)計電路、連接電路、調(diào)測電路過程中的苦與甜。設(shè)計是我們將來必需的技能,這次實訓(xùn)恰恰給我們提供了一個應(yīng)用自己所學(xué)知識的機(jī)會,從查找資料到對電路的設(shè)計以及對電路的調(diào)試再到最后電路的成型,都對我所學(xué)的知識進(jìn)行了檢驗。
首先第一周是“嘮嗑”,老師給我們分了組,然我們在組內(nèi)討論,各自發(fā)揮給子的優(yōu)勢,分別能勝任什么工作。每個人的職責(zé)分配完畢后,接著就是“老板”招標(biāo),各組競標(biāo),每組根據(jù)老師提出的要求進(jìn)行思考和組織語言,然后說服老師。然后大家就開動大腦,整理思路,組織語言,最后向老師匯報的時候,雖然大家都基本沒說到點子上,但是也說明大家還是動腦筋了。第一周的實訓(xùn)看似簡單,但是老師在鍛煉我們的動腦能力和看問題要看本質(zhì)以及最后鍛煉我們的語言表達(dá)能力,收獲很多。
第二周是電路的設(shè)計,在電腦上用仿真軟件設(shè)計電路,畢竟我們學(xué)得不是那么透徹,基本上沒法把書本上的知識和實力聯(lián)系起來,大家絞盡腦汁,也不知道如何下手,該從哪里下手,最后在老師的幫助下,我們完成了仿真電路的設(shè)計。在這個過程中,老師耐心的給我們講解每個元件的功能和用途,該如何連接到電路中。這周的實訓(xùn)中充分暴露了我們理論和實際聯(lián)系的太少太少了,還有動手上機(jī)操作的能力不強(qiáng),以后還有待提高。
第三周第四周就是硬件的電路焊接設(shè)計了。老師給我們發(fā)了所有的原件和電路板,我們把之前的仿真電路打印出來,然后就比葫蘆畫瓢的焊接,但是后來才發(fā)現(xiàn),不認(rèn)真弄清電路的構(gòu)造只知道比葫蘆畫瓢的焊接,在后面的時候很容易焊接錯,所以首先得弄清電路構(gòu)造。在電路板上布線設(shè)計硬件的連接方式,這一步還是比較輕松,主要是布的線要盡可能的不交叉。之后就開始對著圖焊板子,開始把元器件焊上去還是比較簡單好看的。可是緊接著進(jìn)入焊線階段就難住我了,線拉不直,焊在板子上就很丑;另一方面,在焊的過程中就會發(fā)現(xiàn)有那么幾根線是按照布線圖來焊是實現(xiàn)不了的,于是,中途又會重新改布線圖。硬件部分我花了接近兩周的課余時間,反反復(fù)復(fù)的修改,焊接,終于初步完成了。最后一周是板子焊好后的進(jìn)硬件調(diào)試階段以及總結(jié)大會。硬件調(diào)試時,發(fā)現(xiàn)了線路的一些錯誤接法和元器件位置的錯接等等,這樣又花了很多時間調(diào)試修改,硬件就基本上算是完成了。這周感悟也很多,不光要焊接成功電路,還要學(xué)會自己查找問題,解決問題,這才是真正地學(xué)到了知識。
通過五周的頻率計設(shè)計,真的是感觸頗多。這五周以來我們每周實訓(xùn)課都積極參與其中,完成老師布置的任務(wù)。在課余時間去實驗室焊接電路。每天和大家在一起焊板子,一起討論問題,一起互相幫助的畫面還歷歷在目。這其中有歡聲笑語,也有苦有累。還有很多不足的地方,需要自己改進(jìn),還有一些缺點也要改掉。總之,這次實訓(xùn),收獲很多。希望自己以后還能更努力。
八.參考文獻(xiàn)
1.CD4511
CD4511 是一個用于驅(qū)動共陰極 LED(數(shù)碼管)顯示器的 BCD 碼—七段碼譯
碼器,特點:具有 BCD 轉(zhuǎn)換、消隱和鎖存控制、七段譯碼及驅(qū)動功能的 CMOS 電路能提供較大的拉電流。可直接驅(qū)動 LED 顯示器。引腳圖如圖所示。
其功能介紹如下:
BI:4 腳是消隱輸入控制端,當(dāng) BI=0 時,不管其它輸入端狀態(tài)如何,七 段數(shù)碼管均處于熄滅(消隱)狀態(tài),不顯示數(shù)字。
LT:3 腳是測試輸入端,當(dāng) BI=1,LT=0 時,譯碼輸出全為 1,不管輸入
DCBA 狀態(tài)如何,七段均發(fā)亮,顯示“8”。它主要用來檢測數(shù)碼管是否損壞。LE:鎖定控制端,當(dāng) LE=0 時,允許譯碼輸出。LE=1 時譯碼器是鎖定 保持狀態(tài),譯碼器輸出被保持在 LE=0 時的數(shù)值。A1、A2、A3、A4、為 8421BCD 碼輸入端。
a、b、c、d、e、f、g:為譯碼輸出端,輸出為高電平1 有效。
2.CD4029
CD4029 是一組可預(yù)設(shè)二進(jìn)制/BCD、上數(shù)/下數(shù)計數(shù)器,其引腳圖如圖,功能有:
(1)4 位數(shù)據(jù)預(yù)設(shè)
(2)4 位二進(jìn)制計數(shù)或BCD 計數(shù)(3)上數(shù)計數(shù)或下數(shù)計數(shù)
當(dāng)其預(yù)設(shè)控制端PE 為1 時,不論其它輸入狀態(tài)為何,則QDQCQBQA=DCBA,其預(yù)設(shè)工作與Clock 無關(guān),屬異步預(yù)設(shè);當(dāng)PE=0 時,則正常計數(shù)。CD4029 的計數(shù)選擇有4 種,分別由U/D(上數(shù)/下數(shù))及B/D(二進(jìn)制/十進(jìn)制)兩腳來控制。
3.74LS74
74LS74
TTL 帶置位復(fù)位正觸發(fā)雙 D 觸發(fā)器
Vcc 2CR 2D 2Ck 2St 2Q-2Q ┌┴─┴─┴─┴─┴─┴─┴┐ 雙 D 觸發(fā)器 74LS74 │14 13 12 11 10 9 8 │)│
│ 1 2 3 4 5 6 7│
└┬─┬─┬─┬─┬─┬─┬┘
工作原理: SD 和RD 接至基本RS 觸發(fā)器的輸入端,它們分別是預(yù)置和清零端,低電平有效。當(dāng)SD=0且RD=1時,不論輸入端D為何種狀態(tài),都會使Q=1,Q=0,即觸發(fā)器置1;當(dāng)SD=1且RD=0時,觸發(fā)器的狀態(tài)為0,SD和RD通常又稱為直接置1和置0端。我們設(shè)它們均已加入了高電平,不影響電路的工作。工作過程如下:
1.CP=0時,與非門G3和G4封鎖,其輸出Q3=Q4=1,觸發(fā)器的狀態(tài)不變。同時,由于Q3至Q5和Q4至Q6的反饋信號將這兩個門打開,因此可接收輸入信號D,Q5=D,Q6=Q5=D。2.當(dāng)CP由0變1時觸發(fā)器翻轉(zhuǎn)。這時G3和G4打開,它們的輸入Q3和Q4的狀態(tài)由G5和G6的輸出狀態(tài)決定。Q3=Q5=D,Q4=Q6=D。由基本RS觸發(fā)器的邏輯功能可知,Q=D。3.觸發(fā)器翻轉(zhuǎn)后,在CP=1時輸入信號被封鎖。這是因為G3和G4打開后,它們的輸出Q3和Q4的狀態(tài)是互補(bǔ)的,即必定有一個是0,若Q3為0,則經(jīng)G3輸出至G5輸入的反饋線將G5封鎖,即封鎖了D通往基本RS 觸發(fā)器的路徑;該反饋線起到了使觸發(fā)器維持在0狀態(tài)和阻止觸發(fā)器變?yōu)?狀態(tài)的作用,故該反饋線稱為置0維持線,置1阻塞線。Q4為0時,將G3和G6封鎖,D端通往基本RS觸發(fā)器的路徑也被封鎖。Q4輸出端至G6反饋線起到使觸發(fā)器維持在1狀態(tài)的作用,稱作置1維持線;Q4輸出至G3輸入的反饋線起到阻止觸發(fā)器置0的作用,稱為置0阻塞線。
4.74LS04 74LS04 TTL 六反相器 六個與非門 集成到集成塊里
5.CD4017
CD4017 是5 位Johnson 計數(shù)器,具有10 個譯碼輸出端,CP、CR、INH 輸入端。時鐘輸入端的斯密特觸發(fā)器具有脈沖整形功能,對輸入時鐘脈沖上升和下降時間無限制。INH 為低電平時,計數(shù)器在時鐘上升沿計數(shù);反之,計數(shù)功能無效。CR 為高電平時,計數(shù)器清零。Johnson 計數(shù)器,提供了快速操作、2 輸入譯碼選通和無毛刺譯碼輸出。防鎖選通,保證了正確的計數(shù)順序。譯碼輸出一般為低電平,只有在對應(yīng)時鐘周期內(nèi)保持高電平。在每10 個時鐘輸入周期CO 信號完成一次進(jìn)位,并用作多級計數(shù)鏈的下級脈動時鐘。引腳圖如圖所示:
引出端功能符號 CO:進(jìn)位脈沖輸淵 CP:時鐘輸入端 CR:清除端 INH:禁止端
Q0-Q9 計數(shù)脈沖輸出端 VDD:正電源
VSS:地CD4017組成的防抖動觸摸開關(guān)電路
5.CD4060 CD4060由一振蕩器和14級二進(jìn)制串行計數(shù)器位組成,振蕩器的結(jié)構(gòu)可以是RC或晶振電路,CR為高電平時,計數(shù)器清零且振蕩器使用無效。所有的計數(shù)器位均為主從觸發(fā)器。在CP1(和CP0)的下降沿計數(shù)器以二進(jìn)制進(jìn)行計數(shù)。在時鐘脈沖線上使用斯密特觸發(fā)器對時鐘上升和下降時間無限制。CD4060引腳圖:
第五篇:數(shù)字電路課程設(shè)計——用VHDL語言設(shè)計交通燈
數(shù)字電路課程設(shè)計報告
院系: 電氣信息工程學(xué)院 班級: 08測控2班 學(xué)號: 08314237 姓名: 董 亮 合作: 虞 波 指導(dǎo)教師: 翟 麗 芳
2010年12月10日
目
錄
引言······················································2 一 設(shè)計任務(wù)和設(shè)計要求·········································2 二 電路工作原理及方案設(shè)計································3 三 軟件設(shè)計與調(diào)試········································4 1.分頻模塊的設(shè)計及仿真圖·································4 2.控制器設(shè)計及仿真圖····································6 3.計數(shù)器的設(shè)計及仿真圖···································7 4.分位模塊的設(shè)計·······································9 5.?dāng)?shù)碼管驅(qū)動設(shè)計·······································10 6. 頂層文件設(shè)置·········································14
四 硬件焊接與組裝調(diào)試···································15 五 心得體會·············································16 六 參考文獻(xiàn)·············································16
交通燈控制電路設(shè)計
引言:
隨著社會的發(fā)展以及人類生活水平的提高,基于CPLD的EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大與深入,EDA技術(shù)在電子信息、通信、自動控制用計算機(jī)等領(lǐng)域的重要性日益突出。
如今,交通的問題日益突出,單單依靠人力來指揮交通已經(jīng)不可行了,所以,設(shè)計交通燈來完成這個需求就顯的越加迫切了。為了確保十字路口的行人和車輛順利、暢通地通過,往往采用電子控制的交通信號來進(jìn)行指揮。以下就是運(yùn)用數(shù)字電子設(shè)計出的交通燈。
本程序設(shè)計的是交通燈的設(shè)計。采用EDA作為開發(fā)工具,VHDL語言為硬件描述語言,quartusII作為程序運(yùn)行平臺,所開發(fā)的程序通過調(diào)試運(yùn)行、波形仿真驗證,實現(xiàn)設(shè)計目標(biāo)。
一.設(shè)計任務(wù)與設(shè)計要求
1. 設(shè)計任務(wù)
設(shè)計一個基于FPGA的十字路口交通控制器,假設(shè)南北方向和東西方向,兩個方向分別設(shè)置紅燈、綠燈、黃燈三盞燈,設(shè)置一組倒計時顯示器,用以指揮車輛和行人有序的通行。紅燈亮表示直行車輛禁行;綠燈亮表示直行車輛可以通行;黃燈亮表示直行車輛即將禁行;倒計時顯示器用來顯示允許通行或禁止通行的時間。盡量采用層次化設(shè)計。2. 設(shè)計要求
在十字路口南北和東西兩個方向各設(shè)一組紅燈、黃燈、綠燈。設(shè)一組倒計時顯示器。
自動控制:
設(shè)置一組數(shù)碼管,以倒計時的方式顯示允許通行或禁止通行的時間,南北方向為主干道,紅燈、黃燈和綠燈顯示時間分別是55、5s、50s。東西方向為次干道,紅燈、黃燈綠燈顯示時間分別為35s、5s、30s。
特殊功能:
(1)緊急狀態(tài)時,手動撥動緊急開關(guān),主干道以及次干道都顯示紅燈,禁止通行,并由蜂鳴其報警。
(2)黃燈顯示信號為脈沖信號,使得黃燈為“一閃一閃”的顯示狀態(tài)。
二.電路工作原理及方案設(shè)計
圖1總體設(shè)計框圖
在VHDL設(shè)計描述中,采用自頂向下的設(shè)計思路,首先要描述頂層的接口,上面的描述已經(jīng)規(guī)定了交通燈控制的輸入輸出信號:輸入信號:外部時鐘信號clk。LED在自頂向下的VHDL設(shè)計描述中,通常把整個設(shè)計的系統(tǒng)劃分為幾個模塊,然后采用結(jié)構(gòu)描述方式對整個系統(tǒng)進(jìn)行描述。通過上面的分析,不難得知可以把交通燈控制系統(tǒng)劃分為4個模塊:時鐘分頻模塊,計數(shù)模塊,控制模塊,分位譯碼模塊。
分頻電路:輸入較高頻率脈沖用分頻電路的到較
(HOLD=‘1’)發(fā)生是,計數(shù)器暫停計數(shù)。
分位譯碼電路:因為控制器輸出的倒計時數(shù)值可能是1位或者2位十進(jìn)制數(shù),所以在七段數(shù)碼管的譯碼電路前要加上分位電路(即將其分為2個1位的十進(jìn)制數(shù))。七段數(shù)碼管的譯碼電路根據(jù)控制電路的控制信號,驅(qū)動交通燈的顯示,通過輸入二進(jìn)制數(shù)值,輸出信號點亮二極管,我們用的是共陰極數(shù)碼管,因此譯碼電路輸出邏輯數(shù)值‘1’點亮二極管,譯碼電路輸出邏輯數(shù)值‘0’熄滅二極管。
三.軟件設(shè)計與調(diào)試
圖2模塊化設(shè)計原理圖
1.分頻模塊的設(shè)計及仿真圖
分頻器1實現(xiàn)的是將高頻時鐘信號轉(zhuǎn)換成底頻的時鐘信號,用于觸發(fā)控制器、計數(shù)器和掃描顯示電路。該分頻器實現(xiàn)的是1000分頻,將50M赫茲的時鐘信號分頻成50000赫茲的時鐘信號。LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);
END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499;Signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;clkout<=clk;end;分頻器2實現(xiàn)的是50000分頻,將50000赫茲的時鐘信號分頻成1赫茲的時鐘信號。
LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider1 IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Devider1 OF FreDevider1 IS CONSTANT N:Integer:=24999;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;
clkout<=clk;end;
2.控制器設(shè)計及仿真圖
控制器的作用是根據(jù)計數(shù)器的計數(shù)值控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段譯管的分譯碼電路。此外,當(dāng)檢測到特殊情況(Hold=‘1’)發(fā)生時,無條件點亮紅色的發(fā)光二極管。功能:控制發(fā)光二極管的亮、滅,以及輸出倒計時數(shù)值給七段譯碼管的分位譯碼電路。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY countroller IS PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END;ARCHITECTURE behavior OF Countroller IS BEGIN process(Clock)BEGIN IF falling_edge(Clock)THEN IF Hold='1' THEN RedA<='1';RedB<='1';GreenA<='0';GreenA<='0';YellowA<='0';YellowB<='0';
ELSIF CountNum<=54 THEN NumA<=55-CountNum;RedA<='0';GreenA<='1';YellowA<='0';ELSIF CountNum<=59 THEN NumA<=60;RedA<='0';GreenA<='0';YellowA<='1';ELSE NumA<=90-CountNum;RedA<='1';GreenA<='0';YellowA<='0';END IF;IF CountNum<=54 THEN RedB<='1';GreenB<='0';YellowB<='0';ELSIF CountNum<=84 THEN RedB<='0';GreenB<='1';YellowB<='0';ELSe RedB<='0';GreenB<='0';YellowB<='1';END IF;end if;END PROCESS;END;3.計數(shù)器的設(shè)計及仿真圖
這里計數(shù)器的計數(shù)范圍為0—90S,下一個時鐘沿回復(fù)到0,開始下一輪計數(shù).此外,當(dāng)檢測到特殊情況(Hold=‘1‘)發(fā)生時,計數(shù)器暫停計數(shù)。
程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter IS PORT(clock:IN STD_LOGIC;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);
END;ARCHITECTURE behavior OF counter IS BEGIN Process(Clock)BEGIN IF rising_edge(Clock)THEN IF Hold='1' then countNum<=countNum;ELSE IF countNum=90 THEN countNum<=0;ELSE countNum<=countNum+1;END IF;END IF;END PROCESS;END;
4.分位模塊的設(shè)計
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Fenwei IS PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END;ARCHITECTURE behavior OF Fenwei IS BEGIN process(Numin)BEGIN IF Numin>=60 THEN NumA<=10;NumB<=10;elsIF Numin>=50 THEN NumA<=5;NumB<=Numin-50;elsIF Numin>=40 THEN NumA<=4;NumB<=Numin-40;ELSIF Numin>=30 THEN NumA<=3;NumB<=Numin-30;ELSIF Numin>=20 THEN NumA<=2;NumB<=Numin-20;ELSIF Numin>=10 THEN
NumA<=1;NumB<=Numin-10;ELSE NumA<=0;NumB<=Numin;END IF;END PROCESS;END;
5.?dāng)?shù)碼管驅(qū)動設(shè)計 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY bcd_data IS PORT(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF bcd_data IS BEGIN process(bcd_data)BEGIN case bcd_data is when “0000”=>segout<=“1111110”;when “0001”=>segout<=“0110000”;when “0010”=>segout<=“1101101”;when “0011” =>segout<=“1111001”;when “0100” =>segout<=“0110011”;when “0101”=>segout<=“1011011”;when “0110”=>segout<=“0011111”;when “0111”=>segout<=“1110000”;when “1000” =>segout<=“1111111”;when “1001” =>segout<=“1110011”;when “1010”=>segout<=“0000000”;when others =>null;END CASE;END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;
ENTITY dtsm IS PORT(clk:in STD_LOGIC;NumA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));END dtsm;architecture bhv of dtsm is component bcd_data is port(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout:out STD_LOGIC_VECTOR(6 downto 0));end component;signal x:STD_LOGIC_VECTOR(3 downto 0);signal q:STD_LOGIC_VECTOR(1 downto 0);begin p1:process(clk)begin if clk'event and clk ='1' then Q<= Q + '1';end if;end process;
p2:process(Q)begin case Q is when“00”=>led_sel<=“1110”;x<=NumD;when“01”=>led_sel<=“1101”;x<=NumC;when“10”=>led_sel<=“1011”;x<=NumB;when“11”=>led_sel<=“0111”;x<=NumA;when others=>null;end case;end process;u1:bcd_data PORT map(bcd_data=>x,segout=>segout1);end;
6.頂層文件設(shè)置
library ieee;use ieee.std_logic_1164.all;entity jiaotongdeng is port(clk1:in std_logic;reset1:in std_logic;
hold1:in std_logic;segout2:out std_logic_vector(6 downto 0);led_sel1:out std_logic_vector(3 downto 0);reda1,yellowa1,greena1:out std_logic;redb1,yellowb1,greenb1:out std_logic);end jiaotongdeng;
architecture aa11 of jiaotongdeng is component FreDevider PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;
component FreDevider1 PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;component countroller PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END component;component counter PORT(clock:IN STD_LOGIC;reset:in std_logic;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);END component;component Fenwei PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END component;component dtsm PORT(clk:in STD_LOGIC;NumA,NumB: in Integer RANGE 0 to 9;segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));
END component;signal a,b:std_logic;signal c:INTEGER RANGE 0 TO 89;signal d:INTEGER RANGE 0 TO 90;signal e,f:Integer RANGE 0 to 9;begin u1: FreDevider port map(clkin=>clk1,clkout=>a);u2: FreDevider1 port map(clkin=>a,clkout=>b);u3:counter
port map(clock=>b,reset=>reset1,hold=>hold1,countnum=>c);u4:countroller port map(clock=>b,hold=>hold1,countnum=>c,numa=>d,reda=>reda1,greena=>greena1,yellowa=>yellowa1,redb=>redb1,greenb=>greenb1,yellowb=>yellowb1);u5:fenwei port map(numin=>d,numa=>e,numb=>f);u6:dtsm
port map(clk=>clk1,numa=>e,numb=>f,segout1=>segout2,led_sel=>led_sel1);end aa11;
四.硬件焊接與組裝調(diào)試
按照如下圖所示的電路圖,在通用電路焊接板上合理布置各個元器件,進(jìn)行焊接布線。
圖3硬件焊接電路圖
安裝焊接完成后,仔細(xì)檢查電路,是否有誤。若與電路圖不符,應(yīng)及時排除錯誤。一切就緒后,將與FPGA對應(yīng)的引腳使用杜邦線連接,連接完畢后,檢查電源極性,避免反接。確認(rèn)無誤后,接通電源,觀察實驗結(jié)果。
首先我們完成的基本的功能,只是簡單的倒計時顯示,然后我們可以進(jìn)一步修改我們的VHDL語言程序,重新燒入FPGA,以完善我們的設(shè)計。
五.心得體會
通過幾天的課程設(shè)計,我對EDA技術(shù)、VHDL等系列知識都有了一定的了解。使用EDA技術(shù)開發(fā)頁面的能力也有了很大提高。
EDA設(shè)計我們感覺程序調(diào)試最重要,試驗軟件、硬件熟悉其次。直到?jīng)]有錯誤。若與理想的不同,再查看程序,有無原理上的編輯錯誤或沒有查出的輸入錯誤。都通過可以進(jìn)行管腳配對,把程序燒入芯片,在實物上看結(jié)果,從顯示中得出還需改正的地方,再去改程序。必須注意每改一次都要編譯,重新燒入。我們采用模塊化編程,模塊化接線,再編譯總原理圖,思路比較清楚。有的模塊可以供其它任務(wù)通用。
課程設(shè)計對學(xué)生而言是其對所學(xué)課程內(nèi)容掌握情況的一次自我驗證,從而有著極其重要的意義。通過課程設(shè)計能提高學(xué)生對所學(xué)知識的綜合應(yīng)用能力,能全面檢查并掌握所學(xué)內(nèi)容,在這學(xué)期的課程設(shè)計中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找資料,請教老師,以及不懈的努力,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,我們學(xué)會了很多學(xué)習(xí)的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學(xué)習(xí)、實踐,再學(xué)習(xí)、再實踐。
另外,我還學(xué)到了一個人的力量畢竟有限,但是團(tuán)隊的力量勢不可擋,我們不能局限,要學(xué)會合作。這次課程設(shè)計雖然結(jié)束了,相信以后我們會以更加積極的態(tài)度對待我們的學(xué)習(xí)、對待我們的生活。我們的激情永遠(yuǎn)不會結(jié)束,相反,我們會更加努力,努力的去彌補(bǔ)自己的缺點,發(fā)展自己的優(yōu)點,去充實自己,只有在了解了自己的長短之后,我們會更加珍惜擁有的,更加努力的去完善它。
六.參考文獻(xiàn)
(1)潘松,黃繼業(yè).《EDA
技術(shù)使用教程》.科學(xué)出版社.2006.(2)潘松,黃繼業(yè).《EDA技術(shù)與VHDL(