目錄 內(nèi)容摘要 一、概述 二、實驗?zāi)康?/font> 三、實驗原理 四、設(shè)計方案 五、設(shè)計方法論證 (1)將每個模塊生成電路元件,利用電路連接圖的方式 (2)利用元件例化的方法 六、設(shè)計過程 (1)計時、控制模塊 1)分頻器的設(shè)計 2)計數(shù)器的設(shè)計 (2)顯示模塊 1)掃描電路 2)七段譯碼 (3)報警器電路 (4)元件例化 七、波形仿真 八、設(shè)備驗證 (1)引腳分配 (2)程序下載 (3)設(shè)備驗證 九、設(shè)計心得及體會
內(nèi)容摘要在科技高度發(fā)展的今天,集成電路和計算機應(yīng)用得到了高速發(fā)展。尤其是計算機應(yīng)用的發(fā)展。它在人們?nèi)粘I钜阎饾u嶄露頭角。大多數(shù)電子產(chǎn)品多是由計算機電路組成, 如:手機、mp3等。而且將來的不久他們的身影將會更頻繁的出現(xiàn)在我們身邊。各種家用電器多會實現(xiàn)微電腦技術(shù)。電腦各部分在工作時多是一時間為基準(zhǔn)的。 本報告就是基于計算機電路的時鐘脈沖信號、狀態(tài)控制等原理,運用EDA技術(shù)及VHDL語言設(shè)計出的數(shù)字秒表。秒表在很多領(lǐng)域充當(dāng)一個重要的角色。在各種比賽中對秒表的精確度要求很高,尤其是一些科學(xué)實驗,他們對時間精確度達(dá)到了幾納秒級別。 利用VHDL語言設(shè)計基于計算機電路中時鐘脈沖原理的數(shù)字秒表。該數(shù)字秒表能對0秒~59分59.99秒范圍進(jìn)行計時,顯示最長時間是59分59秒,超過該時間能夠進(jìn)行報警。計時精度達(dá)到10ms。設(shè)計了復(fù)位開關(guān)和啟停開關(guān)。復(fù)位開關(guān)可以在任何情況下使用,使用以后計時器清零,并做好下一次計時的準(zhǔn)備。
一、概述EDA是指以計算機為工作平臺,融合了應(yīng)用電子技術(shù)、計算機技術(shù)、智能化技術(shù)的最新成果而開發(fā)出的電子通用軟件包,它根據(jù)硬件描述語言VHDL完成的設(shè)計文件,自動完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。隨著科技發(fā)展,在現(xiàn)代生活中,計數(shù)器應(yīng)用越來越廣泛。EDA技術(shù)的應(yīng)用引起電子產(chǎn)品即系統(tǒng)開發(fā)的革命性變革,在Quartus II環(huán)境下采用VHDL語言實現(xiàn),論述了基于VHDL語言在FPGA芯片的數(shù)字設(shè)計思想與實現(xiàn)過程。本設(shè)計是以VHDL語言為基礎(chǔ)的數(shù)字秒表。在數(shù)字秒表的程序中應(yīng)用了四個10進(jìn)制計數(shù)器和兩個6進(jìn)制計數(shù)器,以及報警器、選擇器和顯示譯碼器等。 電子設(shè)計自動化技術(shù)EDA的發(fā)展給電子系統(tǒng)的設(shè)計帶來了革命性變化,EDA軟件設(shè)計工具,硬件描述語言,可編程邏輯器件(PLD)使得EDA技術(shù)的應(yīng)用走向普及。VHDL語言是EDA的關(guān)鍵技術(shù)之一,它采用自頂向下的設(shè)計方法,完成系統(tǒng)的整體設(shè)計。 二、實驗?zāi)康?/font>通過本次課設(shè),加深對EDA技術(shù)設(shè)計的理解,學(xué)會用QuartusⅡ工具軟件設(shè)計基本電路,熟練掌握VHDL語言,為以后工作使用打下堅實的基礎(chǔ)。 三、實驗原理秒表工作原理和多少數(shù)字電子鐘大致一樣,不同的是秒表為0.01秒,整個秒表的時鐘信號輸入為50MHZ。所以,需要對時鐘信號進(jìn)行分頻 假設(shè)該秒表應(yīng)用場合小于1小時,秒表的顯示格式為mm-ss-xx(mm表示分鐘:0~59;ss表示秒:0~59;xx表示百分之一秒:0~99)。 利用試驗箱產(chǎn)生的CLK沖激作為時鐘信號的基準(zhǔn)信號,通過顯示和計時模塊在試驗箱的LED顯示。 四、設(shè)計方案 本系統(tǒng)設(shè)計采用自頂向下的設(shè)計方案,系統(tǒng)的整體組裝設(shè)計原理圖如圖1所示,它主要由控制模塊、分頻模塊,計時模塊、顯示模塊和報警模塊五部分組成。各模塊分別完成計時過程的控制功能、計時功能與顯示功能。
計時控制模塊主要是對計時過程進(jìn)行控制。計時控制模塊可以由兩個按鈕開關(guān)來完成秒表的啟動,停止和復(fù)位。 計時模塊實現(xiàn)的是計時功能,及時的方法是對標(biāo)準(zhǔn)時鐘脈沖計數(shù)。由于秒表的計時范圍是0秒~59分59.99秒,所以計數(shù)器可以由四個十進(jìn)制計數(shù)器和兩個六進(jìn)制計數(shù)器構(gòu)成,其中毫秒位,秒位和分位采用十進(jìn)制計數(shù)器來實現(xiàn),十秒位和十分位采用六進(jìn)制計數(shù)器。 計時顯示模塊是將計時值在LED七段數(shù)碼管顯示出來。 當(dāng)計時達(dá)60分鐘后,蜂鳴器鳴響10聲 最終底層文件生成設(shè)計實體可采用兩種方式 五、設(shè)計方法論證
(1)將每個模塊生成電路元件,利用電路連接圖的方式如圖2所示 圖2 電路原理圖 (2)利用元件例化的方法
六、設(shè)計過程
(1)計時、控制模塊1)分頻器的設(shè)計: 由于本設(shè)計中需要用到精確的100Hz計時脈沖,因此分頻器的設(shè)計顯得尤為重要?紤]到實驗箱上輸出頻率的限制及所產(chǎn)生及時脈沖的精度要求,采用由50MHz的時鐘脈沖經(jīng)過分頻器產(chǎn)生100Hz的計時脈沖。計時控制模塊的作用是將按鍵信號轉(zhuǎn)變?yōu)橛嫊r器的控制信號。計時控制模塊可用兩個按鈕來完成秒表的啟動、停止和復(fù)位,即啟動/暫停鍵和清零鍵,由它們產(chǎn)生計數(shù)允許/保持和清零信號。K為啟動/暫停鍵輸入信號,K=0時表示按下,K=1時表示松開。 分頻器的設(shè)計程序源代碼如下: ibrary ieee; use ieee.std_logic_1164.all; entity div is port(clr,clk: in std_logic; q: buffer std_logic); end div; architecture a of div is signal count:integer range 0 to 499999; --設(shè)置定時范圍 begin process(clr,clk) begin if (clk'event and clk='1') then --當(dāng)計時脈沖上升沿出發(fā) if clr='1' then --清零開關(guān)使能端 count<=0; elsif count=499999 then count<=0; q<= not q; else count<=count+1; end if; end if; end process; end a; 生成的電路元件圖如圖3所示 圖3 2)計數(shù)器的設(shè)計: 本實驗需要六進(jìn)制計數(shù)器和十進(jìn)制計數(shù)器配合使用。計時方法和計算機一樣是對標(biāo)準(zhǔn)時鐘脈沖計數(shù)。計時模塊是由四個十進(jìn)制計數(shù)器和兩個六進(jìn)制計數(shù)器構(gòu)成的。其中毫秒位、十毫秒位、秒位和分位采用十進(jìn)制計數(shù)器,十秒位和十分位采用六進(jìn)制計數(shù)器。 library ieee; --六進(jìn)制計數(shù)器 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count6 is port (clk,start,clr : in std_logic; cout : out std_logic; daout : out std_logic_vector(3 downto 0));--定義輸出數(shù)據(jù)范圍 end count6; architecture two of count6 is signal q0 : std_logic_vector(3 downto 0); signal q1 : std_logic; begin process(clk,clr) begin if clr='1' then q0<="0000"; elsif ( clk'event and clk='1') then --當(dāng)上升沿來時動作 if start='1' then if q0="0101" then q0<="0000";q1<='1';--限制計數(shù)范圍 else q0<=q0+1;q1<='0'; --進(jìn)行計數(shù) end if; end if; end if; end process; daout<= q0; cout<=q1; end two;
生成的電路元件圖如圖4所示 圖4
library ieee; --十進(jìn)制計數(shù)器 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count10 is port (clk,start,clr : in std_logic; cout : out std_logic; daout : out std_logic_vector(3 downto 0)); end count10; architecture one of count10 is signal q0 : std_logic_vector(3 downto 0); signal q1 : std_logic; begin process(clk,clr) begin if clr='1' then q0<="0000"; elsif ( clk'event and clk='1') then --判斷上升沿動作 if start='1' then if q0="1001" then q0<="0000";q1<='1'; --計數(shù)范圍限制在10 else q0<=q0+1;q1<='0'; --計數(shù) end if; end if; end if; end process; daout<= q0; cout<=q1; end one;
生成的電路元件圖如圖5所示 圖5 (2)顯示模塊計時顯示電路的作用是將計時值在LED數(shù)碼管上顯示出來。計時電路產(chǎn)生的值經(jīng)過BCD七段譯碼后,驅(qū)動LED數(shù)碼管。計時顯示電路的實現(xiàn)方案采用掃描顯示。其中包括選擇器和七段譯碼器。選擇器中包含了對數(shù)碼管的片選信號、位選信號及小數(shù)點的設(shè)置。 1)掃描電路數(shù)碼管動態(tài)掃描就是以一定的頻率依次點亮多個數(shù)碼管的段位,只要頻率足夠大,人眼無法識別出,就會形成多個數(shù)碼管同時亮的現(xiàn)象。段選信號負(fù)責(zé)選擇哪個數(shù)碼管亮,位選信號負(fù)責(zé)控制該數(shù)碼管上亮的位置。
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity seltime is port(clr,clk: in bit; dain0,dain1,dain2,dain3,dain4,dain5,dain6: in std_logic_vector(3 downto 0); --定義數(shù)據(jù) sel: out std_logic_vector(3 downto 0);--段選信號 daout: out std_logic_vector(3 downto 0));--位選信號 end seltime; architecture a of seltime is signal temp:integer range 0 to 6; begin process(clk) --根據(jù)時鐘脈沖進(jìn)行動作 begin if (clr='1') then --清零使能端 daout<="0000"; sel<="0000"; temp<=0; --當(dāng)清零信號產(chǎn)生后將LED歸零 elsif (clk='1'and clk'event) then --當(dāng)時鐘上升沿時執(zhí)行 if temp=6 then temp<=0; else temp<=temp + 1; end if; case temp is --控制LED when 0=>sel<="0000";daout<=dain0; when 1=>sel<="0001";daout<=dain1; when 2=>sel<="0010";daout<=dain2; when 3=>sel<="0011";daout<=dain3; when 4=>sel<="0100";daout<=dain4; when 5=>sel<="0101";daout<=dain5; when 6=>sel<="0110";daout<=dain6; end case; end if; end process; end a; 生成的電路元件圖如圖6所示 圖6 2)七段譯碼數(shù)碼管是共陰極觸發(fā)亮度,七段數(shù)碼管由八位數(shù)據(jù)控制,數(shù)碼管首先從上到右,到下到左,到中間,最后到小數(shù)點分別標(biāo)記為a、b、c、d、e、f、g、dp八段其中小數(shù)點位DP為最高位,a段為最低位,要想顯示什么字符只需要使對應(yīng)的段發(fā)光即可。 library ieee; use ieee.std_logic_1164.all; entity deled is port(num:in std_logic_vector(3 downto 0); led:out std_logic_vector(6 downto 0)); end deled ; architecture a of deled is begin process(num) begin case num is when"0000"=>led<="0111111";--顯示0 when"0001"=>led<="0000110";--顯示1 when"0010"=>led<="1011011";--顯示2 when"0011"=>led<="1001111";--顯示3 when"0100"=>led<="1100110";--顯示4 when"0101"=>led<="1101101";--顯示5 when"0110"=>led<="1111101";--顯示6 when"0111"=>led<="0100111";--顯示7 when"1000"=>led<="1111111";--顯示8 when"1001"=>led<="1101111";--顯示9 when others=>led<="0000000";--其他情況下為0 end case; end process; end a; 生成的電路元件圖如圖7所示 圖7
(3)報警器電路報警模塊的設(shè)計是利用蜂鳴器的發(fā)聲原理。當(dāng)計數(shù)器計滿59分鐘后會產(chǎn)生進(jìn)位信號,在蜂鳴器的一端輸入高電平時蜂鳴器發(fā)生,產(chǎn)生報警聲。 源代碼: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity alarm is port(clk,I:in std_logic; q:out std_logic --報警輸出 ); end alarm; architecture ar of alarm is signal n:integer range 0 to 9; signal q0:std_logic; begin process(clk) begin if clk'event and clk='1' then if i='0' then q0<='0'; n<=0; elsif n<=9 and i='1' then --計數(shù)滿60分后報警輸出,重新計數(shù) q0<=not q0; n<=n+1; else q0<='0'; end if; end if; end process; q<=q0; end ar; 生成的電路元件圖如圖8所示 圖8 (4)元件例化元件例化是用含有完整程序結(jié)構(gòu)的VHDL表述來構(gòu)成自頂而下層次化設(shè)計的一種重要手段。將已經(jīng)設(shè)計完成的底層文件調(diào)用構(gòu)建成一個完整的電路文件。將要引用的文件放入例化文件目錄下。 library ieee; use ieee.std_logic_1164.all; entity mb_top is port ( stop,start,clk:in std_logic; a,b,c,d,e,f,g,speaker:out std_logic; sel:out std_logic_vector(3 downto 0); vga:out std_logic_vector(3 downto 0));--選擇電路上的數(shù)碼管 end mb_top; architecture a of mb_top is component div --分頻器 port(clr,clk: in std_logic; q: buffer std_logic); end component; component count10 --10進(jìn)制計數(shù)器 port( clr,start,clk:in std_logic; cout:out std_logic; daout:buffer std_logic_vector(3 downto 0)); end component; component count6 --6進(jìn)制計數(shù)器 port( clr,start,clk:in std_logic; cout:out std_logic; daout:buffer std_logic_vector(3 downto 0)); end component; component seltime --數(shù)據(jù)選擇器 port( clr,clk:in std_logic; dain0:in std_logic_vector(3 downto 0); dain1:in std_logic_vector(3 downto 0); dain2:in std_logic_vector(3 downto 0); dain3:in std_logic_vector(3 downto 0); dain4:in std_logic_vector(3 downto 0); dain5:in std_logic_vector(3 downto 0); sel:out std_logic_vector(3 downto 0); daout:out std_logic_vector(3 downto 0)); end component; component deled port( num:in std_logic_vector(3 downto 0); led:out std_logic_vector(6 downto 0)); end component; component alarm --報警電路 port( clk,i,clr:in std_logic; q:out std_logic); end component; signal div_q,b_cout,s_cout,m_cout,sm_cout,f_cout,sf_cout:std_logic; signal b_daout,s_daout,m_daout,sm_daout,f_daout,sf_daout,seltime_daout:std_logic_vector(3 downto 0); signal ledout:std_logic_vector(6 downto 0); begin vga<="1011"; --寫入vga調(diào)用電路板上的數(shù)碼管 a<=ledout(0);b<=ledout(1);c<=ledout(2);d<=ledout(3); e<=ledout(4);f<=ledout(5);g<=ledout(6); u1:div port map(stop,clk,div_q); --元件位置 u2:count10 port map(stop,start,div_q,b_cout,b_daout); u3:count10 port map(stop,start,b_cout,s_cout,s_daout); u4:count10 port map(stop,start,s_cout,m_cout,m_daout); u5:count6 port map(stop,start,m_cout,sm_cout,sm_daout); u6:count10 port map(stop,start,sm_cout,f_cout,f_daout); u7:count6 port map(stop,start,f_cout,sf_cout,sf_daout); u8:seltime port map(stop,div_q,b_daout,s_daout,m_daout,sm_daout,f_daout,sf_daout,sel,seltime_daout); u9:deled port map(seltime_daout,ledout); u10:alarm port map(div_q,sf_cout,speaker); end a; 七、波形仿真
八、設(shè)備驗證(1)引腳分配圖9引腳分配圖 (2)程序下載圖10下載圖
(3)設(shè)備驗證圖11 實驗結(jié)果圖 九、設(shè)計心得及體會通過此次課程設(shè)計,讓我對EDA這門技術(shù)有了更深的體會,并更好的學(xué)會了使用QuartusⅡ軟件進(jìn)行硬件設(shè)計。 在編寫程序的過程中,遇到了很多問題,使我發(fā)現(xiàn)自己以前學(xué)習(xí)上存在的不足。通過與同學(xué)探討和請教老師,終于把問題都解決了,并加深了對數(shù)字時鐘原理和設(shè)計思路的了解。同時我也掌握了做課程設(shè)計的一般流程,為以后的電子設(shè)計這塊積累了一定的經(jīng)驗,為以后從事相關(guān)工作有一些幫助。最終解決了問題,攥寫成報告。 通過對設(shè)計對實現(xiàn)和對報告對撰寫,深深體會到了VHDL語言和EDA技術(shù)的一些技巧和設(shè)計思想,在完成設(shè)計的過程中,應(yīng)該具有很清晰地思路,才可以使電路更完美和簡便,要敢想敢做但是不應(yīng)該有投機取巧的心理。在完成每一步的時候都有意想不到的收獲也有可能導(dǎo)致錯誤,所以在設(shè)計對過程中要集中精神。在寫報告的過程中,更加凸顯了細(xì)心二字。不可自認(rèn)為完美,必須按照格式要求來撰寫自己的報告,所以必須做到足夠的精確。 利用EDA工具,電子設(shè)計師可以從概念、算法、協(xié)議等開始設(shè)計電子系統(tǒng),大量工作可以通過計算機完成,并可以將電子產(chǎn)品從電路設(shè)計、性能分析到設(shè)計版圖的整個過程的計算機上自動處理完成。在進(jìn)行設(shè)計時并不束縛設(shè)計者的想象力,這使得自學(xué)、擴展也可以很容易實現(xiàn)。在設(shè)計中充分的認(rèn)識到EDA課程對硬件設(shè)計的重要性,若把本門課程學(xué)好、學(xué)精,對硬件設(shè)計將有很大對幫助。以后若有機會我將會利用更多時間來學(xué)習(xí)EDA技術(shù)、更加深入的學(xué)習(xí)EDA技術(shù)。EDA技術(shù)以其獨有的優(yōu)點和應(yīng)用范圍有著非常好的發(fā)展前景,是近幾年電子工業(yè)的發(fā)展趨向,中國的EDA行業(yè)發(fā)展十分迅速,有著很大的潛力。所以我們學(xué)好這門課程是十分必要的,我們不應(yīng)該僅僅拘泥于一門課程的學(xué)習(xí),要結(jié)合各學(xué)科的連接點,把我們的知識串聯(lián)起來。為我們的未來做好知識儲備。 以上就我關(guān)于這次課程設(shè)計的想法,在以后,我會用更多的時間去了解EDA。并且提高自己的知識水平。
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存):
秒表實驗報告.docx
(1.94 MB, 下載次數(shù): 28)
2019-1-8 16:25 上傳
點擊文件名下載附件
|