VHDL环境下的12位数字频率计的设计
基于VHDL语言的数字频率计的设计方案

基于VHDL语言的数字频率计的设计方案
1.引言数字频率计是通讯设备、计算机、电子产品等生产领域不
可缺少的测量仪器。
由于硬件设计的器件增加,使设计更加复杂,可靠性变差,延迟增加,测量误差变大。
通过使用EDA技术对系统功能进行描述,运用VHDL语言,使系统简化,提高整体的性能和可靠性。
采用VHDL编程设计的数字频率计,除了被测信号的整形部分,键输入和数码显示以外,其他都在一片FPGA上实现,从而让整个系统非常精简,让其具有灵活的现场更改性,在不改变硬件电路的基础上,进一步改进提高系统的性能,使数字频率计具有高速,精确度高,可靠性强,抗干扰等优点,为数字系统进一步的集成创造了条件。
2.数字频率计的工作原理
频率测量方法中,常用的有直接测频法、倍频法和等精度测频法。
中直接测频法是依据频率的含义把被测频率信号加到闸门的输入端,只有在闸门开通时间T(以ls计)内,被测(计数)的脉冲送到十进制计数器进行计数。
直接测频法比其他两个方案更加简单方便可行,直接测频法虽然在低频段测量时误差较大,但在低频段我们可以采用直接测周法加测量,这样就可以提高测量精度了。
直接周期测量法是用被测周期信号直接控制计数门控电路,使主门开放时间等于Tx,时标为Ts的脉冲在主门开放时间进入计数器。
设在Tx期间计数值为N,可以根据Tx=N乘以Ts来算得被测信号周期。
因此本文采用低频测周,高频测频的方法来提高精度,减小误差。
3.主要功能模块的实现
该系统设计的控制器是由状态机实现,通过在不同测量档位,选择合理的时基信号频率降低误差,确定各状态转移条件和状态名,采用低频档位测周,。
用VHDL语言编写的频率计程序

用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;。
基于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的频率计设计本科毕业设计

JIU JIANG UNIVERSITY毕业论文(设计)题目基于VHDL的频率计设计英文题目 The frequency meter based on VHDL design 院系电子工程学院专业电子信息工程九江学院学士学位论文摘要数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。
它不仅可以测量正弦波、方波、三角波、尖脉冲信号,而且还可以测量它们的周期。
经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪;在电路中增加传感器,还可以做成数字脉搏仪、计价器等。
因此数字频率计在测量物理量方面应用广泛。
本设计用VHDL在CPLD器件上实现数字频率计测频系统,能够用十进制数码显示被测信号的频率,而且还能对其他多种物理量进行测量。
具有体积小、可靠性高、功耗低的特点。
采用VDHL编程设计实现的数字频率计,除被测信号的整形部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
关键字:VHDL语言;频率计;FPGA基于VHDL的频率计设计The frequency meter based on VHDL designAbstractDigital frequency meter is directly with a decimal number to display the measured signal frequency of a measuring device. It not only can measure the sine wave, square wave, triangle wave, pulse signal, but also can measure their cycle. Modified, and can measure pulse width, into a digital pulse width measuring instrument; Add the sensors in the circuit, but also can be made into digital pulse apparatus, meter, etc. So the digital frequency meter has been widely applied in measuring physical quantities. This design with VHDL on the CPLD device to realize digital frequency meter frequency measurement and control system, can use decimal digital display measured signal frequency, but also to measure a variety of other physical quantities. With the characteristics of small volume, high reliability, low power consumption. VDHL programming design was adopted to realize digital frequency meter, in addition to the measured signal of the plastic part and digital display, key input parts, all on a FPGA chip, the whole system is very compact, and with flexible field is modified.Key Words:VHDL language; Frequency meter; FPGA九江学院学士学位论文目录摘要 (I)The frequency meter based on VHDL design (II)Abstract (II)第一章绪论 (1)1.1课题的研究背景 (1)1.2频率计发展现状 (1)第2章数字频率计的要求 (3)2.1 主要技术指标 (3)2.2 课题的研究内容 (3)第3章数字频率计的方案设计 (4)3.1 基本原理 (4)3.1.1 频率计测量频率的设计原理 (4)3.1.2频率计测量频率的原理图 (4)3.2 设计流程图 (5)第4章数字频率计各模块功能介绍 (6)4.1频率控制模块的VHDL语言源程序 (6)4.1.1 频率控制模块的程序如下: (6)4.1.2 频率控制模块CNT12 (7)4.2十进制加法计数器CNT10的VHDL语言源程序 (7)4.2.1 十进制计数器的程序 (7)4.2.2 十进制计数器的顶层设计 (9)4.3系统模块的VHDL语言源程序 (9)4.3.1系统模块的设计 (9)4.3.2 系统模块的程序 (9)4.4 锁存器LOCK的VHDL语言源程序 (13)4.4.1 锁存器LOCK的程序 (13)4.4.2 锁存器LOCK顶层设计图 (14)4.5 译码模块DECODER的VHDL语言源程序 (15)4.5.1 译码模块DECODER的程序 (15)4.6四选一选择器MUX41的VHDL语言源程序 (16)4.6.1 MUX41程序 (16)4.7 四进制计数器CNT4的VHDL语言源程序 (17)基于VHDL的频率计设计4.7.1 四进制计数器CNT4的程序 (17)4.7.2 四进制计数器CNT4 (17)4.8 250分频器的VHDL语言源程序 (18)4.8.1 250分频器的程序 (18)4.8.2 250分频器 (18)九江学院学士学位论文第一章绪论在科技高度发展的今天,集成电路和计算机应用得到了高速发展。
基于VHDL的数字频率计设计

XXXXXXX学院学生毕业设计(论文)报告系别:电子与电气工程学院专业:电子信息工程技术班号:学生姓名:学生学号:设计(论文)题目:基于VHDL的数字频率计设计指导教师:设计地点:XXXXXXX学院起迄日期:20XX.9.1~20XX.10.31毕业设计(论文)任务书专业电子信息工程技术班级姓名一、课题名称:基于VHDL的数字频率计设计二、主要技术指标:1. 频率范围为:1Hz~50MHz。
2. 结果用数码管十进制显示。
3. 输入信号电压幅度为50mV~5V。
三、工作内容和要求:1. 构建大体的设计方案,并了解其内容。
2. 构建出大体的顶层原理设计框图。
3. 对底层的每个电路模块的设计,并通过软件MAX+PLUS2完成程序的编写通过。
4. 对整个原理框图进行编译并通过。
5. 对整个仿真图编译通过。
四、主要参考文献:[1] 陈必群. EDA技术与项目训练[M] ,常州:常州信息职业技术学院,2009年.[2] 王凤英. 基于FPGA的数字频率计设计与仿真[J].科技资讯,,2008,15(8):1—10[3] 谭会生,张昌凡.EDA技术及应用.西安[M]:电子科技大学出版社,2001年[4] 张凯,林伟.VHDL实例剖析[M].北京:国防工业出版社,2004年[5] 刘玉良,李玲玉,邓勇全.吉林:用EDA方法设计数字系统的灵活性[D],2002年[6] 宋万杰等.CPLD技术及其应用.[M].西安:西安电子科技大学出版社,2000年.学生(签名)年月日指导教师(签名)年月日教研室主任(签名)年月日系主任(签名)年月日毕业设计(论文)开题报告基于VHDL的数字频率计设计目录摘要Abstract第1章前言 (1)第2章数字频率计的要求 (2)2.1 主要技术指标 (2)2.2 工作内容和要求 (2)第3章数字频率计的方案设计.............................. (3)3.1 基本原理 (3)3.1.1 频率计测量频率的设计原理 (3)3.1.2 频率计测量频率的原理图 (3)3.2 设计流程图 (3)第4章数字频率计各模块功能介绍 (4)4.1 频率控制模块的VHDL语言源程序 (4)4.1.1 频率控制模块的程序 (4)4.2 十进制加法计数器CNT10的VHDL语言源程序 (5)4.2.1 十进制计数器的程序 (5)4.2.2 十进制计数器的顶层设计 (6)4.3系统模块的VHDL语言源程序 (7)4.3.1系统模块的设计 (7)4.3.2 系统模块的程序 (7)4.4 锁存器LOCK的VHDL语言源程序 (10)4.4.1 锁存器LOCK的程序 (10)4.5 译码模块DECODER的VHDL语言源程序 (11)4.5.1 译码模块DECODER的程序 (11)4.6四选一选择器MUX41的VHDL语言源程序 (12)4.6.1 MUX41程序 (12)4.7 四进制计数器CNT4的VHDL语言源程序 (13)4.7.1 四进制计数器CNT4的程序 (13)4.8 250分频器的VHDL语言源程序 (14)4.8.1 250分频器的程序 (14)第5章数字频率计仿真图 (15)5.1 频率控制模块仿真波形图 (15)5.2 十进制计数器模块仿真波形图 (15)5.3 锁存模块仿真波形图 (15)5.4 译码模块波形仿真图 (16)5.5 四选一选择器MUX41的仿真图 (16)5.6 四进制计数器CNT4的仿真图 (16)5.7 250分频器的仿真图 (17)第6章频率计顶层原理图的输入 (18)第7章下载测试 (19)第8章结束语 (20)参考文献答谢辞数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。
vhdl课程设计频率计

vhdl课程设计频率计一、课程目标知识目标:1. 掌握VHDL语言的基本语法和程序结构;2. 了解频率计的工作原理和设计方法;3. 学会使用VHDL语言设计简单的数字电路系统。
技能目标:1. 能够运用VHDL语言编写简单的程序代码;2. 能够运用所学知识设计并实现一个功能完整的频率计;3. 能够运用仿真工具对所设计的频率计进行测试和验证。
情感态度价值观目标:1. 培养学生对电子设计领域的兴趣和热情;2. 培养学生的团队协作意识和解决问题的能力;3. 培养学生严谨的科学态度和良好的工程素养。
课程性质:本课程为电子技术专业课程,旨在培养学生的硬件描述语言编程能力和电子系统设计能力。
学生特点:学生已具备一定的电子技术基础和编程能力,对数字电路和VHDL 语言有一定了解。
教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重理论与实践相结合,提高学生的实际操作能力。
在教学过程中,注重引导学生主动探究、积极实践,培养学生的创新意识和实际工程能力。
二、教学内容1. VHDL语言基础:- 数据类型、运算符和表达式;- 顺序语句和并行语句;- 进程语句和敏感列表;- 子程序和包的使用。
2. 频率计原理:- 频率计的基本工作原理;- 数字频率计的计数方法;- 频率计的误差分析和改进措施。
3. VHDL设计频率计:- 设计流程和需求分析;- 模块划分和接口设计;- 代码编写和调试;- 仿真测试和验证。
4. 教学内容的安排和进度:- 第一周:VHDL语言基础学习;- 第二周:频率计原理学习;- 第三周:VHDL设计频率计实践;- 第四周:代码调试、仿真测试和课程总结。
教材章节关联:1. VHDL语言基础:参考教材第3章;2. 频率计原理:参考教材第5章;3. VHDL设计频率计:参考教材第6章。
教学内容注重理论与实践相结合,按照教学大纲逐步推进,使学生能够系统地掌握VHDL语言和频率计的设计方法。
在教学过程中,结合实例进行分析和讲解,提高学生的实际操作能力。
基于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的频率计设计课程论文(设计)题目基于quartus的频率计的设计院系电子与信息工程学院专业电子与通信工程学生姓名学号指导教师二O一四年元月三日一、频率计的说明 (3)二、顶层原理图 (4)三、底层模块设计 (4)3.1十进制加法计数器CNT10 (4)3.2十二进制加法计数器CNT12 (5)3.3控制模块CODE (6)3.4锁存器LOCK (7)四、底层模块的仿真 (7)4.1LOCK模块的仿真结果 (7)4.2CNT12的仿真结果 (8)4.3CNT10模块的仿真结果 (8)4.4CODE模块的仿真结果 (8)五、频率计顶层原理图的输入 (9)六、频率计仿真结果 (9)总结 (10)一、频率计的说明频率就是周期性信号在单位时间(1S )内的变化次数。
频率计的作用就是测量输入信号的频率,我设计的频率计的原理是若在一定1S 的时间间隔内测得这个周期性信号的重复变化次数为N ,则其频率可表示为:f=N 。
如下图1.1所示,通过定义闸门信号为1s 后,通过统计下该时间内有多少次脉冲即可得到相应的频率。
图1.1系统测量频率的原理系统的框图如下图1.2所示,首先由时基电路产生基准信号,通过控制电路产生出1s 的闸门信号,闸门电路把1s 内截取的检测信号传递给计数器,通过计数器计数就可以得到需要测量的频率。
锁存器的作用就是为了保存当前的频率交给显示电路显示。
计数器锁存器显示电路闸门电路计数脉冲控制电路锁存信号清零信号闸门信号时基电路被测信号图1.2系统原理框图二、顶层原理图如下图2.1所示,系统顶层原理图包括CNT12、CODE 、CNT10、LOCK 、CODE 模块。
其中CNT10和CNT12分别为10和12进制计数器,CODE 则为控制模块输出清零、锁存、和闸门信号,LOCK 则为锁存模块,负责将采集的频率数值锁存起来方便显示,CODE 模块则是将二进制转换成十进制的模块。
系统中的clk1为为我们为测试时候的输入闸门信号,通过CNT12信号后模拟1s 的闸门的信号,系统输出的端口为4个QQ[3..0],这样方便系统仿真,也可以减少系统的复杂程度。
VHDL课程设计报告 频率计

目录1. 前言 (2)2. 设计要求 (2)3.整体设计 (3)4. 设计原理 (3)5. 设计程序 (3)5.1顶层文件 (3)5.2 8位是进制计数器 (4)5.3 10进制计数器 (5)5.4 测频控制电路 (6)5.5 32位锁存器及其控制器 (6)6. 引脚锁定 (8)7. 综合结果 (8)7.1 RTL电路 (8)7.2 测频控制电路 (9)7.3 8位十进制计数器 (9)7.3 32位锁存器 (9)8. 实验结果 (10)7.实验总结 (10)参考文献 (12)自适应数字频率计数器设计1. 前言传统的数字频率计一般是由分离元件搭接而成,用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差大、可靠性差。
后来随着单片机的大规模的应用, 出现了不少用单片机控制的频率测量系统。
相对于以前用分离元件搭接起来的频率测量系统, 单片机控制的频率测量系统在频率测量范围、频率测量精度和频率测量速度上都有了很大的提高。
但由于单片机工作频率的限制、单片机内部计数器位数的限制等因素, 由单片机控制的频率测量系统无法在频率测量范围、频率测量精度和频率测量速度上取得重大突破。
若再增加别的器件, 以弥补单片机的不足, 不仅会大大增加系统的复杂性, 而且不利于系统的集成化。
以E D A 工具作为开发平台,运用V H D L 语言,将使整个系统大大简化,从而提高整体的性能和可靠性。
本课题采用的是等精度数字频率计,在一片FPGA 开发板里实现了数字频率计的绝大部分功能, 它的集成度远远超过了以往的数字频率计。
又由于数字频率计最初的实现形式是用硬件描述语言写成的程序, 具有通用性和可重用性。
所以在外在的条件(如基准频率的提高, 基准频率精度的提高)的允许下,只需对源程序作很小的改动, 就可以使数字频率计的精度提高几个数量级。
同时对于频率精度要求不高的场合, 可以修改源程序, 使之可以用较小的器件实现, 从而降低系统的整体造价。
基于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语言的数字频率计设计

收稿日期:20020512基于VHDL语言的数字频率计设计Base on VHDL-based Design of the Digital Cymometer吴海洲 王文理W u Haizho u W ang W enli(河北大学电子信息工程学院 保定 071002)(Co llege of Electronic and Informa tional Eng i neeri ng,H ebei U niversity,Baodi ng,071002,China)摘 要 介绍了V HDL语言在数字频率计设计中的具体应用,说明了实现电子电路设计的自动化(EDA)过程和EDA技术在现代数字系统设计中的重要地位和作用。
关键词 V HDL EDA 自下至上 自上至下 综合 编程 下载 传统的硬件设计采用自下至上(bo ttom_up)的设计方法。
这种设计方法在系统设计的后期进行仿真和调试,一旦考虑不周,系统设计存在较大缺陷,就有可能要重新设计系统,使设计周期大大增加。
现代硬件设计利用电子设计自动化(EDA)技术,采用并行工程和自上至下(to p_dow n)的设计方法,从系统设计入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真和纠错,并用vhdl,verilog hdl等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现是专用集成电路(ASIC)。
Vhdl即超高速集成电路硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口。
vhdl对设计的描述具有相对独立性,因此设计者可以不懂硬件结构,降低了硬件电路设计难度。
以3位十进制数字频率计的设计来说明v hdl语言在现代硬件设计中的应用。
信号频率计的测量有测频法和周期测量法。
本文采用测频法,即直接计算每秒钟内信号脉冲的个数。
1 设计原理1.1 设计目标设计一个3位十进制数字频率计,其测量范围为1MHz,量程分10kHz、100kHz、1M Hz三档(3位数码管显示,最大读数分别为9.99kHz、99.9kHz、999kHz,小数点随量程变换自动移位),量程自动转换规则:(1)读数大于999时(不考虑小数点,下同),频率计处于超量程状态,此时显示器发出溢出指示(显示FFF),下次测量,量程自动增大一档。
基于VHDL的数字频率计的设计与仿真设计

基于VHDL的数字频率计的设计与仿真设计1 引言1.1 设计背景随着计算机技术和半导体技术的发展,传统的硬件电路电路设计方法已大大落后于当今技术的发展,一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,这是电子设计自动化(EDA)领域的一次重大变革。
目前,广泛使用的硬件描述语言VHDL(Very Speed Integrated Circuit Hardware Description Language)和Verilog HDL;它们先后被批准为国际标准语言。
据统计,目前在美国硅谷约有90%以上的ASIC 和FPGA采用硬件描述语言进行设计,VHDL的应用已成为当今以及未来EDA解决方案的核心,而且是复杂数字系统设计的核心。
数字频率计[1]是电子测量与仪表技术最基础的电子仪表类别之一,它是一种用十进制数字显示被测信号频率、周期、占空比的数字测量仪器,是在数字电路中的一个典型应用;实际的硬件设计的多功能数字频率计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差,随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言,将使整大大简化,提高整体个系统的性能和可靠性;它是计算机、通信设备、音频视频等科研生产领域不可缺少的测量仪器。
采用VHDL编程设计实习的多功能数字频率计,具有体积小,可靠性高,功耗低的特点;整个系统非常精简,且具有灵活的现场可更改性。
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,而且它是数字电压必不可少的部件。
当今数字频率计不仅是作为电压表,计算机,天线电广播通讯设备,工艺过程自动化装置、多种仪表仪器与家庭电器等许多电子产品中的数据信息输出显示器反映到人们眼帘。
集成数字频率计由于所用元件少、投资少、体积小、功耗低,且可靠性高、功能强、易于设计和研发,使得它具有技术上的实用性和应用的广泛性。
不论从我们用的彩色电视机、电冰箱、DVD还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL数字系统设计与测试一、设计功能要求1.用VHDL完成12位十进制数字频率计的设计及仿真。
2.频率测量范围:1Hz∼10KHz,分成两个频段,即1∼999Hz,1KHz∼10KHz,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示Hz,亮红灯表示KHz。
3.具有自动校验和测量两种功能,即能用标准时钟校验、测量精度。
4.具有超量程报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。
二、设计思路基本原理:计算单位时间内待测信号的脉冲个数。
具体方法是,使用一个频率稳定度高的频率源作为基准时钟,来对比测量其他信号的频率。
单位时间可设置为大于或小于一秒。
闸门时间越长,频率值越准确,但闸门时间越长,每次测量频率的间隔也就越长。
闸门时间越短,测量的频率值刷新越快,但将影响到测量的频率精度。
每次测量时,采用时基信号产生的闸门信号启动计数器来对输入的脉冲信号计数:闸门信号结束则将计数结果送入锁存器,然后计数器清零,准备下次计数。
三、原理图说明图1 原理框图如图1所示,按照系统功能数字频率计分为六个模块:1.测量/校验选择模块;2.测频控制信号发生器(二分频);3.计数器模块;4.送存选择、报警模块;5.锁存模块;6.扫描显示模块。
另外,还要加上LED七段译码模块。
四、代码1.测量/校验选择模块:----------------checkout.vhd----------------library ieee;use ieee.std_logic_1164.all;entity checkout isport(sel:in std_logic;meas:in std_logic;test:in std_logic;cp1:out std_logic);end checkout;architecture behavior of checkout issignal cp:std_logic;beginprocess(sel,meas,test)beginif(sel='0') then cp<=meas;else cp<=test;end if;end process;cp1<=cp;end behavior;2.测频控制信号发生器(二分频):----------------div2.vhd----------------Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity div2 isPort(ckin:in std_logic;ckout:out std_logic);end div2;architecture behavior of div2 issignal ck:std_logic:='0';beginprocess(ckin)beginif(ckin'event and ckin='1') thenck<=not ck;end if;end process;ckout<=ck;end behavior;3.计数器模块:----------------counter.vhd----------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity counter isport(ckout,cp1:in std_logic;q1,q2,q3,q4:out std_logic_vector(3 downto 0);c:out std_logic);end counter;architecture behavior of counter issignal tmp1,tmp2,tmp3,tmp4:std_logic_vector(3 downto 0); signal cp:std_logic;beginprocess(ckout,cp1) --AND电路begincp<=ckout and cp1;end process;process(cp,ckout)beginif(ckout='0') then tmp1<="0000";elsif(cp'event and cp='1') thenif(tmp1<9) then tmp1<=tmp1+1;else tmp1<="0000";end if;end if;end process;q1<=tmp1;process(tmp1(3),ckout)beginif(ckout='0') then tmp2<="0000";elsif(tmp1(3)'event and tmp1(3)='0') thenif(tmp2<9) then tmp2<=tmp2+1;else tmp2<="0000";end if;end if;end process;q2<=tmp2;process(tmp2(3),ckout)beginif(ckout='0') then tmp3<="0000";elsif(tmp2(3)'event and tmp2(3)='0') thenif(tmp3<9) then tmp3<=tmp3+1;else tmp3<="0000";end if;end if;end process;q3<=tmp3;process(tmp3(3),ckout)beginif(ckout='0') then tmp4<="0000";elsif(tmp3(3)'event and tmp3(3)='0') thenif(tmp4<9) then tmp4<=tmp4+1;else tmp4<="0000";end if;end if;end process;q4<=tmp4;process(tmp4(3))beginif(tmp4(3)'event and tmp4(3)='0') thenc<='1';end if;end process;end behavior;4.送存选择、报警模块:----------------selection.vhd----------------Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity selection isport(q1,q2,q3,q4:in std_logic_vector(3 downto 0);d1,d2,d3:out std_logic_vector(3 downto 0);c,k:in std_logic;alert:out bit;green,red:out bit);end selection;architecture behavior of selection issignal tmp1,tmp2,tmp3:std_logic_vector(3 downto 0); beginprocess(k,c,q1,q2,q3,q4)beginif k='0' thentmp1<=q1;tmp2<=q2;tmp3<=q3;green<='1';red<='0';if (q4(0)='1') thenalert<='1';end if;elsetmp1<=q2;tmp2<=q3;tmp3<=q4;green<='0';red<='1';if (c='1') thenalert<='1';end if;end if;end process;d1<=tmp1;d2<=tmp2;d3<=tmp3;end behavior;5.锁存模块:----------------latch.vhd----------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity latch isport(d1,d2,d3:in std_logic_vector(3 downto 0);ckout:in std_logic;dout1,dout2,dout3:out std_logic_vector(3 downto 0)); end latch;architecture behavior of latch issignal ld:std_logic;beginprocess(ld)beginif(ld='1')thendout1<= d1;dout2<= d2;dout3<= d3;end if;end process;ld<=not ckout;end behavior;6.扫描显示模块:----------------scan.vhd----------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity scan isport(cnt1,cnt2,cnt3:in std_logic_vector(3 downto 0);clk:in std_logic;cnt:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end scan;architecture behavior of scan issignal state:std_logic_vector(1 downto 0);beginprocess(clk)beginif rising_edge(clk) thenif(state<2) thenstate<=state+"01";elsestate<="00";end if;end if;end process;process(state)begincase state iswhen "00" => cnt<=cnt3; sel<="100";when "01" => cnt<=cnt2; sel<="010"; when "10" => cnt<=cnt1; sel<="001"; when others=> null;end case;end process;end behavior;7.LED七段译码模块:----------------dec_led.vhd---------------- library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity dec_led isport(cnt:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0)); end dec_led;architecture behavior of led isbeginprocess(cnt)begincase cnt iswhen "0000" => led<="0111111";when "0001" => led<="0000110";when "0010" => led<="1011011";when "0011" => led<="1001111";when "0100" => led<="1100110";when "0101" => led<="1101101";when "0110" => led<="1111101";when "0111" => led<="0000111";when "1000" => led<="1111111";when "1001" => led<="1101111";when others => null;end case;end process;end behavior;8.顶层模块:----------------top.vhd----------------Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity top isport(clk_1hz:in std_logic;test:in std_logic;meas:in std_logic;sel:in std_logic;k:in std_logic;clk:in std_logic;alert:out bit;green:out bit;red:out bit;led:out std_logic_vector(6 downto 0);sel_scan:out std_logic_vector(2 downto 0);dout1,dout2,dout3:out std_logic_vector(3 downto 0)); end top;architecture behavior of top iscomponent checkoutport(sel:in std_logic;meas:in std_logic;test:in std_logic;cp1:out std_logic);end component;component div2port(ckin:in std_logic;ckout:out std_logic);end component;component counterport(ckout,cp1:in std_logic;q1,q2,q3,q4:out std_logic_vector(3 downto 0);c:out std_logic);end component;component selectionport(q1,q2,q3,q4:in std_logic_vector(3 downto 0);d1,d2,d3:out std_logic_vector(3 downto 0);c,k:in std_logic;alert:out bit;green,red:out bit);end component;component latchport(d1,d2,d3:in std_logic_vector(3 downto 0);ckout:in std_logic;dout1,dout2,dout3:out std_logic_vector(3 downto 0));end component;component scanport(cnt1,cnt2,cnt3:in std_logic_vector(3 downto 0);clk:in std_logic;cnt:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end component;component dec_ledport(cnt:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end component;signal cp1,ckout,c:std_logic;signal q1,q2,q3,q4,d1,d2,d3,cnt,dout1_u,dout2_u,dout3_u:std_logic_vector(3 downto 0); begincheckout_u:checkout port map(sel=>sel,meas=>meas,test=>test,cp1=>cp1 );div2_u:div2 port map(ckin=>clk_1hz,ckout=>ckout);counter_u:counter port map(ckout=>ckout,cp1=>cp1,q1=>q1,q2=>q2,q3=>q3,q4=>q4,c=>c );selection_u:selection port map(q1=>q1,q2=>q2,q3=>q3,q4=>q4,d1=>d1,d2=>d2,d3=>d3,c=>c,k=>k,alert=>alert,green=>green,red=>red);latch_u:latch port map(d1=>d1,d2=>d2,d3=>d3,ckout=>ckout,dout1=>dout1_u,dout2=>dout2_u,dout3=>dout3_u);scan_u:scan port map(cnt1=>dout1_u,cnt2=>dout2_u,cnt3=>dout3_u,clk=>clk,cnt=>cnt,sel=>sel_scan);dec_led_u:dec_led port map(cnt=>cnt,led=>led);dout1<=dout1_u;dout2<=dout2_u;dout3<=dout3_u;end behavior;五、代码说明测量/校验选择模:通过选择信号sel来选择被测信号meas和test,输出信号cp1当sel=0时,cp1=meas;当sel=1时,cp1=test。