找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5211|回復(fù): 1
收起左側(cè)

VHDL語言設(shè)計基于計算機電路中時鐘脈沖原理的數(shù)字秒表

[復(fù)制鏈接]
ID:464703 發(fā)表于 2019-1-8 16:25 | 顯示全部樓層 |閱讀模式

目錄

內(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;
七、波形仿真
  • 十進(jìn)制計數(shù)器

  • 六進(jìn)制計數(shù)器


  • 蜂鳴器


  • 譯碼器


  • 控制選擇器

八、設(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)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:464703 發(fā)表于 2019-1-10 02:18 | 顯示全部樓層
本實驗報告應(yīng)用為EL-socp3000電路板
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表