基于FPGA的计数器的程序设计摘要本文介绍了一种基于FPGA的,由顶层到底层设计的数字计数器。
本文主要包括该计数器的设计基础和实现方法以及译码与显示等内容,描述了它的设计平台、工作原理和软硬件实现。
本设计主要有分频器、四位计数器、16位锁存器以及数码管显示电路四个模块组成。
计数器各模块设计采用VHDL硬件描述语言编程,极大地减少了硬件资源的占用,仿真与分析结果表明,该数字计数器性能优异,软件设计语言灵活,硬件简单,速度快。
关键词FPGA计数器VHDL分频器目录基于FPGA的计数器的程序设计 (1)摘要 (1)1 绪论 (3)1.1 FPGA简介 (3)1.2硬件描述语言VHDL简介 (3)1.3开发工具Quartus II简介 (4)2整体设计方案 (4)3各功能模块设计及仿真 (5)3.1分频器的设计 (5)3.1.1分频器设计原理 (5)3.1.2源程序及波形仿真 (6)3.1.3分频器RTL 电路图 (7)3.2计数器的设计 (7)3.2.1分频器设计原理 (7)3.2.2源程序及波形仿真 (8)3.2.3 RTL 电路图 (11)3.3锁存器的设计 (11)3.3.1锁存器设计原理 (11)3.3.2锁存器源程序及波形仿真 (12)3.3.3锁存器RTL电路图 (13)3.4显示部分的设计 (13)3.4.1七段数码管显示原理 (13)3.4.2七段数码管显示源程序及波形仿真 (15)3.4.3七段数码管显示RTL 电路图 (16)4系统顶层设计 (17)4.1.1自顶向下的设计方法 (17)4.1.2 顶层设计源程序及其仿真波形 (17)4.1.3系统顶层RTL 电路图 (20)5总结 (21)参考文献 (22)1 绪论1.1 FPGA简介FPGA 是现场可编程门阵列(Field Programmable Gate Array)的简称。
FPGA 器件及其开发系统是开发大规模数字集成电路的新技术。
它利用计算机辅助设计,绘制出实现用户逻辑的原理图、编辑布尔方程或用硬件描述语言等方式作为设计输入;然后经一系列转换程序、自动布局布线、模拟仿真的过程;最后生成配置FPGA器件的数据文件,对FPGA器件初始化。
这样就实现了满足用户要求的专用集成电路,真正达到了用户自行设计、自行研制和自行生产集成电路的目的。
FPGA是一种半定制的集成电路,其特点是直接面向用户,具有极大的灵活性和通用性,开发效率高,硬件测试和实现快捷,工作可靠性好而且技术维护简单。
1.2硬件描述语言VHDL简介随着电子技术的发展,集成电路的规模越来越大,复杂程度也越来越高。
对于如此大规模的和复杂程度的电路设计问题,传统的门级描述方法显得过于琐碎和难以管理。
而VHDL语言具有强大的功能,覆盖面广,描述能力强,可用于从门级、电路级直至系统级的描述、仿真和综合。
下面简要介绍了VHDL语言。
VHDL的英文全名是Very-High-Speed Intergrated Circuit Hardware Description Language诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本(简称93版)。
现在,VHDL和Verilog 作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持。
在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为:在新的世纪中,VHDL 与Verilog语言将承担起大部分的数字系统设计任务。
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计——或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
1.3开发工具Quartus II简介Quartus II是Altera公司推出的CPLD/FPGA集成化开发软件,可以完成设计输入、逻辑综合、布局与布线、仿真、时序分析、硬件配置完整的PLD设计流程。
QuartusⅡ提供了多种设计输入方式、快速的编译和直接易懂的器件编程。
具有友好的用户界面,快速的综合速度和更优化的综合和适配功能。
Quartus I I 自带宏功能模块库,大大减轻了用户的工作量,加快设计速度。
Quartus II内置仿真器可以在工程中仿真任何设计。
可进行功能仿真、时序仿真来检验设计的逻辑功能和计算设计的内部定时是否符合设计。
仿真器可以仿真整个设计,或仿真设计的任何部分。
支持可编程系统(SOPC)和大规模FPGA设计开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
该软件支持Altera公司的Stratix Ⅱ、Stratix GX、Stratix、MAX3000A、MAX 7000B、MAX 7000AE、MAX Ⅱ、FLEX6000、FLEX10K系列、Cyclone、Cyclone Ⅱ、APEX Ⅱ、APEX20K和ACEX1K系列。
2整体设计方案设计基于FPGA的计数器,要求显示1个0-9999的四位计数器,可以由4个模块为10的十进制计数器级联而成,所以可以显示的频率范围是1-9999HZ。
因此频率计的功能分割成四个模块:分频计、计数器、输出锁存器和译码显示电路。
各个模块均用VHDL语言描述并用QuartusⅡ进行仿真。
本设计采用数控分频计可以对信号实现不同分频比输出信号作为计数器输入。
锁存器由一个外部脉冲控制可以控制显示部分显示周期。
当系统正常工作时,输入信号标提供频率,经过分频器分频,产生计数信号送入计数器模块,计数模块对输入的脉冲个数进行计数数结束后将计数结果送入锁存器中,保证系统可以稳定显示数据,计数结果能够显示在七段数码显示管上。
图2-1整体设计方案3各功能模块设计及仿真3.1分频器的设计3.1.1分频器设计原理在数字逻辑电路设计中,分频器是一种基本电路,通过分频可以得到需要的时钟频率。
常见的分频器有二进制分频器、偶数次分频器、奇数次分频器、占空比可调的分频器和小数分频器。
分频的方法很多最常见的就是利用加法器对时钟信号进行分频,当然也可以利用一些专用的电路结构来实现。
数控分频器的功能是在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,对于一个N分频器,分频出的时钟周期是原时钟周期的N倍,频率变为原来的1/N。
对于一个8位计数器,如果输入数D,然后启动计数器工作,则经过D倍的时钟周期计数器溢出时,输出full变为高电平,再以full为敏感信号,对fout进行取反操作,如此N=2D。
计数一次后,再重新计数,反复进行直至输入被赋予新值。
对于数控分频数器,装载不同的计数初始值时,会有不同频率的溢出信号,从而得到不同的输出。
数控分频器是利用计数值可并行预置的加法计数器设计完成的3.1.2源程序及波形仿真LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT ( CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF DVF ISSIGNAL FULL : STD_LOGIC;BEGINP_REG: PROCESS(CLK,D)V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK = '1' THENIF CNT8 = "11111111" THENCNT8 := D; --当CNT计数计满时输入数据D被同步预置给计数器CNT8FULL <= '1'; --同时使溢出标志信号FULL输出为高电平ELSE CNT8 := CNT8 + 1; --否则继续作加1计数FULL <= '0'; --且输出溢出标志信号FULL为低电平END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL)V ARIABLE CNT2 : STD_LOGIC;BEGINIF FULL'EVENT AND FULL = '1'THEN CNT2 := NOT CNT2;IF CNT2 = '1' THEN FOUT <= '1';ELSE FOUT <= '0';END IF;END IF;END PROCESS P_DIV ;END;图3-1 分频器时序仿真3.1.3分频器RTL 电路图图3-2 分频器RTL电路图3.2计数器的设计3.2.1分频器设计原理计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。
计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。
计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。
它主要的指标在于计数器的位数,常见的有3位和4位的。
很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999。
在数字电子技术中应用的最多的时序逻辑电路。
计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。