基于FPGA的倒计时系统的设计_第1页
基于FPGA的倒计时系统的设计_第2页
基于FPGA的倒计时系统的设计_第3页
基于FPGA的倒计时系统的设计_第4页
基于FPGA的倒计时系统的设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于fpga的倒计时系统的设计 1、引言: vhdl(very high speed integrated circuit hardware description language,超高速集成电路硬件描述语言)诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为ieee(the institute of electrical and electronics engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,vhdl具有多层次描述系统硬件功能的能力,支持自顶向下(top to down)和基于库(librarybased)的设计的特点,因此设计

2、者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用vhdl对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的fpga器件中去,从而实现可编程的专用集成电路(asic)的设计。 倒计时系统是一个常用的电路系统,如香港回归倒计时,评估倒计时,篮球比赛中24秒进攻倒计时等等。倒计时系统的实现也有许多的方法,如用单片机控制,用fpga编程等。.用vhdl语言设计可以使整个系统大大简化,提高整体的性能和可靠性。具有体积小、可靠性高、功耗低的特点。本文就是用vhdl语言设计一个用于篮球

3、比赛的24秒倒计时器。 2、关键词: vhdl,波形仿真,倒计时系统. 3、倒计时系统的工作原理: 在nba比赛中有一个24秒进攻规则,即从获取球权到投篮击中篮板、篮框、命中或投篮被侵犯,其有效时间合计不能超过24秒,否则被判违例,将失去球权.在此过程中,设置24秒、暂停倒计时或者中途终止24秒(即球权归对方)均由裁判控制。本文就是用vhdl语言设计一个用于篮球比赛的24秒倒计时器,并且设置了24秒预设键k1、倒计时启动键k2和倒计时暂停键k3,并将计时精度设置为0.1秒。各按键具体功能如下:k1键按下,led灯显示24秒;k2键按下,倒计时;k3键按下,计时停止.并用数码管分别显示。 4、设

4、计实现4.1系统方框图的划分和结构设计: 该系统可划分为以下几个模块: 脉冲发生器(10hz)模块 、计数和状态控制模块、数码管显示模块。下面简要介绍一下各个模块的功能: (1)脉冲发生器(count_t):用于产生一个10hz(0.1秒)的脉冲,来供计数模块计数使用.因为该倒计时系统的计时要精确到0.1秒,所以要有一个0.1秒脉冲发生器. (2)计数与状态控制模块(sec_1):本模块有三个按键k1、k2和k3。当k1按下时,进入状态s2,计数器被置值为24秒;当k2按下时,进入状态s1,计数器开始倒计时;当k3按下时,进入状态s0,则停止计数。 (3)数码管显示模块(led_2):该模块用

5、于把计数的值动态显示在数码管上。 系统的顶层电路如下所示: 4.2各模块的vhdl程序如下: (1) 脉冲发生器模块的程序:该程序输出clk_s为一个10hz(即0.1秒)的脉冲。 scan_clk来选择led1、led2、led3、led4中的一个并赋给seg作为输出(见数码管显示模块(led_2)的程序)。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count_t is port(clk:in std_logic; clk_s:out std_logic; scan_

6、clk:out std_logic_vector(1 downto 0); end count_t; architecture behav of count_t is signal cnt2:std_logic_vector(8 downto 0):=000000000; signal cnt1:std_logic_vector(1 downto 0):=00; signal clk1:std_logic:=0; begin process(clk) begin if clk=1and clkevent then if cnt2=110010000then cnt2=000000000; cl

7、k1=not clk1; else cnt2=cnt2+1; cnt1=cnt1+1; end if; end if; end process; clk_s=clk1; scan_clk=cnt1; end behav;(2) 计数和状态控制模块的程序: clk_s 是输入0.1秒的时钟。k1、k2和k3是三个按钮,由裁判员控制,当k1按下时,进入状态s2,计数器被置值为24秒;当k2按下时,进入状态s1,计数器开始倒计时;当k3按下时,进入状态s0,则停止计数;l3、l2、l1是输出,分别等于cnt5、cnt4、cnt3,即24秒的十位、个位和小数位。程序如下: -sec_vhd libra

8、ry ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity sec_1 is port(clk_s:in std_logic; k1:in std_logic; k2:in std_logic; k3:in std_logic; l1:out std_logic_vector(3 downto 0); l2:out std_logic_vector(3 downto 0); l3:out std_logic_vector(3 downto

9、0); end sec_1; architecture behav of sec_1 is type states is(s0,s1,s2); signal st:states:=s0; signal cnt3:std_logic_vector(3 downto 0):=0000; signal cnt4:std_logic_vector(3 downto 0):=0000; signal cnt5:std_logic_vector(3 downto 0):=0000; begin process(clk_s) begin if clk_s=1and clk_sevent then if k1

10、=0and k2=0and k3=1then st=s0; end if; if k1=1and k2=0and k3=0 then st=s2; end if; if k1=0and k2=1and k3=0 then stnull; when s1=if cnt5=0000 then if cnt4=0000 then if cnt3=0000 then st=s0; else cnt4=1001; cnt5=1001; cnt3=cnt3-1; end if; else cnt5=1001; cnt4=cnt4-1; end if; else cnt5cnt5=0000; cnt3=00

11、10; cnt4null; end case; end if; l3=cnt5; l2=cnt4; l1=cnt3; end process; end behav; (3)数码管显示模块(led_2):clk是扫描时钟。用scan_clk来选择led1、led2、led3、led4中的一个并赋给seg作为输出。a是用于数码管的位码选择,a=1表示选中该数码管,被点亮;a=0则不被点亮。mie用于屏蔽其它不使用的数码管。程序如下: -led_2.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

12、 use ieee.std_logic_unsigned.all; entity led_2 is port(clk:in std_logic; scan_clk:in std_logic_vector(1 downto 0); l1:in std_logic_vector(3 downto 0); l2:in std_logic_vector(3 downto 0); l3:in std_logic_vector(3 downto 0); seg:out std_logic_vector(7 downto 0); a:out std_logic_vector(3 downto 0); mie

13、:out std_logic_vector(3 downto 0); end entity led_2; architecture behav of led_2 is signal led1,led2,led3:std_logic_vector(7 downto 0); begin mieled1led1led1led1led1led1led1led1led1led1led2led2led2led2led2led2led2led2led2led2led3led3led3led3led3led3led3led3led3led3seg=led1; aseg=led2; aseg=led3; ase

14、g=led3; aseg=11111111; a=0000; end case; end if; end process; end behav;4.3、系统的功能仿真: altera公司推出的max+plus是一个高度集成化的可编程逻辑器件开发系统,可以开发altera公司的max系列和flex系列的可编程器件。该系统的主要特点如下: (1) 支持多种设计输入方式.如:原理图、vhdl语言、ahdl语言、波形图等.同时还支持主流的第三方eda工具,如:synopsys、model technology等。 (2) 提供完善的功能仿真,同时还提供精确的时间仿真。 (3) 该系统把设计输入、功能仿

15、真、时间仿真、设计编译以及器件编程集成于统一的开发环境,从而更方便、更快捷。 (4) max+plus开发系统还具有编译快捷,设计实现优化的功能。 本程序利用max+plus进行排错编译,波形仿真,下载仿真.本文只对计数和状态控制模块进行了波形仿真,结果如下所示, 从仿真波形上看计数的结果是准确的。 5、结束语: 本文介绍了使用vhdl语言设计倒计时系统的方法,并用vhdl语言对各个模块进行了描述: 脉冲发生器(10hz)模块 、计数和状态控制模块、数码管显示模块。最后把程序下载到fpga中进行仿真.可把vhdl语言程序下载到fpga中组成实际的电路,这样可以简化硬件的开发和制造过程,而且使硬件体积大大缩小,并提高了系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论