用VHDL语言编写的频率计程序
基于VHDL语言的频率计设计

目录一、课程设计任务: (2)二、课程设计原理: (2)三、课程设计所需仪器: (2)四、课程设计使用的硬件资源及原理框图: (2)五、设计过程及操作: (3)1、FTCTRL测频控制模块: (3)2、计数器模块: (3)3、REG32B锁存器模块 (3)4、DECL7S译码器模块 (4)5、分频器模块 (4)6、MUX多路选择器模块。
(4)7、器件连接: (4)8、操作过程: (4)六、设计各个模块代码: (5)1:FTCTRL模块 (5)2:CNT_10计数器模块 (5)3:REG32B锁存器模块 (6)4:DECL7S译码器模块 (6)5:any_10 10分频器模块 (7)6:any_5 5分频器模块 (7)7:any_16 16分频模块 (8)8:MUX多路选择器模块 (9)9:顶层例化代码 (9)七、总电路: (12)八、管脚配置: (13)九、设计结果: (14)设计8位十进制频率计二、课程设计原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这清0个信号可以由一个测频控制信号发生器TESTCTL 产生,它的设计要,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD 的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
三、课程设计所需仪器:Altrea DE2-115实验箱;quartusII 12.1;modelsim仿真软件。
基于VHDL语言数字频率计的设计

关于数字频率计设计[摘要]本报告介绍了一种以大规模可编程逻辑芯片为设计载体,由顶到底分层设计,多功能数字频率计的设计方法。
该频率计采用VHDL语言程序与原理图相结合的方法,极大地减少了硬件资源占用。
该数字频率计测量范围为0到9999HZ,基准频率为1HZ,结果用4只7段数码管显示十进制结果。
中间用到了设置控制电路、计数电路、锁存电路和译码电路等模块。
仿真结果表明,该数字频率计性能优异,设计语言灵活,硬件更简单,速度更快。
[关键词]数字频率计;控制电路;计数电路;锁存电路With regard to the design of digital frequency meter[Abstract] The present report describes a large-scale programmable logic chip design carrier, in the end by a top-tiered design, multi-function digital frequency meter design methods. The frequency counter using VHDL language programs, and the method of combining schematic, greatly reducing the hardware footprint. The digital frequency meter measurement range from 0 to 9999HZ, the base frequency of 1HZ, the results with the four 7-segment LED display decimal results. Intermediate used for setting up control circuit, counting circuit, latch circuit and decoding circuit modules. The simulation results show that the digital frequency meter high-performance, design language flexibility, hardware simpler and faster.[Key words]digital frequency meter; control circuit; counting circuit; Latch Circuit目录摘要 (I)Abstract (II)第1章引言 (3)第2章VHDL的简述 (4)2.1 VHDL的发展 (4)2.2 VHDL的特点 (4)2.3 VHDL语言结构 (4)2.3.1 实体(ENTITY) (5)2.3.2结构体(ARCHITECTURE) (6)2.4 VHDL软件设计简介 (6)第3章频率计方案的设计 (8)3.1 方案一 (8)3.2 方案二 (11)3.3 方案比较 (12)3.4 方案改造 (12)第4章利用VHDL语言设计频率计 (13)4.1 系统功能的分析与电路设置 (13)4.2 测频原理 (13)4.3 测频模块工作描述及VHDL程序 (13)4.3.1 计数模块(CNT10) (13)4.3.2 锁存模块(REG16B) (14)4.3.3 控制模块(TESTCTL) (15)4.3.4 译码模块(DISPLAR) (15)4.3.5 测频主系统实现(FREQ) (16)4.3.6 原理图的制作 (18)第5章数字频率计仿真及分析 (19)5.1 MAX+PLUS II的特点 (19)5.2 MAX+PLUS II的编译、仿真简介 (19)5.3 多功能数字频率计编译及仿真 (20)5.3.1 编译结果的记载 (20)5.3.2 仿真结果的记载 (22)5.4 引脚锁定 (23)5.5 程序的下载和测试 (24)第6章实验过程中遇到的问题及分析 (25)结论 (25)致谢 (26)参考文献 (27)附录 (28)附录一方案一总程序 (28)附录二原理图 (34)附录三实验结果记录 (35)第1章引言随着计算机技术和半导体技术的发展,传统的硬件电路电路设计方法已大大落后于当今技术的发展,一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,这是电子设计自动化(EDA)领域的一次重大变革。
基于VHDL设计的频率计

基于VHDL设计的频率计专业:信息工程学号:姓名:一、实验任务及要求1、设计一个可测频率的数字式频率计,测量范围为1Hz~12MHz。
该频率计的逻辑图如图所示。
2、用层次化设计方法设计该电路,编写各个功能模块的程序。
3、仿真各功能模块,通过观察有关波形确认电路设计是否正确。
4、完成电路设计后,用实验系统下载验证设计的正确性。
二、设计说明与提示由上图可知8位十进制数字频率计,由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。
1、测频控制信号发生器设计要求。
频率测量的基本原理是计算每秒种内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同不控制。
当TSTEN高电平时允许计数、低电平时停止计数,并保持其所计的数。
在停止计数期间,首先需要一个锁存信号Load的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定显示。
设置锁存器的好处是为了显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下1秒钟的计数操作做准备。
测频控制信号发生器的工作时序如下图。
为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时使其值翻转。
其中控制信号时钟CLK的频率1Hz,那么信号TSTEN的脉宽恰好为1秒,可以用作闸门信号。
然后根据测频的时序要求,可得出信号Load和CLR_CNT 的逻辑描述。
由图可见,在计数完成后,即计数使能信号TSTEN在1秒的高电平后,利用其反相值的上跳沿产生一个锁存信号Load,0.5秒后,CLR_CNT产生一个清零信号上跳沿。
高质量的测频控制信号发生器的设计十分重要,设计中要对其进行仔细的实时仿真(TIMING SIMULATION),防止可能产生的毛剌。
基于VHDL语言的数字频率计设计

数 码 管显示 ,最 大 读 数分 别 为 9 9 Hz 9 9k 、 . 9k 、9 . Hz 9 9k , 9 Hz 小数 点 随量 程 变 换 自动 移 位 ) ,量 程 自动 转
换 规则 :
硬件 描述语 言对 高层 次的 系统行 为进 行描述 ,在 系统
一
级 进行验 证 ,最 后再 用逻 辑综合 优 化工具 生成 具体
摘 要 介 绍 了 VHD L语 言在 数 字频 率 计 设 计 中的 具 体 应 甩 ,说 明 了 实现 电子 电路 设 计 的 自动 化 ( A)过 程 和 ED
E A 技 术在 现 代 数 字 系统 设 计 中的 重要 地 位 和 作 用 。 D 关 键 词 VH E A 自下 至上 自上 至 下 综 合 编 程 下载 DL D
M od f M u tme a ds or li di Pr s nt ton e e a i wih t U S r e
[ ] 94 2 7 23 C ,1 9 , 5 ~ 7
5 Pr b k r n,B, gh v n, a ha a a Ra a a S V.Sy hr nia i n nc o z to
的 门级逻辑 电路 的 网表 ,其 对应 的物理 实 现是专 用集 成 电路 ( I 。 AS C)
( )读数 大 于 9 9时 ( 1 9 不考虑 小数 点 ,下同 ) ,频 率计 处 于超 量程 状态 ,此时显 示器 发 出溢 出指示 ( 显
示 F F ,下次 测量 ,量 程 自动增 大一档 。 F )
设 计一个 3位 十进 制 数字 频率 计 ,其 测量范 围 为
1MH , 程分 1 Hz 0 Hz z三档 ( 位 z量 0k 、1 0k 、1MH 3
基于VHDL的十进制频率计设计

基于VHDL语言的十进制数字频率计设计霍艳艳( 临沂大学物理系)摘要:文中运用VHDL语言,采用Top To Down的方法,实现6位数字频率计,并利用QuartusII软件集成开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,经实际电路测试,该系统系统性能实现。
关键词:EDA;VHDL;数字频率计;波形仿真;功能仿镇;CPLD1、引言VHDL是超高速集成电路硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language)的缩写,在美国国防部支持下于1985年成功开发的一种快速设计电路的工具,是目前标准化流程最高的硬件描述语言。
IEEE(The Institute of Electrical and Electronics Engineers)于1987年将VHDL采纳为IEEE1067标准。
VHDL经过20多年的发展、应用和完善,以其强大的系统描述能力、规范的程序设计结构、灵活的语言表达风格和多层的仿真测试手段,在电子领域受到了普遍的认同和广泛的接触。
相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(LibraryBased)的设计的特点,因此设计者可以不必了解硬件结构。
从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL 语言。
用VHDL语言设计频率计

模块设计 分频器 由于设计的需要,我们进行三种分频的设 计:10分频、100分频、1000分频。这三 种分频对500Hz的信号进行分频,得到的是 50Hz、5Hz、0.5Hz的信号,将它们作为计 数闸门。
图4 分频器模块
闸门 闸门选择电路实际就是3选1电路,相对简 单,分频所得信号一起送入闸门,在控制 器的控制下,选出其中一路信号作为计数 闸门送入计数器。
图5 闸门模块
计数器 我们采用的是直接测频法,所以计数器就是在闸 门信号有效期间对被测信号进行计数。直接测频 法
图6 计数器模块
锁存器 锁存器用于将计数器的计数结果锁存,以 便于较稳定的显示测量结果。计数器完成 计数后,计数结果要立即锁存,在闸门低 电平期间,即计数器停止工作期间,计数 的结果要在锁存器中保持,直到新的计数 结果产生为止。
用VHDL语言设计数字频率计
付宝成 2006年6月
第一部分 设计要Байду номын сангаас及意义
一、设计的意义 频率测量是电子测量领域最基本的测量之一。随 着数字电子技术的发展,频率测量成为一项越来 越普遍的工作,测频原理及测频方法受到越来越 多的关注。 具有50多年发展历史的频率计是数字电路中的典 型仪器。它是实验室中常用的仪器之一,同时也 是计算机、通讯设备、音频视频等科研领域不可 缺少的测量仪器,是一种典型的数字化、自动化 的测量仪器,并越来越趋于小型化。
二、设计要求 测量方波信号的频率 测量的频率范围是1~100KHz 测量结果用十进制数显示 具有自动校验和测量两种功能 具有超量程报警功能,在超出测量范围 时,发出指示信号
第二部分 设计的内容
频率测量一般有测频法与测周期法两种基 本方法,其原理如下: 测频法:由标准时钟分频产生一门控信号, 在门控信号下对输入的被测信号周期进行 计数,也叫直接测频法。如图1所示。 设输入信号频率为Fx,门控信号有效电平 时间为T,在此有效电平时间内的计数值为 N,则输入信号的频率为:Fx=N/T。
一种基于VHDL语言的频率计的设计与实现

图 2频 率计 系统 方 块 图
2 防抖 电路 . 1 测信号的计数功能 。 在此电路 中,令时钟周期大于欲滤去的窄 3仿真波形 脉冲宽度 , 经过 电路处理 , 只有宽脉 冲被识 别 , 仿真波形 图如 图 3 所示。 窄脉冲滤去。 2 . 2显示 模
块
显 示 模 块 采 用 分 时 复 用 的方 式 逐 个 扫 描, 对几 个显示 模 块 逐 个 扫 描 进行 显示 , 显示 图 3 仿 真 波 形 图 模块的选择信号通过模四计数器来实现。 4FG P A实现 23 .分频模块 本设计选用 At a l r 公司的 E M 18 L 8 e P 72sC4 P A芯 片实现 , 率计 只 占该芯片部分资 频 由于所选时钟信 号为 2 M z 0 H 时钟信号 , 通 6 F G 过分频电路产生片选信号 ,防抖动电路周期信 源 , 资源作为它用。 其余 结语 号, 闸门信 号。 所谓 的分频器实际上就是一个计
—
图 1频 率 计 设 计 的 总体 框 图 2设计思路 在设计 考虑中将 时钟分 到 5 z H ,形成一个 固定的 0 s . 的闸门时间, 2 被测 信号通过 0 s . 的 I 闸门进入计数器进行计数 , 而在 01 的低电平 . s 内不计数 , 将计数器清零 , 下一次计数。为 以便
满足题意, 被测信号为几十千赫兹( H ) , K Z 时 显 示 # . k z被测信号 为几百 千赫兹( H ) , # #H ; # k z时 显示 # . H ; 槲 # z 被测 信号 为几千 千赫兹( H ) k k Z
时, 显示 堋# 非Hz 。采用时分复用 的方法控制 4 个数码管的显示。 该 系统共有 5 个模块组成 ,分别为分频模 块 DVD F E 、 I I E R 4 防抖 电路 D B U C 、 E O N E 计数 模块 FEET R T S 、锁 存 器模 块 F E A C 和 R L TH
等精度频率计设计VHDL程序

等精度频率计设计VHDL程序下面是一个基于VHDL的精度频率计设计程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.NUMERIC_STD.ALL;entity Frequency_Counter isgenericTOLERANCE : integer := 1; --容差范围REF_FREQ : natural := 100; --参考频率BIT_WIDTH : integer := 16 --输出频率计数器宽度portclk : in std_logic;reset : in std_logic;frequency : out std_logic_vector(BIT_WIDTH - 1 downto 0) --计数器输出值end entity Frequency_Counter;architecture Behavioral of Frequency_Counter issignal count : unsigned(BIT_WIDTH - 1 downto 0); --计数器signal count_enable : std_logic; --计数使能信号signal ref_counter : unsigned(ceil(log2(real(REF_FREQ * CLK_FREQ) / TOLERANCE)) - 1 downto 0); --参考计数器beginprocess(clk, reset)beginif reset = '1' thencount <= (others => '0'); --复位为0count_enable <= '0';ref_counter <= (others => '0');elsif rising_edge(clk) thencount <= count + 1; --计数信号递增end if;if ref_counter = REF_FREQ - 1 thenelseref_counter <= ref_counter + 1; --参考计数器递增end if;end if;end process;process(clk, reset)beginif reset = '1' thencount_enable <= '0';elsif rising_edge(clk) thencount_enable <= '1'; --参考频率达到后启用计数信号elsecount_enable <= '0';end if;end if;end process;frequency <= std_logic_vector(count);end architecture Behavioral;在此设计中,我们定义了一个Frequency_Counter实体,它有几个泛型参数,包括CLK_FREQ(输入时钟频率),TOLERANCE(容差范围),REF_FREQ(参考频率)和BIT_WIDTH(输出频率计数器的宽度)。
基于VHDL的数字显示频率计的设计

EDA 课程设计报告书课题名称 基于VHDL 的数字显示频率计的设计 姓 名 学 号 院 系 专 业 指导教师※※※※※※※※※ ※※ ※※ ※※EDA 课程设计基于VHDL的数字显示频率计的设计1设计目的通过EDA的试验设计,加深我们对FPGA的了解,熟悉FPGA的工作原理和试验环境,知道FPGA的开发流程,熟悉各种软件如Quartus II 6.0的使用。
通过设计小型试验项目学会仿真和硬件测试的基本方法。
2设计的主要内容和要求在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。
通过运用VHDL语言,实现4位数字频率计,并利用Quartus II 6.0集成开发环境进行编辑、综合、波形仿真,并下载到FPGA器件中,经实际电路测试,该系统性能可靠。
3 整体设计方案3.1四位十进制数据显示频率计设计在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。
直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量,本设计中使用的就是直接测频法,即用计数器在计算1S内输入信号周期的个数。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
VHDL实现的数字频率计

第5节 利用VHDL语言实现单片简易自动量程数字频率计[学习要求] 能利用VHDL语法实现较为复杂的数字系统。
[重点与难点]重点:复杂数字系统的设计方法。
难点:频率计自动量程的设计;动态显示的原理。
[理论内容]一、数字频率计系统概述该频率计的具体电路如图1所示,图中CPLD可采用FLEX10K10系列实现,数码管采用共阴极方式。
Funknown引脚为未知频率输入,ref_clk为10MHz参考频率输入,sys_rst_l 为复位引脚。
从图中可以看出,使用可编程器件使系统器件数降至最低。
该频率计的计数范围从DC到9.999MHz,共分为四个量程,每个量程的阀门如下表所示:图1 单片CPLD数字频率计电路图量程与阀门宽度对应表频率范围/KHz 阀门宽度/sDC~0.9999 110.00~99.99 0.1100.0~999.9 0.011000~9999 0.001该频率计基本原理是通过对来临的未知频率上升沿在设定的时间段内计数,这个时间段就是所谓的阀门。
当计数溢出时,说明所选择的阀门较宽,此时自动选择较窄的阀门。
阀门开关的切换是立即的。
该频率计CPLD 内部逻辑电路通过VHDL 语言编程实现。
系统大致可分为图2所示的四个模块:控制单元(CONTROL ),主要完成时序生成和量程自动切换等。
计数单元(COUNT ),在阀门内对输入频率进行计数,计数结果为四位十进制数。
显示单元(DISPLAY )对计数结果进行动态的数码显示。
分频单元(DIVIDE )比较简单,将参考频率分频得到动态显示所需的频率。
以下对各单元功能具体分析。
二、系统内部各单元概述1、显示单元(DISPLAY )图3 频率计控制单元工作流图其对外接口如图2所示。
sys_rst_l 为总体复位信号,disp_clk 为动态刷新频率,由ref_clk (10MHz )经DIVIDE 单元分频而来,频率为100KHz 。
其输出digit_out(7:0)和gate_l(3:0)如图1和图2所示。
数字频率计设计(使用VHDL语言)

实验报告\
一、实验目的
设计数字频率计,学习较复杂数字系统设计方法。
二、实验内容
设计八位数码显示频率计P228
三、实验环境
计算机、QuartusII软件
四、实验步骤
1、子模块FTCTRL(用于产生控制信号) (1)程序代码
(2)仿真结果
2
、子模块COUNTER32B (用于计数)
(1)程序代码
(2)仿真结果
(3)结果分析
当使能信号ENABLE=‘1’时,允许计数。
当CLR=‘1’时重新计数
3、子模块REG32B(输出数据)
(1)程序代码
(2)仿真结果
(3)结果分析
当LK=’1’时,输出当前数据DIN,否则不做处理。
4、子模块SHOW
(1)程序代码
(2)仿真结果
(3)结果分析
当S=‘0’时,载入数据DATA,否则将数据DATA左移4位。
每次上升沿,SHOW1输出数据的高四位。
综合模块:
五、实验结果与讨论
这个实验花了比较多的时间,在做计数器的时候由于没有考虑到最后使用的是二进制显示的,所以在转换的时候遇到了不少的问题,最后
新亏有老师帮我想了办法解决。
频率计VHDL程序与仿真

数字频率计VHDL程序与仿真一、功能:频率计。
具有4位显示,能自动根据7位十进制计数旳成果,自动选择有效数据旳高4位进行动态显示。
小数点表达是千位,即KHz。
二、源程序及各模块和重要语句旳功能libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity plj isport(start:instd_logic;--复位信号clk :in std_logic; --系统时钟clk1:in std_logic; --被测信号yy1:out std_logic_vector(7 downto 0);--八段码w1 :out std_logic_vector(3 downto 0));--数码管位选信号endplj;architecturebehavofPLj issignalb1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto0);--十进制计数器signalbcd:std_logic_vector(3 downto0); --BCD码寄存器signal q:integer range 0to 49999999;--秒分频系数signal qq : integer range0 to499999; --动态扫描分频系数signal en,bclk:std_logic; --使能信号,有效被测信号signal sss:std_logic_vector(3downto 0); --小数点signal bcd0,bcd1,bcd2,bcd3 :std_logic_vector(3 downto0);--寄存7位十位计数器中有效旳高4位数据beginsecond:process(clk) --此进程产生一种持续时间为一秒旳旳闸门信号beginif start='1' then q<=0;elsif clk'event and clk='1' thenif q<49999999 then q<=q+1;else q<=49999999;end if;end if;ifq<49999999 and start='0' then en<='1';else en<='0';end if;end process;and2:process(en,clk1) --此进程得到7位十进制计数器旳计数脉冲beginbclk<=clk1 anden;endprocess;com:process(start,bclk) --此进程完毕对被测信号计脉冲数beginifstart='1' then--复位b1<="0000";b2<="0000";b3<="0000";b4<="0000";b5<="0000";b6<="0000";b7<="0000";elsif bclk'event andbclk='1' thenifb1="1001"then b1<="0000"; --此IF语句完毕个位十进制计数ifb2="1001"then b2<="0000"; --此IF语句完毕百位十进制计数if b3="1001" thenb3<="0000"; --此IF语句完毕千位十进制计数ifb4="1001" then b4<="0000";--此IF语句完毕万位十进制计数if b5="1001" THENb5<="0000"; --此IF语句完毕十万位十进制计数if b6="1001" thenb6<="0000"; --此IF语句完毕百万位十进制计数if b7="1001" then b7<="0000"; --此IF语句完毕千万位十进制计数elseb7<=b7+1;endif;else b6<=b6+1;end if;else b5<=b5+1;endif;else b4<=b4+1;end if;else b3<=b3+1;end if;elseb2<=b2+1;endif;else b1<=b1+1;end if;endif;end process;process(clk) --此进程把7位十进制计数器有效旳高4位数据送入bcd0~3;并得到小数点信息beginif rising_edge(clk)thenif en='0' thenif b7>"0000" then bcd3<=b7;bcd2<=b 6; bcd1<=b5;bcd0<=b4; sss<="1110";elsif b6>"0000" thenbcd3<=b6; bcd2<=b5;bcd1<=b4;bcd0<=b3; sss<="1101";elsifb5>"0000"thenbcd3<=b5;bcd2<=b4; bcd1<=b3;bcd0<=b2;sss<="1011";ﻩelse bcd3<=b4; bcd2<=b3; bcd1<=b2; bcd0<=b1; sss<="1111";end if;end if;end if;end process;weixuan:process(clk) --此进程完毕数据旳动态显示beginif clk'event and clk='1' thenif qq< 99999 then qq<=qq+1;bcd<=bcd3; w1<="0111";ﻩif sss="0111" thenyy1(0)<='0';ﻩelseyy1(0)<='1';ﻩﻩend if;elsif qq<199999 then qq<=qq+1;bcd<=bcd2; w1<="1011";ﻩif sss="1011" then yy1(0)<='0';ﻩelseyy1(0)<='1';ﻩend if;elsifqq<299999then qq<=qq+1;bcd<=bcd1; w1<="1101";ﻩif sss="1101"then yy1(0)<='0';ﻩelse yy1(0)<='1';end if;elsif qq<399999 thenqq<=qq+1;bcd<=b cd0; w1<="1110";ifsss="1110" thenyy1(0)<='0';else yy1(0)<='1';end if;else qq<=0;end if;end if;end process;m0:process(bcd) --译码begincasebcd iswhen"0000"=>yy1(7 downto1)<="0000001";when "0001"=>yy1(7 downto1)<="1001111";when"0010"=>yy1(7 downto1)<="0010010";when "0011"=>yy1(7 downto 1)<="0000110";when "0100"=>yy1(7 downto 1)<="1001100";when "0101"=>yy1(7downto1)<="0100100";when "0110"=>yy1(7 downto 1)<="1100000";when "0111"=>yy1(7 downto1)<="0001111";when"1000"=>yy1(7downto 1)<="0000000";when "1001"=>yy1(7 downto 1)<="0001100";when others=>yy1(7 downto1)<="1111111";end case;endprocess;end behav;三、程序仿真图注:仿真中秒分频为50000,动态显示旳分频系数也相应调小。
VHDL语言设计数字频率计

数字频率计的设计一、频率计实现的功能要设计的频率计的测量围为1MHz。
为了提高测量的精度,量程分为三档,分别是:10kHz、100kHz、1MHz。
并要求在测量频率大于或小于选择的量程时,频率计自动换档。
1、当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增加一档。
2、当读数小于009时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。
3、当超出测量围时,显示错误。
4、在计数时不显示数据,计数完成后只显示测量结果。
5、小数点位置要自动移位。
二、频率计各部分的分析在这个设计中,需要用计数器来进行计数,而且计数器在各个档位要被重复使用,在测量的过程中,计数允许时钟信号还要进行调整,故将计数器设计成一个单独的模块,提供计数值的输出。
显示结果包括数值显示,档位显示及溢出标志显示。
其中数值显示要用到三个数码管,实验箱上连在一起的三个数码管中,只有两个数码管部接有译码器,因此我们自己还要在程序中为那个没有译码器的数码管再加一段七段译码器程序来显示结果。
档位标志由三个LED灯来显示,代替数码管上的小数点的功能。
溢出标志由两个LED灯来显示,其中一个显示结果溢出,另一个显示输入信号在测量围之。
该频率计的顶层逻辑电路原理图如图(1)所示:图(1)三、频率计各部分的设计和实现从上面的分析可以知道,频率计可以由三个模块来组成。
下面对各个模块的设计方法和实现方法进行详细说明。
1、时基进程的设计和实现在实际使用时,输入的信号是随意的,没有办法预知输入的频率。
因此选取频率计的时基是非常重要的。
在设计要求中,将量程分为三档,在某一档进行测量时,需要提供该档的时基。
在10kHz档,该档最大读数为9.99kHz,最小读数为0.01 kHz,所以要提供的时基是频率为0.01 kHz的脉冲。
同理,在100 kHz档上,要提供的时基应该是频率为0.1 kHz 的脉冲。
在1 MHz档上,要提供的时基是频率为1 kHz的脉冲。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VHDL语言编写的频率计程序分频library IEEE;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FP isport( clk,rst:in std_logic;fp:out std_logic);end FP;Architecture behave of FP issignal cnt: std_logic_Vector(15 downto 0);signal tmp,temp: std_logic;beginprocess(clk,rst)BEGINif Rst='1' thencnt<="0000000000000000";elsif clk'event and clk='1' thenif cnt="0000001111111111" thencnt<="0000000000000000";elsecnt<=cnt + 1;end if;end if;end process;process(clk,rst)beginif clk'event and clk='1' thenif cnt="0000001111111111" thentmp<=not tmp;end if;end if;end process;process(clk,rst)beginif clk'event and clk='1' thenif cnt="0000000111111111" thentemp<= not temp;end if;end if;end process;fp<= tmp XOR temp;end behave;计数LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;Entity FRE is port( clk,CLR,EN:in std_logic;COUT:out std_logic;CQ:out std_logic_Vector(3 downto 0)); end FRE;Architecture behave of FRE issignal QN: std_logic_Vector(3 downto 0); beginprocess(clk,CLR)BEGINIF CLR='0' thenQN<="0000";ELSIF clk'event and clk='1' thenif en='1' thenif QN="1001" thenQN<="0000";COUT<='1';elseQN<=QN+1;COUT<='0';end if;end if;END IF;end process;CQ(3 DOWNTO 0)<=QN;end behave;控制use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CTL isport( clk:in std_logic;EN,CLR,FINISH:out std_logic); end CTL;Architecture behave of CTL issignal DIV: std_logic;beginprocess(clk)BEGINif clk'event and clk='1' thenDIV<= NOT DIV;end if;end process;EN<=DIV;FINISH<=NOT DIV;PROCESS(DIV,CLK)BEGINIF DIV='0' AND CLK='0' THENCLR<='0';ELSECLR<='1';END IF;end process;end behave;显示LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;Entity DISPLAY is port( clk:in std_logic;DATA:in std_logic_Vector(15 downto 0); SD:out std_logic_Vector(7 downto 0); SS:out std_logic_Vector(1 downto 0));Architecture behave of DISPLAY issignal C: std_logic_Vector(1 downto 0);signal KEYBUF: std_logic_Vector(3 downto 0);beginprocess(clk)BEGINif clk'event and clk='1' thenC<=C+1;end if;end process;SS<=C;PROCESS(C)BEGINCASE C ISWHEN "00" => KEYBUF<=DATA(15 downto 12);WHEN "01" => KEYBUF<=DATA(11 downto 8);WHEN "10" => KEYBUF<=DATA(7 downto 4);WHEN "11" => KEYBUF<=DATA(3 downto 0);WHEN OTHERS => KEYBUF<="0000";END CASE;END PROCESS;PROCESS(KEYBUF)BEGINcase KEYBUF iswhen "0000" => SD<="00111111";when "0001" => SD <="00110000";when "0010" => SD <="01011011";when "0011" => SD <="01001111";when "0100" => SD <="01100110";when "0101" => SD <="01101101";when "0110" => SD <="01111100";when "0111" => SD <="00000111";when "1000" => SD <="01111111";when "1001" => SD <="01101111";when "1010" => SD <="01110111";when "1011" => SD <="01111100";when "1100" => SD <="00111001";when "1101" => SD <="01011110";when "1110" => SD <="01111011";when "1111" => SD <="01110001";when others => SD <="00000000";END CASE;END PROCESS;显示控制library IEEE;use ieee.std_logic_1164.all;entity REG isport( LOAD:in std_logic;QIN:in std_logic_Vector(15 downto 0);QOUT:out std_logic_Vector(15 downto 0)); end REG;Architecture behave of REG isbeginprocess(LOAD)BEGINif LOAD'event and LOAD='1' thenQOUT<=QIN;end if;end process;end behave;。