基于VHDL语言的频率计设计
基于VHDL语言的数字频率计的设计方案
基于VHDL语言的数字频率计的设计方案
1.引言数字频率计是通讯设备、计算机、电子产品等生产领域不
可缺少的测量仪器。
由于硬件设计的器件增加,使设计更加复杂,可靠性变差,延迟增加,测量误差变大。
通过使用EDA技术对系统功能进行描述,运用VHDL语言,使系统简化,提高整体的性能和可靠性。
采用VHDL编程设计的数字频率计,除了被测信号的整形部分,键输入和数码显示以外,其他都在一片FPGA上实现,从而让整个系统非常精简,让其具有灵活的现场更改性,在不改变硬件电路的基础上,进一步改进提高系统的性能,使数字频率计具有高速,精确度高,可靠性强,抗干扰等优点,为数字系统进一步的集成创造了条件。
2.数字频率计的工作原理
频率测量方法中,常用的有直接测频法、倍频法和等精度测频法。
中直接测频法是依据频率的含义把被测频率信号加到闸门的输入端,只有在闸门开通时间T(以ls计)内,被测(计数)的脉冲送到十进制计数器进行计数。
直接测频法比其他两个方案更加简单方便可行,直接测频法虽然在低频段测量时误差较大,但在低频段我们可以采用直接测周法加测量,这样就可以提高测量精度了。
直接周期测量法是用被测周期信号直接控制计数门控电路,使主门开放时间等于Tx,时标为Ts的脉冲在主门开放时间进入计数器。
设在Tx期间计数值为N,可以根据Tx=N乘以Ts来算得被测信号周期。
因此本文采用低频测周,高频测频的方法来提高精度,减小误差。
3.主要功能模块的实现
该系统设计的控制器是由状态机实现,通过在不同测量档位,选择合理的时基信号频率降低误差,确定各状态转移条件和状态名,采用低频档位测周,。
基于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的数字频率计的设计
目录第一章概述 (1)1.1 设计概述 (1)1.2设计内容 (1)1.3 设计原理 (1)1.4 设计功能 (2)第二章技术与开发工具 (3)2.1 VHDL简介 (3)2.1.1简介 (3)2.1.2 VHDL程序组成部分 (4)2.1.3 VHDL系统优势 (4)2.2 MAX+PLUSⅡ (5)2.2.1 软件简介 (5)2.2.2 软件组成 (6)2.2.3设计流程 (7)第三章系统分析 (8)3.1数字频率计的设计任务及要求 (8)3.2 模块的划分 (8)3.3设计分析 (9)第四章各功能模块基于VHDL的设计 (10)4.1 时基产生与测频时序控制电路模块的VHDL源程序 (10)4.2 待测信号脉冲计数电路模块的VHDL源程序 (11)4.2.1 十进制加法计数器的VHDL源程序 (11)4.2.2待测信号脉冲计数器的VHDL源程序 (12)4.3 锁存与译码显示控制电路模块的VHDL源程序 (13)4.3.1 译码显示电路的VHDL源程序 (13)4.3.2 锁存与译码显示控制模块的VHDL源程序 (14)4.4 顶层电路的VHDL源程序 (16)第五章数字频率计波形仿真 (18)5.1 时基产生与测频时序控制电路模块的仿真 (18)5.2 待测信号脉冲计数电路模块的仿真 (18)5.2.1 十进制加法计数器的仿真 (18)5.2.2待测信号脉冲计数器的仿真 (19)5.3 锁存与译码显示控制电路模块的仿真 (19)5.3.1 译码显示电路的仿真 (19)5.3.2 锁存与译码显示控制模块的仿真 (20)5.4 数字频率计系统的仿真 (20)结论 (22)参考文献 (23)摘要本文介绍了一种自顶向下分层设计多功能数字频率计的设计方法。
该频率计采用VHDL硬件描述语言编程以MAX+PLUSⅡ为开发环境,极大地减少了硬件资源的占用。
数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。
用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频率计的设计
频率计一、实验目的1.学习并熟悉使用max+plusⅡ软件。
2.掌握各频率计各逻辑模块的功能与设计方法。
二、实验原理频率测量基本原理是计算每秒钟内待测信号的脉冲个数。
要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当TSTEN为高电平时,允许计数;为低电频时停止计数,并保持其所计的脉冲信号。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进32位锁存器REG32B中,并由周期性的清零信号并不断闪烁。
所存信号之后,必需有一清零信号CLR_CNT 对计数器进行清零,为下一秒的计数做准备。
测试控制信号发生器的工作时序如图。
为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时其值翻转。
三、实验内容和代码—————————————cnt10——————————————LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;ENA: IN STD_LOGIC;CQ: OUT INTEGER RANGE 0 TO 15;CARRY_OUT :OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISSIGNAL CQI: INTEGER RANGE 0 TO 15;BEGINPROCESS(CLK, CLR, ENA)BEGINIF CLR = '1' THEN CQI <= 0;ELSIF CLK'EVENT AND CLK = '1' THENIF ENA = '1' THENIF CQI < 9 THEN CQI <= CQI + 1;ELSE CQI <= 0;END IF;END IF;END IF;END PROCESS;PROCESS(CQI)BEGINIF CQI = 9 THEN CARRY_OUT <= '1';ELSE CARRY_OUT <= '0'; END IF;END PROCESS;CQ <= CQI;END behav;——————————————REG32GB——————————LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT (Load : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B;ARCHITECTURE behav OF REG32B ISBEGINPROCESS(Load, DIN)BEGINIF Load'EVENT AND Load='1' THEN DOUT <=DIN;END IF;END PROCESS;END behav; ——————————————TESTCTL——————————LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL ISPORT (CLK : IN STD_LOGIC;TSTEN : OUT STD_LOGIC;CLR_CNT : OUT STD_LOGIC;Load : OUT STD_LOGIC);END TESTCTL;ARCHITECTURE behav OF TESTCTL ISSIGNAL Div2CLK : STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK = '1' THENDiv2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS(CLK, Div2CLK)BEGINIF CLK = '0' AND Div2CLK ='0' THEN CLR_CNT <= '1';ELSE CLR_CNT <= '0'; END IF;END PROCESS;Load <= NOT Div2CLK; TSTEN <= Div2CLK;END behav;——————————FREQTEST——————————LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST ISPORT(CLK : IN STD_LOGIC;FSIN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END FREQTEST;ARCHITECTURE struc OF FREQTEST ISCOMPONENT TESTCTLPORT(CLK : IN STD_LOGIC ; TSTEN : OUT STD_LOGIC ;CLR_CNT : OUT STD_LOGIC ; Load : OUT STD_LOGIC );END COMPONENT;COMPONENT CNT10PORT(CLK : IN STD_LOGIC ; CLR : IN STD_LOGIC ; ENA : IN STD_LOGIC ;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT : OUT STD_LOGIC);END COMPONENT;COMPONENT REG32BPORT( Load : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END COMPONENT ;SIGNAL Load1,TSTEN1,CLR_CNT1: STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1: STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINU1 : TESTCTL PORT MAP(CLK => CLK, TSTEN =>TSTEN1,CLR_CNT => CLR_CNT1, Load => Load1 );U2 : REG32B PORT MAP(Load => Load1, DIN => DTO1, DOUT => DOUT );U3 : CNT10 PORT MAP(CLK => FSIN ,CLR => CLR_CNT1, ENA => TSTEN1,CQ => DTO1(3 DOWNTO 0), CARRY_OUT => CARRY_OUT1(0) ); U4 : CNT10 PORT MAP(CLK => CARRY_OUT1(0), CLR => CLR_CNT1,ENA => TSTEN1, CQ => DTO1(7 DOWNTO 4),CARRY_OUT => CARRY_OUT1(1) );U5 : CNT10 PORT MAP(CLK => CARRY_OUT1(1), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(11 DOWNTO 8),CARRY_OUT => CARRY_OUT1(2) );U6 : CNT10 PORT MAP(CLK => CARRY_OUT1(2), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(15 DOWNTO 12),CARRY_OUT => CARRY_OUT1(3) );U7 : CNT10 PORT MAP(CLK => CARRY_OUT1(3), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(19 DOWNTO 16),CARRY_OUT => CARRY_OUT1(4) );U8 : CNT10 PORT MAP(CLK => CARRY_OUT1(4), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(23 DOWNTO 20),CARRY_OUT => CARRY_OUT1(5) );U9 : CNT10 PORT MAP(CLK => CARRY_OUT1(5), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(27 DOWNTO 24),CARRY_OUT => CARRY_OUT1(6) );U10 : CNT10 PORT MAP(CLK => CARRY_OUT1(6), CLR => CLR_CNT1,ENA => TSTEN1,CQ => DTO1(31 DOWNTO 28) ); END struc;四、实验原理图:五、实验仿真波形:本次设计我们采用GW48 EDA实验箱,选择芯片EP1K30TC144-1,选择模式0,引七、编程下载在实验箱上选择CLOCK2输入为1Hz,模式选择模式0,引脚映射如上表所示。
等精度频率计设计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数字频率计设计说明书
一、设计功能与要求设计数字频率计,满足如下功能:(1)用VHDL语言完成数字频率计的设计及仿真。
(2)频率测量范围:1∼10KHz,分成两个频段,即1∼999Hz,1KHz∼10KHz,用三位数码管显示测量频率,且用LED(发光二极管)来表示所显示单位,我们这里定义亮绿灯表示以Hz为单位,亮红灯表示以KHz为单位。
(3)具有自动校验和测量两种功能,即既能用于标准时钟的校验,同时也可以用于未知信号频率的测量。
(4)具有超量程报警功能,在超出目前所选量程档的测量范围时,会发出音响报警信号。
二、设计思路通过计算已知单位时间内待测信号的脉冲个数来计算被测信号的频率,同时通过动态扫描方式在三个数码管上显示出测得频率值。
如下图1的系统框图所示,计数器对CP信号进行计数,在1秒定时结束后,将计数器结果送锁存器锁存,并通过时钟下降沿将不再变化的测量值送至数码管显示。
在下一个计数时钟信号上升沿到来时,再次重新计数。
图1 系统设计框架图系统各个模块介绍如下:(1)测量/校验选择模块:输入信号:选择信号selin,被测信号measure,标准校验信号test;输出信号:CP;当selin=0时,为测量状态,CP=measure;当selin=1时,为校验状态,CP=test。
校验与测量共用一个电路,只是被测信号CP不同而已。
(2)测频控制信号发生器(二分频):输入信号:1Hz时钟信号clk;输出信号:1秒钟高电平基准信号clk1(周期为2秒);(3)四级十进制计数器模块(带进位C):输入信号:clk1、CP,用于计数开始、清零、锁存。
输出信号:q4~q1设置超出量程档测量范围示警信号alert。
若被测信号频率小于1KHz(K=0),则计数器只进行三级十进制计数,最大显示值为999.Hz,如果被测信号频率超过此范围,示警信号扬声器报警;若被测信号为1KHz~10KHz (K=1),计数器进行四位十进制计数,取高三位显示,最大显示值为9.99KHz,如果被测信号频率超过此范围, 示警信号扬声器报警。
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的脉冲。
基于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语言的频率计设计(带频率补偿)
测量范围:0——10khz(因为只有四位数码管)误差:千分之一library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity dongshu isport(clk:in std_logic; --时钟脉冲50MHzclk_1s:inout std_logic; --计频控制信号高电平计数地电平清零jishu:inout std_logic; --50Mhz分频后的信号50hzjipin:in std_logic; --输入计频脉冲wei:out std_logic_vector(3 downto 0);--数码管位选端duan:out std_logic_vector(7 downto 0));--数码管段选端end dongshu;architecture rtl of dongshu issignal jp:integer range 0 to 59999; --jp为实际计频与补偿后的值signal jp1:integer range 0 to 59999; --jp1为实际计频值signal jp0:integer range 0 to 1000; --jp0为补偿值signal aaa:std_logic_vector(7 downto 0); --aaa为第一位数码管扫描值signal bbb:std_logic_vector(7 downto 0); --bbb为第二位数码管扫描值signal ccc:std_logic_vector(7 downto 0); --ccc为第三位数码管扫描值signal ddd:std_logic_vector(7 downto 0); --ddd为第四位数码管扫描值begin--////////////////////////////////////////////////////////////--动态扫描进程process(clk)variable count:integer range 0 to 19999;beginif(clk'event and clk='1')then count:=count+1;if count<=4999 then wei<="1000";duan<=aaa;elsif count<=9999 then wei<="0100";duan<=bbb;elsif count<=14999 then wei<="0010";duan<=ccc;elsif count<=19999 then wei<="0001";duan<=ddd;else count:=0;end if;end if;end process;--///////////////////////////////////////////////////////////////////////////////--计频进程process(jishu)variable countx:integer range 0 to 25; --countx为计时寄存器beginif (jishu'event and jishu='1')then countx:=countx+1;--对计数信号进行50分频产生0.5s高电平然后产生一个下降沿if countx<=24 then clk_1s<='1';elsif countx<=25 then clk_1s<='0'; --前24个值时为高,25时产生一个下降沿else countx:=0;end if;end if;end process;process(clk_1s,jipin) --计频进程variable countz:integer range 0 to 59999; --countz为实际计数脉冲beginif clk_1s='1' thenif (jipin'event and jipin='1')then countz:=countz+1;jp1<=countz*2;--计频控制信号为高时计频因为高电平持续时间是0.5s所以要乘2end if;end if;if clk_1s='0' then countz:=0; --计频控制信号为低时清零end if;end process;process(clk_1s,jipin) ----计频补偿进程variable coo:integer range 0 to 10000;variable co:integer range 0 to 24;beginif clk_1s='1' thenif (jipin'event and jipin='1')then co:=co+1;jp0<=coo*2;--计频信号为高电平时补偿因为高电平0.5s 所以要乘2if co=24 then co:=0;coo:=coo+1;--因为以0.5s为一个测量周期时固有误差为4%100 所以每计25个上升沿将补偿值加一end if;end if;end if;if clk_1s='0' then coo:=0; --计频控制信号为低电平时补偿值清零end if;end process;--/////////////////////////////////////////////////////////////////////////////--分频进程process(clk) --分频进程variable count1:integer range 0 to 999999;beginif(clk'event and clk='1')then count1:=count1+1;if count1<=499999 then jishu<='0'; --分频系数1M高电平0.01s低电平0.01selsif count1<=999999 then jishu<='1'; --每50次为1selse count1:=0; --jishu为分频后的脉冲信号end if;end if;end process;--///////////////////////////////////////////////////////////////////////////////--显示进程process(clk_1s) --显示进程variable count0:integer range 0 to 9;variable count1:integer range 0 to 9;variable count2:integer range 0 to 9;variable count3:integer range 0 to 9;beginif(clk_1s'event and clk_1s='1') thenjp<=jp0+jp1; --将实际记得的频率和补偿值相加count0:=jp/1000; --求出千位count1:=(jp rem 1000)/100; --求出百位count2:=(jp rem 100)/10; --求出十位count3:=(jp rem 10); --求出个位case count0 iswhen 0=>aaa<="00111111";when 1=>aaa<="00000110";when 2=>aaa<="01011011";when 3=>aaa<="01001111";when 4=>aaa<="01100110";when 5=>aaa<="01101101";when 6=>aaa<="01111101";when 7=>aaa<="00000111";when 8=>aaa<="01111111";when 9=>aaa<="01101111";when others=>aaa<=null;end case;case count1 iswhen 0=>bbb<="00111111";when 1=>bbb<="00000110";when 2=>bbb<="01011011";when 3=>bbb<="01001111";when 4=>bbb<="01100110";when 5=>bbb<="01101101";when 6=>bbb<="01111101";when 7=>bbb<="00000111";when 8=>bbb<="01111111";when 9=>bbb<="01101111";when others=>bbb<=null;end case;case count2 iswhen 0=>ccc<="00111111";when 1=>ccc<="00000110";when 2=>ccc<="01011011";when 3=>ccc<="01001111";when 4=>ccc<="01100110";when 5=>ccc<="01101101";when 6=>ccc<="01111101";when 7=>ccc<="00000111";when 8=>ccc<="01111111";when 9=>ccc<="01101111";when others=>ccc<=null;end case;case count3 iswhen 0=>ddd<="00111111";when 1=>ddd<="00000110";when 2=>ddd<="01011011";when 3=>ddd<="01001111";when 4=>ddd<="01100110";when 5=>ddd<="01101101";when 6=>ddd<="01111101";when 7=>ddd<="00000111";when 8=>ddd<="01111111";when 9=>ddd<="01101111";when others=>ddd<=null;end case;end if;end process;end rtl;。
基于VHDL八位频率计设计
SIGNAL TSTEN:STD_LOGIC; SIGNAL CLR_CNT:STD_LOGIC; SIGNAL LOAD:STD_LOGIC; SIGNAL CARRY1:STD_LOGIC; SIGNAL CARRY2:STD_LOGIC; SIGNAL CARRY3:STD_LOGIC; SIGNAL CARRY4:STD_LOGIC; SIGNAL CARRY5:STD_LOGIC; SIGNAL CARRY6:STD_LOGIC; SIGNAL CARRY7:STD_LOGIC; SIGNAL CARRY8:STD_LOGIC; SIGNAL DIN:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL DOUT:STD_LOGIC_VECTOR(31 DOWNTO 0);
• • • • • • • • • • • • •
ELSIF CLK'EVENT AND CLK= '1' THEN IF ENA= '1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0;END IF; --大于9,则计数器清零 END IF; END IF; END PROCESS; PROCESS (CQI) BEGIN IF CQI=9 THEN CARRY_OUT<= '1'; --进位输出 ELSE CARRY_OUT<= '0';END IF; END PROCESS; CQ<=CQI;
• 频率测量的基本原理是计算每秒钟内待测信号的 脉冲个数。这就要求TESTCTL的计数使能信号 TSTEN能产生一个1秒脉宽的周期信号,并对频率 计的每一计数器CNT10的ENA使能端进行同步控 制。当TSTEN高电平时,允许计数;低电平时,停止 计数,并保持其所计的数。在停止计数期间,首先需 要一个锁存信号LOAD的上跳沿将计数器在前1秒 钟的计数值锁存进32位锁存器REG32B中,并由外 部的7段译码器译出并稳定显示。锁存信号之后, 必须有一清零信号CLR_CNT对计数器进行清零, 为下1秒钟的计数操作作准备。为了产生这个时序 图,需首先建立一个由D触发器构成的二分频器,在 每次时钟CLK上沿到来时其值翻转。
论文 基于vhdl语言直接测频法频率计设计(原创)
基于vhdl语言直接测频法频率计设计一.设计原理频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
测频法就是在确定的闸门时间Tw内,记录被测信号的脉冲个数Nx ,则被是信号的频率为fx=Nx/Tw。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1 s作为闸门时间。
原理图:原理图设计框图:设计框图二.系统分析1.顶层文件。
用于集成各个模块的进程,定义输入输出端口。
2.控制模块。
控制十进制计数器的计数及锁存器的工作,当计数器停止计数,则锁存器接收计数器的计数数据。
3.计数器。
由于需要使用数码管显示频率,所以采用的是十进制可清零、具有使能功能的计数器模块。
4.锁存模块。
接受七个计数器信号中的四个进行锁存。
5.译码显示模块。
因为每个数码管有八个段(包括小数点),所以需要八个段选输出,另外有四个位选输出控制四位数码管的亮灭。
二.程序设计(1)十进制计数器模块计数器模块是对输入脉冲信号的频率进行测量,由4个十进制加法器组成,其中EN为计数器选通控制信号,START为计数清零信号。
在计数清零信号清零后,当计数使能信号EN有效时,开始对待测信号进行计数。
本程序计数使能信号EN的宽度为1s(与闸门信号同宽),计数结果为待测信号的频率。
(2)4位锁存器模块当锁存信号上升沿到来时,将计数器的计数值锁存,这样可由外部的八段译码器译码并在数码管上显示。
设置锁存器的好处是显示的数据稳定。
复位后,锁存器里面的内容将清零。
另外程序设定开关s3用于将低四位送锁存器,当按下时显示低四位,用于测量大于9999Hz的信号时显示低四位。
(3)控制模块根据频率的定义和测量的基本原理,测量信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许(EN)的信号,1秒计数结束后,计数值锁入锁存器的锁存信号。
基于VHDL语言的全同步数字频率计的设计与研究的开题报告
基于VHDL语言的全同步数字频率计的设计与研究的开题报告一、题目基于VHDL语言的全同步数字频率计的设计与研究二、研究背景和意义数字频率计广泛应用于各种信号的频率测量,具有准确度高、稳定性好、适用范围广等优点。
目前市面上的数字频率计大多采用片上计数器实现,而片上计数器的精度受到芯片工艺和设计的限制,难以满足高精度应用的需求。
因此,本课题旨在研究一种基于VHDL语言的全同步数字频率计,通过FPGA实现,此方案将大幅提高精度,减小误差,提高计数范围。
三、研究内容和目标本课题拟研究的内容包括:1.通过对数字频率计功能和原理的分析,确定设计思路和参数。
2.根据设计思路和参数,完成数字频率计模块的设计与仿真,并验证其正确性和合理性。
3.使用VHDL语言完成数字频率计的程序设计。
4.将程序下载到FPGA中,实现数字频率计的硬件设计。
5.对硬件设计进行测试与调试,验证数字频率计的性能指标。
本课题的目标是:1.设计出一款精度高、误差小、计数范围广、应用范围广的全同步数字频率计。
2.通过实验验证数字频率计的功能和性能指标,并与市面上的数字频率计进行比较,证明本方案的优越性。
四、研究方法和技术路线本课题的研究方法和技术路线如下:1.文献调研通过查阅相关文献和资料,了解数字频率计的基本原理、设计思路、参数要求等内容,为后续的研究工作提供理论依据。
2.模块设计根据数字频率计的功能和参数要求,对数字频率计的各个模块进行设计,包括时钟模块、预分频器模块、计数器模块、显示模块等。
3.模块仿真通过VHDL语言进行数字频率计模块的仿真,验证模块的电路实现是否符合设计要求,进一步完善设计。
4.程序设计根据模块设计的结果,将各个模块的功能用VHDL语言进行程序设计。
5.硬件设计将程序下载到FPGA中,实现数字频率计的硬件设计,完成外围电路和显示模块的设计.6.测试与调试对数字频率计的设计进行测试和调试,记录其性能指标和实验结果,并对不足之处进行改进和提升。
基于VHDL的多功能数字频率计的设计
基于VHDL的多功能数字频率计的设计
随着科技的不断发展,数字频率计作为一种重要的测量仪器在工程领域中得到广泛应用。
本文将介绍一种。
该数字频率计采用VHDL语言进行设计,具有多功能的特点。
首先,该频率计具备高精度的频率测量功能。
通过采用精确的计数方法和高速时钟,能够准确地测量输入信号的频率。
同时,该频率计还具备宽频率范围的测量能力,能够适应不同频率信号的测量需求。
其次,该频率计还具备多种显示方式的功能。
通过设计多种显示模式,用户可以选择不同的显示方式来满足自己的需求。
例如,可以选择数码管显示、LCD显示或者LED显示等方式来显示测量结果。
这样,用户可以根据具体场景和需求选择最合适的显示方式。
此外,该频率计还具备多种触发方式的功能。
通过设计多种触发模式,用户可以选择不同的触发方式来满足自己的需求。
例如,可以选择外部触发、内部触发或者自动触发等方式来触发测量。
这样,用户可以根据具体实验需求选择最合适的触发方式。
最后,该频率计还具备数据存储和传输的功能。
通过设计存储器和通信接口,可以将测量结果存储起来或者传输给其他设备
进行进一步处理。
这样,用户可以方便地保存和分享测量数据,提高工作效率。
综上所述,基于VHDL的多功能数字频率计的设计具有高精度、宽频率范围、多种显示方式、多种触发方式以及数据存储和传输等功能。
该频率计在工程领域中具有重要的应用价值,可以满足不同场景和需求的频率测量需求。
随着科技的不断进步,相信该频率计的设计将能够为工程领域的发展做出积极贡献。
基于VHDL的数字频率计的设计
基于VHDL的数字频率计的设计一、数字频率计的基本设计原理频率信号易于传输,抗干扰性强,可以获得较好的测量精度。
因此,频率检测是电子测量领域最基本的测量之一。
本文的数字频率计是按照计算每秒内待测信号的脉冲个数的基本原理来设计,此时取闸门时间为1秒。
数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含信号整形电路、脉冲发生器、译码驱动电路和显示电路,其原理框图如图1所示。
图1 数字频率计原理框图工作过程:系统正常工作时,脉冲信号发生器输入1Hz的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。
测量信号时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。
当计数闸门信号高电平有效时,计数器开始计数,并将计数结果送入锁存器中。
设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
最后将锁存的数值由外部的七段译码器译码并在数码管上显示。
本程序采用了直接测频法:把被测频率信号经脉冲整形电路处理后加到闸门的一个输入端,只有在闸门开通时间T(以秒计)内,被计数的脉冲送到十进制计数器进行计数。
二、VHDL的设计实现1.基本原理设计频率计的核心是设计一个测频控制信号发生器,产生测量频率的控制时序。
这里控制信号clk取为1Hz,2分频后就是一个脉宽为1秒的时钟信号testen,用来作为计数闸门信号。
当testen为高电平时开始计数;在testen的下降沿,要产生一个锁存信号lock,该锁存信号是testen取反的值,并且是上跳沿有效;锁存数据后,还要在下次testen上升沿到来之前产生清零信号clear,为下次计数作准备,clear信号也是上跳沿有效。
测频控制信号发生器各信号之间的时序关系见图2所示。
计数器在清零信号clear到来时清零,testen为高电平时开始测量待测信号FSIN的个数,输出DOUT以十进制数显示,本频率计测量范围在65535Hz(16位)以内。
数字频率计设计(使用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语言设计数字频率计摘要:该频率计采用STC公司生产的STC89C51单片机和Altera公司所生产的FPGA芯片EP1C6Q240C8N。
FPGA的软件用VHDL语言描述实现在单片机的控制信号下进行计数。
单片机的软件采用C语言编写,很方便处理运算由FPGA传给单片机的数据。
关键字:一、引言频率检测是电子测量领域的最基本也是最重要的测量之一。
频率信号抗干扰能力强、易于传输,可以获得较高的测量精度,所以测频率方法的研究越来越受到重视。
以往的测频仪都是在低频段利用测周的方法、高频段用测频的方法,其精度往往会随着被测频率的下降而下降。
该设计采用等精度测量方法,解决了这个问题。
本设计中采用的STC89C51是一种低功耗、高性能的8位CMOS单片机,片内有4KB的闪烁可编程/擦除只读存储器,并且与MCS-51引脚和指令系统完全兼容,并且有宽工作电压范围、存储数据保存时间长(10年)等优点,是一款性价比较高的单片机。
EP1C6Q240C8N可容纳各种各样、独立的组合逻辑和时序逻辑函数,可以快速而有效的重新编程,并保证可编程擦除100次,这样可以进行重复烧录,比较方便系统的调试。
FPGA的各种功能块用VHDL语言描述实现。
该测频仪将FPGA 的高速高可靠性、单片机的灵活控制功能和等精度测频原理较高的测量精度相结合,具有速度快、功能全、精度高等特点。
二、设计原理1、设计内容设计一数字频率计,测量功能如下:(1) 能测量正弦波、方波等信号的频率(周期);(2) 能测量脉冲信号的宽度、占空比;(3) 由键盘选择确定测量功能;(4) 能实时显示被测信号的频率(周期)、脉宽等参数;(5) 具有自校功能,时标信号频率为2MHz;系统可由单片机控制单元与FPGA测量单元两部分构成。
其中,单片机控制单元主要实现处理运算FPGA测量单元送来的信号并产生反馈信号,通过单片机处理键盘的键值来选择区分各功能并控制液晶显示测量值。
基于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仿真软件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、课程设计任务: (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仿真软件。
四、课程设计使用的硬件资源及原理框图:1、50MHz时钟源两个2、拨动开关3、7段数码管/液晶显示屏1、FTCTRL测频控制模块:频率计的核心控制部分为FTCTRL,该模块的技术是能信号CNT_EN能产生一个1s脉宽的周期信号(由于实验箱提供的是50MHz的高频信号,所以需要通过分频器获得1s脉宽信号),并对频率计中的计数器的EN使能端进行同步测控。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所设计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器在前一秒钟的计数器的计数值锁存进锁存器REG32B中,并由外部的十六进制7段译码器译出,显示计数值。
锁存信号后,必须有一清零信号RST_CNT对计数器清零,为下一秒的计数操作做准备。
2、计数器模块:由于设计要求为8位十进制输出,所以采用的是十进制加法带进位的计数器级联的形式完成计数功能,每个单独的计数器有4位的十进制DOUT(3 DOWNTO 0)输出和一个进位COUT输出,输入的RST复位端、EN使能端和计数信号CLK端。
级联时,将被测信号接入第一个各位的CNT_10计数器的CLK端,并且将每上一个的进位端与下一个的计数器CNT_10的计数CLK相连。
3、REG32B锁存器模块锁存器为32位,包括一个锁存信号LK,32位的输入和输出。
4、DECL7S译码器模块因为每个计数器输出的是二进制数,所以转化到七段数码管上需要通过4-7译码器译码。
实验箱的数码管为共阳极。
需要8个数码管同时显示,所以需要8个译码器。
5、分频器模块由于实验箱只提供50MHz的信号,所以需要分频得到1Hz的信号以及不同的频率进行测试,所以需要分频器。
本设计分频器采用的是5分频器any_5、10分频器any_10和16分频器any_16。
6、MUX多路选择器模块。
由于实验箱提供的信号源有限,所以要进行测试,必须使用多路选择器来进行对不同的分频信号进行测试来验证频率计的功能是否完成。
本次设计采用的是4选1多路选择器。
7、器件连接:以上各部份器件已经完善。
需要将这些器件连接起来完成最终的设计,所以本次设计采取了元件例化,用例化语句将各个器件连接起来。
顶层文件见代码段。
8、操作过程:A建立项目B选择器件:器件系列(Device Family) Cyclone IV E器件型号(Available Devices) EP4CE115F29C7C建立设计文档,new vhdl file,并编辑保存。
D点击按键栏(或Processing菜单中)的Start compilation 进行编译E编译正确完成后,点击按键栏(或Assignments菜单中)的Pin Planner进行引脚锁定F双击Location栏,在下拉菜单中选择需要锁定的引脚(EP4C115F芯片引脚分布详见附录)G再次编译项目H连接实验箱I 程序下载点击按键栏(或Tools菜单)的Programmer,此时没有添加硬件,点击Hardware Setup 选择硬件。
在Currently selected hardware下拉菜单中选择USB-Blaster后,点击Close,回到Programmer页面。
在Hardware Setup栏中可看到USB-Blaster。
注意Mode为缺省的JTAG 接口硬件选择完毕。
点击Start开始下载。
Progress进度完成后下载完毕。
六、设计各个模块代码:1:FTCTRL模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL ISPORT ( CLKK :IN STD_LOGIC;CNT_EN,RST_CNT :OUT STD_LOGIC;LOAD: OUT STD_LOGIC );END FTCTRL;ARCHITECTURE behav of FTCTRL ISSIGNAL DIV2CLK :STD_LOGIC :='0';BEGINPROCESS (CLKK) BEGINIF CLKK 'EVENT AND CLKK='1' THEN DIV2CLK<=NOT DIV2CLK; END IF;END PROCESS;PROCESS (CLKK,DIV2CLK) BEGINIF CLKK='0' AND DIV2CLK='0' THEN RST_CNT<='1';ELSE RST_CNT<='0';END IF;END PROCESS;LOAD <=NOT DIV2CLK;CNT_EN <=DIV2CLK;END behav;2:CNT_10计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT( RST ,EN,CLK: IN STD_LOGIC;COUT :OUT STD_LOGIC;DOUT :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNT10;ARCHITECTURE BHV OF CNT10 ISBEGINPROCESS(CLK,RST,EN)V ARIABLE Q1 :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1' THEN Q1:=( OTHERS =>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF Q1<9 THEN Q1:=Q1+1;ELSE Q1:=(OTHERS=>'0');END IF;END IF;END IF;IF Q1="1001" THEN COUT<='0';ELSE COUT<='1';END IF;DOUT <= Q1;END PROCESS;END BHV;3:REG32B锁存器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT(LK:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END;ARCHITECTURE BHV OF REG32B ISBEGINPROCESS(LK,DIN) BEGINIF LK 'EVENT AND LK='1' THEN Q <=DIN; END IF;END PROCESS;END BHV;4:DECL7S译码器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECL7S ISPORT ( A :IN STD_LOGIC_VECTOR (3 DOWNTO 0);LED7S: OUT STD_LOGIC_VECTOR (6 DOWNTO 0)); END;ARCHITECTURE ONE OF DECL7S ISBEGINPROCESS(A) BEGINCASE A ISWHEN "0000" =>LED7S <="1000000"; WHEN "0001" =>LED7S <="1111001"; WHEN "0010" =>LED7S <="0100100"; WHEN "0011" =>LED7S <="0110000"; WHEN "0100" =>LED7S <="0011001"; WHEN "0101" =>LED7S <="0010010"; WHEN "0110" =>LED7S <="0000010"; WHEN "0111" =>LED7S <="1111000"; WHEN "1000" =>LED7S <="0000000"; WHEN "1001" =>LED7S <="0010000"; WHEN OTHERS => NULL;END CASE;END PROCESS;END;5:any_10 10分频器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity any_10 isport (clk10:in std_logic;k:out std_logic);end;architecture bhv of any_10 issignal s : std_logic;signal c : std_logic_vector(3 downto 0); beginprocess(clk10,c)beginif rising_edge(clk10) thenif (c="1001") then c<="0000";else c<=c+1;end if;if (c="0101") then s<=not s;elsif(c="0000") then s<=not s;end if;end if;end process;k<=s;end bhv;6:any_5 5分频器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ANY_5 isport(clk5:in std_logic;kf:out std_logic);end;architecture bhv of ANY_5 issignal c1,c2: std_logic_vector(2 downto 0);signal m1,m2: std_logic;beginprocess(clk5,c1)beginif rising_edge(clk5) thenif(c1="100") then c1<="000";else c1<=c1+1;end if;if(c1="001") then m1<=not m1;elsif(c1="011") then m1<=not m1;end if; end if; end process;process(clk5,c2) beginif falling_edge(clk5) thenif(c2="100") then c2<="000";else c2<=c2+1;end if;if(c2="001") then m2<=not m2;elsif(c2="011") then m2<=not m2;end if; end if; end process;kf<=m1 or m2;end bhv;7:any_16 16分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity any_16 isport( clk_in : in std_logic;clk_out : out std_logic);end entity any_16;architecture div1 of any_16 issignal clk_outQ : std_logic ;signal coutQ : std_logic_vector (15 downto 0);beginprocess(clk_in) beginif clk_in'event and clk_in = '1' thenif coutQ <15then coutQ <= coutQ + 1;else coutQ <= (others => '0'); end if; end if;end process;process(coutQ) beginif coutQ < 16/2then clk_outQ <= '0';else clk_outQ <= '1'; end if;end process;clk_out <= clk_outQ;end architecture div1;8:MUX多路选择器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity MUX isport(AIN,BIN,CIN,DIN,S0,S1 : in std_logic; Y : out std_logic); end entity MUX;architecture A of MUX issignal S : std_logic_vector (1 downto 0);beginS <= S1&S0;process(S1,S0) beginCASE(S) ISWHEN "00" => Y<=AIN;WHEN "01" => Y<=BIN;WHEN "10" => Y<=CIN;WHEN "11" => Y<=DIN;END CASE;end process;end architecture A;9:顶层例化代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY pinlvji ISPORT( CLK,FFIN,S0,S1:IN STD_LOGIC;QOUT:OUT STD_LOGIC_VECTOR(55 DOWNTO 0)); END ENTITY pinlvji;ARCHITECTURE BHV OF pinlvji ISCOMPONENT FTCTRLPORT ( CLKK :IN STD_LOGIC;CNT_EN,RST_CNT :OUT STD_LOGIC;LOAD: OUT STD_LOGIC );END COMPONENT ;COMPONENT REG32BPORT( LK :IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END COMPONENT ;COMPONENT CNT10PORT( RST ,EN,CLK: IN STD_LOGIC;COUT :OUT STD_LOGIC;DOUT :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT ;COMPONENT DECL7SPORT( A :IN STD_LOGIC_VECTOR (3 DOWNTO 0);LED7S: OUT STD_LOGIC_VECTOR (6 DOWNTO 0)); END COMPONENT;COMPONENT any_16port(clk_in : in std_logic;clk_out : out std_logic);END COMPONENT;COMPONENT any_5port(clk5:in std_logic;kf:out std_logic);END COMPONENT;COMPONENT any_10port (clk10:in std_logic;k:out std_logic);END COMPONENT;COMPONENT MUXport(AIN,BIN,CIN,DIN,S0,S1 : in std_logic; Y : out std_logic); END COMPONENT;SIGNAL NR,NE,NL,M1,M2,M3,M4,M5,M6,M7,M8:STD_LOGIC;SIGNAL N1,N2,N3,N4,N5,N6,N7,N8:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL L1,L2,L3,L4,L5,L6,L7,L8:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL C1,C2,C3,C4,C5,C6,C7,C8:STD_LOGIC;SIGNAL Y1,Y2,Y3,YY:STD_LOGIC;BEGINU1:FTCTRL PORT MAP(CLKK=>C8,CNT_EN=>NE,RST_CNT=>NR,LOAD=>NL); U2:REG32B PORT MAP(LK=>NL,DIN(3 DOWNTO 0)=>N1,DIN(7 DOWNTO 4)=>N2,DIN(11 DOWNTO 8)=>N3,DIN(15 DOWNTO 12)=>N4,DIN(19 DOWNTO 16)=>N5,DIN(23 DOWNTO 20)=>N6,DIN(27 DOWNTO 24)=>N7,DIN(31 DOWNTO 28)=>N8,Q(3 DOWNTO 0)=>L1,Q(7 DOWNTO 4)=>L2,Q(11 DOWNTO 8)=>L3,Q(15 DOWNTO 12)=>L4,Q(19 DOWNTO 16)=>L5,Q(23 DOWNTO 20)=>L6,Q(27 DOWNTO 24)=>L7,Q(31 DOWNTO 28)=>L8);U3:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>YY,DOUT=>N1,COUT=>M1);- U4:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M1,DOUT=>N2,COUT=>M2); U5:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M2,DOUT=>N3,COUT=>M3); U6:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M3,DOUT=>N4,COUT=>M4); U7:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M4,DOUT=>N5,COUT=>M5); U8:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M5,DOUT=>N6,COUT=>M6); U9:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M6,DOUT=>N7,COUT=>M7); U10:CNT10 PORT MAP(RST=>NR,EN=>NE,CLK=>M7,DOUT=>N8);U11:DECL7S PORT MAP(A => L1,LED7S=>QOUT(6 DOWNTO 0));U12:DECL7S PORT MAP(A => L2,LED7S=>QOUT(13 DOWNTO 7));U13:DECL7S PORT MAP(A => L3,LED7S=>QOUT(20 DOWNTO 14));U14:DECL7S PORT MAP(A => L4,LED7S=>QOUT(27 DOWNTO 21));U15:DECL7S PORT MAP(A => L5,LED7S=>QOUT(34 DOWNTO 28));U16:DECL7S PORT MAP(A => L6,LED7S=>QOUT(41 DOWNTO 35));U17:DECL7S PORT MAP(A => L7,LED7S=>QOUT(48 DOWNTO 42));U18:DECL7S PORT MAP(A => L8,LED7S=>QOUT(55 DOWNTO 49));U19:any_10 PORT MAP(CLK,C1);U20:any_10 PORT MAP(C1,C2);U21:any_10 PORT MAP(C2,C3);U22:any_10 PORT MAP(C3,C4);U23:any_10 PORT MAP(C4,C5);U24:any_10 PORT MAP(C5,C6);U25:any_10 PORT MAP(C6,C7);U26:any_5 PORT MAP(C7,C8);U27:MUX PORT MAP(Y1,Y2,Y3,FFIN,S0,S1,YY);U28:any_5 PORT MAP(FFIN,Y1);U29:any_16 PORT MAP(FFIN,Y2);U30:any_10 PORT MAP(FFIN,Y3);END ARCHITECTURE;七、总电路:1234八、管脚配置:CLOCK2_50 Input PIN_AG14 CLK CLOCK3_50 Input PIN_AG15 FFINHEX0[6] Output PIN_H22 QOUT[6] HEX0[5] Output PIN_J22 QOUT[5] HEX0[4] Output PIN_L25 QOUT[4] HEX0[3] Output PIN_L26 QOUT[3] HEX0[2] Output PIN_E17 QOUT[2] HEX0[1] Output PIN_F22 QOUT[1] HEX0[0] Output PIN_G18 QOUT[0] HEX1[6] Output PIN_U24 QOUT[13] HEX1[5] Output PIN_U23 QOUT[12] HEX1[4] Output PIN_W25 QOUT[11] HEX1[3] Output PIN_W22 QOUT[10] HEX1[2] Output PIN_W21 QOUT[9] HEX1[1] Output PIN_Y22 QOUT[8] HEX1[0] Output PIN_M24 QOUT[7] HEX2[6] Output PIN_W28 QOUT[20] HEX2[5] Output PIN_W27 QOUT[19] HEX2[4] Output PIN_Y26 QOUT[18] HEX2[3] Output PIN_W26 QOUT[17] HEX2[2] Output PIN_Y25 QOUT[16] HEX2[1] Output PIN_AA26 QOUT[15] HEX2[0] Output PIN_AA25 QOUT[14] HEX3[6] Output PIN_Y19 QOUT[27] HEX3[5] Output PIN_AF23 QOUT[26] HEX3[4] Output PIN_AD24 QOUT[25] HEX3[3] Output PIN_AA21 QOUT[24] HEX3[2] Output PIN_AB20 QOUT[23] HEX3[1] Output PIN_U21 QOUT[22] HEX3[0] Output PIN_V21 QOUT[21] HEX4[6] Output PIN_AE18 QOUT[34] HEX4[5] Output PIN_AF19 QOUT[33] HEX4[4] Output PIN_AE19 QOUT[32] HEX4[3] Output PIN_AH21 QOUT[31] HEX4[2] Output PIN_AG21 QOUT[30] HEX4[1] Output PIN_AA19 QOUT[29] HEX4[0] Output PIN_AB19 QOUT[28] HEX5[6] Output PIN_AH18 QOUT[41] HEX5[5] Output PIN_AF18 QOUT[40] HEX5[4] Output PIN_AG19 QOUT[39] HEX5[3] Output PIN_AH19 QOUT[38] HEX5[2] Output PIN_AB18 QOUT[37] HEX5[1] Output PIN_AC18 QOUT[36] HEX5[0] Output PIN_AD18 QOUT[35] HEX6[6] Output PIN_AC17 QOUT[48] HEX6[5] Output PIN_AA15 QOUT[47] HEX6[4] Output PIN_AB15 QOUT[46] HEX6[3] Output PIN_AB17 QOUT[45] HEX6[2] Output PIN_AA16 QOUT[44] HEX6[1] Output PIN_AB16 QOUT[43] HEX6[0] Output PIN_AA17 QOUT[42] HEX7[6] Output PIN_AA14 QOUT[55] HEX7[5] Output PIN_AG18 QOUT[54] HEX7[4] Output PIN_AF17 QOUT[53] HEX7[3] Output PIN_AH17 QOUT[52] HEX7[2] Output PIN_AG17 QOUT[51] HEX7[1] Output PIN_AE17 QOUT[50] HEX7[0] Output PIN_AD17 QOUT[49] SW[17] Input PIN_Y23 S0SW[16] Input PIN_Y24 S1九、设计结果:50MHz信号10分频50MHz信号16分频50Mhz信号。