久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5175|回復: 1
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:464703 發表于 2019-1-8 16:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

目錄

內容摘要

一、概述

二、實驗目的

三、實驗原理

四、設計方案

五、設計方法論證

(1)將每個模塊生成電路元件,利用電路連接圖的方式

(2)利用元件例化的方法

六、設計過程

(1)計時、控制模塊

1)分頻器的設計

2)計數器的設計

(2)顯示模塊

1)掃描電路

2)七段譯碼

(3)報警器電路

(4)元件例化

七、波形仿真

八、設備驗證

(1)引腳分配

(2)程序下載

(3)設備驗證

九、設計心得及體會


內容摘要
在科技高度發展的今天,集成電路和計算機應用得到了高速發展。尤其是計算機應用的發展。它在人們日常生活已逐漸嶄露頭角。大多數電子產品多是由計算機電路組成,
如:手機、mp3等。而且將來的不久他們的身影將會更頻繁的出現在我們身邊。各種家用電器多會實現微電腦技術。電腦各部分在工作時多是一時間為基準的。 本報告就是基于計算機電路的時鐘脈沖信號、狀態控制等原理,運用EDA技術及VHDL語言設計出的數字秒表。秒表在很多領域充當一個重要的角色。在各種比賽中對秒表的精確度要求很高,尤其是一些科學實驗,他們對時間精確度達到了幾納秒級別。
利用VHDL語言設計基于計算機電路中時鐘脈沖原理的數字秒表。該數字秒表能對0秒~59分59.99秒范圍進行計時,顯示最長時間是59分59秒,超過該時間能夠進行報警。計時精度達到10ms。設計了復位開關和啟停開關。復位開關可以在任何情況下使用,使用以后計時器清零,并做好下一次計時的準備。

一、概述
EDA是指以計算機為工作平臺,融合了應用電子技術、計算機技術、智能化技術的最新成果而開發出的電子通用軟件包,它根據硬件描述語言VHDL完成的設計文件,自動完成邏輯編譯、化簡、分割、綜合、優化、布局布線及仿真,直至完成對于特定目標芯片的適配編譯、邏輯映射和編程下載等工作。隨著科技發展,在現代生活中,計數器應用越來越廣泛。EDA技術的應用引起電子產品即系統開發的革命性變革,在Quartus II環境下采用VHDL語言實現,論述了基于VHDL語言在FPGA芯片的數字設計思想與實現過程。本設計是以VHDL語言為基礎的數字秒表。在數字秒表的程序中應用了四個10進制計數器和兩個6進制計數器,以及報警器、選擇器和顯示譯碼器等。
電子設計自動化技術EDA的發展給電子系統的設計帶來了革命性變化,EDA軟件設計工具,硬件描述語言,可編程邏輯器件(PLD)使得EDA技術的應用走向普及。VHDL語言是EDA的關鍵技術之一,它采用自頂向下的設計方法,完成系統的整體設計。
二、實驗目的
通過本次課設,加深對EDA技術設計的理解,學會用QuartusⅡ工具軟件設計基本電路,熟練掌握VHDL語言,為以后工作使用打下堅實的基礎。
三、實驗原理
秒表工作原理和多少數字電子鐘大致一樣,不同的是秒表為0.01秒,整個秒表的時鐘信號輸入為50MHZ。所以,需要對時鐘信號進行分頻 假設該秒表應用場合小于1小時,秒表的顯示格式為mm-ss-xx(mm表示分鐘:0~59;ss表示秒:0~59;xx表示百分之一秒:0~99)。
利用試驗箱產生的CLK沖激作為時鐘信號的基準信號,通過顯示和計時模塊在試驗箱的LED顯示。
四、設計方案
    本系統設計采用自頂向下的設計方案,系統的整體組裝設計原理圖如圖1所示,它主要由控制模塊、分頻模塊,計時模塊、顯示模塊和報警模塊五部分組成。各模塊分別完成計時過程的控制功能、計時功能與顯示功能。


  • 控制模塊
計時控制模塊主要是對計時過程進行控制。計時控制模塊可以由兩個按鈕開關來完成秒表的啟動,停止和復位。
  • 計時模塊
計時模塊實現的是計時功能,及時的方法是對標準時鐘脈沖計數。由于秒表的計時范圍是0秒~59分59.99秒,所以計數器可以由四個十進制計數器和兩個六進制計數器構成,其中毫秒位,秒位和分位采用十進制計數器來實現,十秒位和十分位采用六進制計數器。
  • 顯示模塊
計時顯示模塊是將計時值在LED七段數碼管顯示出來。
  • 報警電路
當計時達60分鐘后,蜂鳴器鳴響10聲
   最終底層文件生成設計實體可采用兩種方式
五、設計方法論證
(1)將每個模塊生成電路元件,利用電路連接圖的方式
如圖2所示
圖2 電路原理圖
(2)利用元件例化的方法

六、設計過程

(1)計時、控制模塊
1)分頻器的設計:
     由于本設計中需要用到精確的100Hz計時脈沖,因此分頻器的設計顯得尤為重要。考慮到實驗箱上輸出頻率的限制及所產生及時脈沖的精度要求,采用由50MHz的時鐘脈沖經過分頻器產生100Hz的計時脈沖。計時控制模塊的作用是將按鍵信號轉變為計時器的控制信號。計時控制模塊可用兩個按鈕來完成秒表的啟動、停止和復位,即啟動/暫停鍵和清零鍵,由它們產生計數允許/保持和清零信號。K為啟動/暫停鍵輸入信號,K=0時表示按下,K=1時表示松開。
分頻器的設計程序源代碼如下:
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;    --設置定時范圍
begin
process(clr,clk)
begin
if (clk'event and clk='1') then --當計時脈沖上升沿出發
if clr='1' then              --清零開關使能端
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)計數器的設計:
本實驗需要六進制計數器和十進制計數器配合使用。計時方法和計算機一樣是對標準時鐘脈沖計數。計時模塊是由四個十進制計數器和兩個六進制計數器構成的。其中毫秒位、十毫秒位、秒位和分位采用十進制計數器,十秒位和十分位采用六進制計數器。
library ieee;                  --六進制計數器
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));--定義輸出數據范圍
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              --當上升沿來時動作
                            if start='1' then
         if q0="0101" then q0<="0000";q1<='1';--限制計數范圍
         else q0<=q0+1;q1<='0';             --進行計數
        end if;
              end if;
end if;
end process;
daout<= q0;
cout<=q1;
end two;

生成的電路元件圖如圖4所示
圖4

library ieee;                            --十進制計數器
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'; --計數范圍限制在10
         else q0<=q0+1;q1<='0';             --計數
        end if;
              end if;
end if;
end process;
daout<= q0;
cout<=q1;
end one;

生成的電路元件圖如圖5所示
圖5
(2)顯示模塊
計時顯示電路的作用是將計時值在LED數碼管上顯示出來。計時電路產生的值經過BCD七段譯碼后,驅動LED數碼管。計時顯示電路的實現方案采用掃描顯示。其中包括選擇器和七段譯碼器。選擇器中包含了對數碼管的片選信號、位選信號及小數點的設置。
1掃描電路
數碼管動態掃描就是以一定的頻率依次點亮多個數碼管的段位,只要頻率足夠大,人眼無法識別出,就會形成多個數碼管同時亮的現象。段選信號負責選擇哪個數碼管亮,位選信號負責控制該數碼管上亮的位置。

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);       --定義數據
      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)                                                                      --根據時鐘脈沖進行動作
     begin
       if (clr='1') then                                                         --清零使能端
             daout<="0000";
             sel<="0000";
             temp<=0;    --當清零信號產生后將LED歸零
       elsif (clk='1'and clk'event) then  --當時鐘上升沿時執行
            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七段譯碼
數碼管是共陰極觸發亮度,七段數碼管由八位數據控制,數碼管首先從上到右,到下到左,到中間,最后到小數點分別標記為a、b、c、d、e、f、g、dp八段其中小數點位DP為最高位,a段為最低位,要想顯示什么字符只需要使對應的段發光即可。
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)報警器電路
報警模塊的設計是利用蜂鳴器的發聲原理。當計數器計滿59分鐘后會產生進位信號,在蜂鳴器的一端輸入高電平時蜂鳴器發生,產生報警聲。
源代碼:
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  --計數滿60分后報警輸出,重新計數
q0<=not q0;
n<=n+1;
else q0<='0';
end if;
end if;
end process;
q<=q0;
end ar;
生成的電路元件圖如圖8所示
圖8
4)元件例化
元件例化是用含有完整程序結構的VHDL表述來構成自頂而下層次化設計的一種重要手段。將已經設計完成的底層文件調用構建成一個完整的電路文件。將要引用的文件放入例化文件目錄下。
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));--選擇電路上的數碼管
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進制計數器
port(
     clr,start,clk:in std_logic;
     cout:out std_logic;
     daout:buffer std_logic_vector(3 downto 0));
end component;
component count6                             --6進制計數器
port(
     clr,start,clk:in std_logic;
     cout:out std_logic;
     daout:buffer std_logic_vector(3 downto 0));
end component;
component seltime                            --數據選擇器
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調用電路板上的數碼管
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;
七、波形仿真
  • 十進制計數器

  • 六進制計數器


  • 蜂鳴器


  • 譯碼器


  • 控制選擇器

八、設備驗證1)引腳分配
圖9引腳分配圖
2)程序下載
圖10下載圖

3)設備驗證
圖11 實驗結果圖
九、設計心得及體會
通過此次課程設計,讓我對EDA這門技術有了更深的體會,并更好的學會了使用QuartusⅡ軟件進行硬件設計。
在編寫程序的過程中,遇到了很多問題,使我發現自己以前學習上存在的不足。通過與同學探討和請教老師,終于把問題都解決了,并加深了對數字時鐘原理和設計思路的了解。同時我也掌握了做課程設計的一般流程,為以后的電子設計這塊積累了一定的經驗,為以后從事相關工作有一些幫助。最終解決了問題,攥寫成報告。
通過對設計對實現和對報告對撰寫,深深體會到了VHDL語言和EDA技術的一些技巧和設計思想,在完成設計的過程中,應該具有很清晰地思路,才可以使電路更完美和簡便,要敢想敢做但是不應該有投機取巧的心理。在完成每一步的時候都有意想不到的收獲也有可能導致錯誤,所以在設計對過程中要集中精神。在寫報告的過程中,更加凸顯了細心二字。不可自認為完美,必須按照格式要求來撰寫自己的報告,所以必須做到足夠的精確。
利用EDA工具,電子設計師可以從概念、算法、協議等開始設計電子系統,大量工作可以通過計算機完成,并可以將電子產品從電路設計、性能分析到設計版圖的整個過程的計算機上自動處理完成。在進行設計時并不束縛設計者的想象力,這使得自學、擴展也可以很容易實現。在設計中充分的認識到EDA課程對硬件設計的重要性,若把本門課程學好、學精,對硬件設計將有很大對幫助。以后若有機會我將會利用更多時間來學習EDA技術、更加深入的學習EDA技術。EDA技術以其獨有的優點和應用范圍有著非常好的發展前景,是近幾年電子工業的發展趨向,中國的EDA行業發展十分迅速,有著很大的潛力。所以我們學好這門課程是十分必要的,我們不應該僅僅拘泥于一門課程的學習,要結合各學科的連接點,把我們的知識串聯起來。為我們的未來做好知識儲備。
以上就我關于這次課程設計的想法,在以后,我會用更多的時間去了解EDA。并且提高自己的知識水平。

以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
秒表實驗報告.docx (1.94 MB, 下載次數: 28)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:464703 發表于 2019-1-10 02:18 | 只看該作者
本實驗報告應用為EL-socp3000電路板
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频精品视频 | 日本视频免费观看 | 啪啪毛片| av一级毛片| 国产精品亚洲精品 | 日韩视频免费看 | 国产日韩欧美一区二区 | 国产激情网站 | 91久久久www播放日本观看 | 日韩在线一区二区 | 久久av资源网| 午夜天堂精品久久久久 | 免费激情 | 蜜桃免费一区二区三区 | 91午夜在线 | 在线观看黄色电影 | 91伊人网| 日本久久一区二区三区 | 亚洲综合天堂 | 电影91久久久 | 久久综合九色综合欧美狠狠 | 色综合色综合色综合 | 6080yy精品一区二区三区 | 国产精品永久免费视频 | 国际精品鲁一鲁一区二区小说 | av一级毛片 | 999精品视频 | 欧美精品成人影院 | 一区二区三区视频免费看 | 亚洲视频一 | 9999久久| 久久精彩视频 | 国产午夜在线观看 | 国产精品免费观看 | 一级特黄色毛片 | 精品国产乱码久久久久久老虎 | 色综合久久天天综合网 | 国产精品精品视频一区二区三区 | 欧美黄色小视频 | 欧美日韩亚洲一区 | 热re99久久精品国99热观看 |