四位十进制频率计

合集下载

4位十进制频率计设计

4位十进制频率计设计

4位十进制频率计设计频率计是一种用来测量信号频率的仪器或设备,它广泛应用于电子、通信、无线电、音频和视频等领域。

本文将介绍一种设计思路,用于实现一个4位十进制频率计。

==设计思路==为了设计一个能够测量高精度频率的4位十进制频率计,我们需要考虑以下几个关键因素:1.输入范围:频率计应该能够适应不同频率范围的输入信号,从几赫兹到几百兆赫兹。

为了实现这一点,我们可以选择一个高性能的计数器和适当的预分频器。

2.分辨率:分辨率是指频率计能够测量的最小变化量。

较高的分辨率可以提供更精确的测量结果。

为了实现较高的分辨率,我们可以选择一个高位数的计数器以及适当的预分频器。

3.显示和输出:频率计应该能够以易读的方式显示测量结果,并可以通过输出接口连接到其他设备或系统。

基于以上要求,我们可以采用以下设计思路来实现4位十进制频率计。

1.时钟源:选择一个高稳定性的晶振作为频率计的时钟源。

晶振的稳定性对于频率计的测量精度非常重要。

2.频率测量:我们可以使用计数器和预分频器的组合来测量输入信号的频率。

计数器将输入信号进行计数,并以预定的时间间隔将计数器的值读取到显示寄存器中。

a.计数器:选择一个具有足够位数的计数器,以提供较高的分辨率。

例如,采用16位或者更高位的计数器,可以提供较高的计数能力和分辨率。

b.预分频器:使用预分频器将输入信号的频率降低到易于计数器处理的范围内。

预分频器的选择要根据输入信号的频率范围来确定。

比如,对于输入信号频率范围为几赫兹到几百兆赫兹,我们可以选择一个可设置不同分频系数的预分频器。

c.计数时间:选择一个适当的计数时间来保证测量结果的准确性。

较短的计数时间会降低分辨率,较长的计数时间会增加测量误差。

通过权衡这两者,我们可以设定一个合适的计数时间。

3.显示和输出:在实现频率计的显示和输出功能时,我们可以采用以下几种方式:a.LED数码管:选择一个4位数码管显示器来显示频率测量结果。

设计一个驱动电路,将显示寄存器中的计数值转换为相应的数码管显示。

试验54位十进制频率计设计

试验54位十进制频率计设计

引脚 PIN_Y24 PIN_AB25 PIN_AB26 PIN_AC26 PIN_AC25 PIN_V22 PIN_AB23 PIN_W24 PIN_U22 PIN_Y25 PIN_Y26 PIN_AA26 PIN_AA25 PIN_Y23
引脚锁定
引脚 PIN_V13 PIN_V14 PIN_AE11 PIN_AD11 PIN_AC12 PIN_AB12 PIN_AF10 PIN_AB24 PIN_AA23 PIN_AA24 PIN_Y22 PIN_W21 PIN_V21 PIN_V20 PIN_AD12 PIN_D13
信号 HEX2[6] HEX2[5] HEX2[4] HEX2[3] HEX2[2] HEX2[1] HEX2[0] HEX3[6] HEX3[5] HEX3[4] HEX3[3] HEX3[2] HEX3[1] HEX3[0]
• reg4 .vhd 【例5-3】锁存器,将频率计的每位数 锁存后输出。
输入端口:
顶层
• F_in为待测频率输入端口
• CLK为1Hz的基准时钟信号,经过处理后可以产生用于自动测 频所需的计数允许、锁存数据和清零三个控制信号。
• 测试时:这两个信号可以由一个分频模块同时产生,也可单独 编写。
输出端口:
以作为扩大测量范围的接口。
给定程序分析
• Cnt10d.vhd 【例5-1】10进制计数器,用于计算 分频结果,并连接数码管显示。
• TESTCTL .vhd 【例5-2】--测频控制器,使得频 率计能自动测频,输出信号分别是:
– CNT_EN,连接计数器,控制计数器的使能端; – RST_CNT,连接计数器,控制计数器的清零端 – LOAD ,连接锁存器,锁存器的锁存信号

四位10进制频率计

四位10进制频率计

VHDL设计1. 十进制计数器设计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 CQ1 :INTEGER RANGE 0 TO 15;BEGINPROCESS(CLK, CLR, ENA)BEGINIF CLR='1' THEN CQ1<=0;ELSIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF CQ1< 9 THEN CQ1<= CQ1+1;ELSE CQ1<= 0;END IF;END IF;END IF;END PROCESS;PROCESS (CQ1)BEGINIF CQ1 = 9 THEN CARRY_OUT<='1';ELSE CARRY_OUT<='0';END IF;END PROCESS;CQ<= CQ1;END behav ;2. 测频时序控制器设计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;3. 锁存器设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (Load : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END REG16B;ARCHITECTURE behav OF REG16B ISBEGINPROCESS (Load,DIN)BEGINIF Load'EVENT AND Load='1' THEN DOUT<=DIN;END IF;END PROCESS;END behav ;4.频率计顶层文件设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST IS(定义实体文件名是FREQTEST)PORT(CLK :IN STD_LOGIC;FSIN :IN STD_LOGIC;DOUT :OUT STD_LOGIC_VECTOR(15 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 REG16BPORT( Load : IN std_logic;din : IN std_logic_vector(15 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END COMPONENT;SIGNAL Load1,TSTEN1, CLR_CNT1 : STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(15 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 : REG16B 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(7DOWNTO 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));END struc;。

四位十进制频率计的设计

四位十进制频率计的设计

十进制计 数模块
4位十进制频率计的外部接口
四位十进制频率计的端口说明
F1Hz:给tctl aa模块提供1Hz的频率输入。 Fin :被测频率输入。 Scan_clk:给scan_led模块提供扫描频率输 入(建议为200Hz,以方便计数)。 Bt[1..0]:片选信号输出。 Sg[6..0]:译码信号输出。 Cout:进位输出。
当系统正常工作时外界提供的1hz的输入信号经过测频控制信号发生器进行信号的变换产生计数信号被测的信号通过信号整形电路产生同频率的矩形波送入计数模块计数模块对输入的矩形波进行计数将计数结果送入锁存器中保证系统可以稳定的显示数据显示译码器将二进制表示的计数结果转换成相应的能够在八段数码显示管上可以显示的十进制结果
5,TCTL时序仿真 , 时序仿真
(8) 分析波形
Tctl 的波形仿真
6,完成reg16_2129源程序的输入,并进行编译, ,完成 源程序的输入, 源程序的输入 并进行编译, 如果编译有错误,进行修改后,再编译,直到无误为止。 如果编译有错误,进EG16—2129时序仿真 , 时序仿
脉冲发生器电路、测频控制信号发生器电路、计 数模块电路、锁存器、译码驱动电路
各部分的原理
TESTCTL为测频控制信号发生器。TESTCTL的计数使能信 号TSTEN能产生一个1 s宽的周期信号,并对频率计的每 一计数器CNT10的ENA使能端进行同步控制:当TSTEN高 电平时允许计数、低电平时停止计数 REG32B为锁存器。在信号Load的上升沿时,立即对模块 的输入口的数据锁存到REG32B的内部,并由REG32B的输 出端输出,然后,七段译码器可以译码输出。在这里使 用了锁存器,好处是可以稳定显示数据,不会由于周期 性的清零信号而不断闪烁。 CNT10为十进制计数器。有一时钟使能输入端ENA,用于 锁定计数值。当高电平时允许计数,低电平时禁止计数。 SEVYM为七段译码显示驱动电路,可以将频率计数的结 果译成能在数码管上显示相对应的阿拉伯数字,便于读 取测量的结果。

4位十进制频率计数器的设计(EDA论文)

4位十进制频率计数器的设计(EDA论文)

4位十进制频率计数器的设计摘要:生活中经常会用到频率计数器,我们习惯的是十进制的计数器,而且一位或两位的计数器又不能满足人们的日常需求,所以经常会需要多位的十进制频率计数器。

在Quartus II 中,人们可以使用VHDL语言或者Verilog HDL语言来设计自己所需要的计数器。

并且Quartus II 中还可以对所设计的器件进行时序仿真,除此之外,Quartus II 还可以进行元件的封装,以便以后用到。

关键词:VHDL语言、Quartus II、4位十进制频率计数器、编译、时序仿真The Design of Four Decimal FrequencyCounterAbstract : We often use frequency counter in our life , we used is the decimal counter , and one or two counters can’t meet the demand of people’s dailly life , so we often need more than a decimal frequency counter . In the Quartus II , people can use VHDL or Verilog HDL language to design their own need to counter . And Quartus II can in timing simulation of the designed device , in addition , the Quartus II can be components encapsulation , for later use.Key words :VHDL language , Quartus II , Four Decimal Frequency Counter , compole , timing simulation一、EDA设计简介EDA,英文全称为Electronic Design Automation , 它是现代电子设计技术的核心,它依赖于功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL (Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

四位十进制频率计

四位十进制频率计

四位十进制频率计EDA实验报告实验四四位十进制频率计实验目的1.掌握四位十进制频率计的工作原理并能够用virlog语言编写代码,进一步熟悉EDA6000实验箱的使用方法。

2.进一步熟悉quartusII建立程序编译、仿真及下载的操作流程并学会四位十进制频率计的Verilog硬件设计。

3.代码modulefrecounter(clk,uclk,ge_bit,shi_bit,bai_bit,qian_bit);input clk,uclk;output [3:0] ge_bit,shi_bit,bai_bit,qian_bit;reg [3:0]ge_bit,shi_bit,bai_bit,qian_bit;reg div,en,load,cls;reg [3:0] A,B,C,D;always @(negedge clk)begin div=~div;en=div;load=~en;cls=clk&load;endalways @(posedge uclk or posedge cls)beginif(cls) begin A=4'd0;B=4'd0;C=4'd0;D=4'd0; endelse if(en) begin A=A+4'd1;if(A==4'D10) begin A=4'd0;B=B+4'd1; endif(B==4'D10) begin B=4'd0;C=C+4'd1; endif(C==4'D10) begin C=4'd0;D=D+4'd1; endendendalways @(posedge load)beginge_bit=A;shi_bit=B;bai_bit=C;qian_bit=D;endendmodule实验步骤1.新建Verilog工程,编写代码并保存至与模块名对应的文件夹。

4位10进制数字频率计

重庆交通大学信息科学与工程学院综合性实验报告姓名:学号班级:专业级班实验项目名称:四位十进制频率计设计实验项目性质:综合性设计实验实验所属课程: EDA技术实验室(中心):现代电子实验中心指导教师:实验完成时间: 2011 年 10月 29日一、课题任务与要求设计一个数字频率计,能用数码管动态当前输入频率,并能达到以下要求:1、四位十进制频率计2、显示范围1Hz~10KHz3、显示时间不少于1S4、具有记忆显示的功能,即在测量过程中不刷新数据,等结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。

二、设计系统的概述1、分析设计要求可知:此系统需用到多路时钟信号,因此在设计时首先考虑之中信号的引入,本设计中从外部输入频率为1Hz的CLK1Hz信号,然后通过编程将此信号进行处理得到所需的多路信号:en是使能信号、l ock是锁存信号、rst是复位信号,它们的基本时序关系如下:2、设计一个4位的十进制加法计数器,用来统计1s内输入的外部脉冲个数(单位时间内的输入脉冲数即输入信号的频率)。

3、为了能够使数码管上的示数保持至少1s还需要配合lock锁存信号设计一个锁存器,在锁存信号有效期间,数码管的示数保持不变。

4、当完成了计数之后还需对4位十进制计数器的输出信号进行译码输出,在此设计了一个7段数码管的译码显示电路。

三、单元电路的设计与分析(重点描述自己设计部分)总体设计电路框图:1、时钟控制电路(clock)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport(clk1Hz:in std_logic;rst,en,lock:out std_logic);end entity clock;architecture one of clock issignal div2:std_logic;beginp1:process(clk1Hz)beginif(clk1Hz'event and clk1Hz='1') thendiv2<=not div2;end if;end process p1;p2:process(clk1Hz,div2)beginif clk1Hz='0' and div2='0' then rst<='1';else rst<='0';end if;end process p2;en<=div2;lock<=not div2;end one;2、一位的十进制计数电路(cnt10)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,rst,en:in std_logic;count:out std_logic;q:out std_logic_vector(3 downto 0));end entity cnt10;architecture one of cnt10 issignal temp:std_logic_vector(3 downto 0);beginprocess(clk,rst,en)beginif rst='1' then temp<="0000";elsif(clk'event and clk='1')and en='1' thenif temp="1001" then temp<="0000";count<='1';else temp<=temp+1;count<='0';end if;end if;end process;q<=temp;end one;3、四位十进制计数器电路(cnt4_10)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt4_10 isport(clkin,rst,en:in std_logic;count:out std_logic;q:out std_logic_vector(15 downto 0));end entity cnt4_10;architecture one of cnt4_10 iscomponent cnt10 isport(clk,rst,en:in std_logic;count:out std_logic;q:out std_logic_vector(3 downto 0));end component;signal temp:std_logic_vector(2 downto 0);beginu1:cnt10 port map(clkin,rst,en,temp(0),q(3 downto 0));u2:cnt10 port map(temp(0),rst,en,temp(1),q(7 downto 4));u3:cnt10 port map(temp(1),rst,en,temp(2),q(11 downto 8));u4:cnt10 port map(temp(2),rst,en,count,q(15 downto 12));end architecture one;4、锁存器电路(reg16)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16 isport(lockin:in std_logic;din:in std_logic_vector(15 downto 0);dout:out std_logic_vector(15 downto 0));end entity reg16;architecture one of reg16 isbeginprocess(lockin,din)beginif lockin'event and lockin='1'then dout<=din;end if;end process;end architecture one;5、译码显示电路(shuma)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shuma isport(din:in std_logic_vector(15 downto 0);dout:out std_logic_vector(27 downto 0));end entity shuma;architecture one of shuma isbeginprocess(din)beginfor i in 0 to 3 loopcase din((4*i+3) downto (4*i)) iswhen "0000"=>dout((7*i+6) downto (7*i))<="0111111";when "0001"=>dout((7*i+6) downto (7*i))<="0000110";when "0010"=>dout((7*i+6) downto (7*i))<="1011011";when "0011"=>dout((7*i+6) downto (7*i))<="1001111";when "0100"=>dout((7*i+6) downto (7*i))<="1100110";when "0101"=>dout((7*i+6) downto (7*i))<="1101101";when "0110"=>dout((7*i+6) downto (7*i))<="1111101";when "0111"=>dout((7*i+6) downto (7*i))<="0000111";when "1000"=>dout((7*i+6) downto (7*i))<="1111111";when "1001"=>dout((7*i+6) downto (7*i))<="1101111";when others=>NULL;end case;end loop;end process;end architecture one;6、元件例化总电路library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity freq_counter isport(clockin,freq:in std_logic;cout:out std_logic;dout:out std_logic_vector(27 downto 0));end entity freq_counter;architecture one of freq_counter iscomponent clock isport(clk1Hz:in std_logic;rst,en,lock:out std_logic);end component clock;component cnt4_10 isport(clkin,rst,en:in std_logic;count:out std_logic;q:out std_logic_vector(15 downto 0));end component cnt4_10;component reg16 isport(lockin:in std_logic;din:in std_logic_vector(15 downto 0);dout:out std_logic_vector(15 downto 0));end component reg16;component shuma isport(din:in std_logic_vector(15 downto 0);dout:out std_logic_vector(27 downto 0));end component shuma;signal temp0,temp1,temp2:std_logic;signal temp3,temp4:std_logic_vector(15 downto 0);beginu1:clock port map(freq,temp0,temp1,temp2);u2:cnt4_10 port map(clockin,temp0,temp1,cout,temp3);u3:reg16 port map(temp2,temp3,temp4);u4:shuma port map(temp4,dout);end architecture one;四、电路的仿真、结果及分析当程序设计完成之后,新建波形文件仿真如下:其中:freq表示外部提供的基准时钟信号,频率为1Hz;clockin表示外部待测信号频率,输入值范围0~9999Hz;cout表示计数溢出标志,当计数器完成一轮计数后自动置1;dout表示输出信号,总共28路(每7路接一个数码管,总共可以接4个数码管),分别对应显示输入信号频率的千、百、十、个位从图中可以看出:当clockin输入值为1000Hz时,dout输出0000110011111101111110111111即:1000当clockin输入值为500Hz时,dout输出0111111110110101111110111111即:0500当clockin输入值为200Hz时,dout输出0111111101101101111110111111即:0200输出结果是正确的,和输入应该得到的结果一致,表明程序设计基本没有问题。

4位的十进制的数字频率计

--VHDL 频率计--一个有效位为4位的十进制的数字频率计。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity freq isport(fsin:in std_logic;--被测信号clk:in std_logic;--基准时间,1Hzreset : in std_logic;show:out std_logic_vector(6 downto 0);--数码管段码输出row:out std_logic_vector(3 downto 0));--数码管选择信号end freq;architecture one of freq issignal test_en:std_logic;signal clear:std_logic;--复位信号signal data:std_logic_vector(15 downto 0);--bcdsignal data_in:std_logic_vector(3 downto 0);--单个数码管显示signal row_in:std_logic_vector(3 downto 0);--数码管的选择beginprocess(clk)beginif clk'event and clk='1' thentest_en<=not test_en;end if;end process;clear<=not clk and not test_en;--定义clear信号process(fsin)beginif reset= '1' thenrow_in <= "0001";elsif fsin'event and fsin='1' thenif row_in="0001" then row_in<="0010";elsif row_in="0010" then row_in<="0100";elsif row_in="0100" then row_in<="1000";elsif row_in="1000" then row_in<="0001";end if;end if;end process;--在1秒钟时间内对被测脉冲信号计数process(fsin,test_en)beginif clear='1' then data<="00000";elsif fsin'event and fsin='1' thenif test_en='1' thenif data(15 downto 0)="11001" then data<=data+"00111";--9999->0000elsif data(11 downto 0)="1" then data<=data+"1";--999->1000elsif data(7 downto 0)="10011001" then data<=data+"01100111"; --99->100elsif data(3 downto 0)="1001" then data<=data+"0111";--9->10else data<=data+'1';end if;end if;end if;end process;--根据所选数码管显示数据process(row_in)beginrow(3 downto 0)<=row_in(3 downto 0);case row_in iswhen "0001"=>data_in<=data(3 downto 0);when "0010"=>data_in<=data(7 downto 4);when "0100"=>data_in<=data(11 downto 8);when "1000"=>data_in<=data(15 downto 12);when others=>data_in<="XXXX";end case;end process;--根据欲显示的数据配置数码管process(data_in)begincase data_in iswhen "0000"=>show<="0111111";when "0001"=>show<="0000110";when "0010"=>show<="1011011";when "0011"=>show<="1001111";when "0100"=>show<="1100110";when "0101"=>show<="1101101";when "0110"=>show<="1111101";when "0111"=>show<="0000111";when "1000"=>show<="1111111";when "1001"=>show<="1101111";when others=>show<="1000110";end case;end process;end one;--------------------------------------------------------------------实验要求:设计一个有效位为4位的十进制的数字频率计。

四位十进制频率计

Hefei University项目报告项目名称:4位十进制频率计作者姓名:作者姓名:作者姓名:一、实验目的1、设计4位十进制频率计,理解用VHDL表达和设计电路的方法;2、掌握4位十进制频率计的分析和测试方法;3、学习较复杂的数组系统设计方法。

二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。

这3个信号可以由一个测频控制信号发生器产生,它的设计要求是,TESTCTL的计数使能信号CNT_EN 能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT 对计数器进行清零,为下1秒钟的计数操作作准备。

在Quartus II上完成4位计数器、测频控制器的设计以及4位锁存器的设计,根据这三个设计完成4位十进制频率计的设计并验证。

编译、综合和适配频率计顶层设计文件,并编程下载进目标器件中。

建议选实验电路模式0,4个数码管显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256Hz……或更高;1Hz测频控制信号F1HZ可由clock2输入。

三、实验内容1、总体设计方案根据频率计的定义和频率测量的基本原理:频率计即是指单位时间 1 秒内输入脉冲个数并显示出来的电路。

因为要显示被测信号的,只要限制计数器的计数过程为一秒则计数器的结果即为被测信号的频率。

频率值为:Fx=N,N 为一秒内计数器所计脉冲个数。

4位十进制频率计设计

4位十进制频率计设计一、实验目的设计4位十进制频率计。

学习较复杂的数字系统设计方法。

二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作准备。

这3个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。

其工作时序波形如图5-2。

图5-1 4位十进制频率计顶层文件原理图图5-2 频率计测频控制器TESTCTL测控时序图实验步骤设计测频控制器1、为本项设计建立文件夹2、输入设计项目和存盘3、将设计项目设置成工程文件将测频控制器设置为工程文件。

4、选择目标器件并编译如果发现有错,排除错误后再次编译。

5、时序仿真接下来应该测试设计项目的正确性,即逻辑仿真,具体步骤如下:(1)建立波形文件。

用输入总线的方式给出输入信号仿真数据。

(2)输入信号节点。

(3)设置波形参量。

(4)设定仿真时间宽度。

(5)加上输入信号。

(6)波形文件存盘。

(7)运行仿真器。

(8)观察分析波形。

对照测频控制器工作原理,观察显示的时序波形是否正确。

(9)包装元件入库。

设计4位锁存器对照设计测频控制器的实验步骤,设计4位锁存器。

设计分频器设计顶层文件。

1、输入设计项目和存盘根据4位十进制频率计顶层文件原理图。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hefei University
项目报告
项目名称:4位十进制频率计
作者姓名:
作者姓名:
作者姓名:
一、实验目的
1、设计4位十进制频率计,理解用VHDL表达和设计电路的方法;
2、掌握4位十进制频率计的分析和测试方法;
3、学习较复杂的数组系统设计方法。

二、实验原理
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。

这3个信号可以由一个测频控制信号发生器产生,它的设计要求是,TESTCTL的计数使能信号CNT_EN 能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT 对计数器进行清零,为下1秒钟的计数操作作准备。

在Quartus II上完成4位计数器、测频控制器的设计以及4位锁存器的设计,根据这三个设计完成4位十进制频率计的设计并验证。

编译、综合和适配频率计顶层设计文件,并编程下载进目标器件中。

建议选实验电路模式0,4个数码管显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256Hz……或更高;1Hz测频控制信号F1HZ可由clock2输入。

三、实验内容
1、总体设计方案
根据频率计的定义和频率测量的基本原理:频率计即是指单位时间 1 秒内输入脉冲个数并显示出来的电路。

因为要显示被测信号的,只要限制计数器的计数过程为一秒则计数器的结果即为被测信号的频率。

频率值为:Fx=N,N 为一秒内计数器所计脉冲个数。

因为是 4 位十进制频率计计数器是模为 9999 的十进制加法计数器,可以由 4 个模为 10 的十进制计数器级联而成,所以可以显示的频率范围是 1-9999HZ。

因此,频率计的功能分割成四个模块:计数器,测
频控制信号发生器和输出锁存器,各个模块均用 VHDL 语言描述。

待测信号的转速必须有一个脉宽为 1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值锁入锁存器的锁存信号,并有为下一测频计数周期作准备的计数器清零信号。

这三个信号可以由一个测频控制信号发生器产生。

当系统正常工作时,标准信号提供频率为 1 Hz 的输入信号,经过测频控制信号发生器进行信号变换,产生计数信号,将被测信号当做脉冲信号送入计数器模块,计数模块对输入的脉冲个数进行计数数结束后,将计数结果送入锁存器中,保证系统可以稳定显示数据,计数结果能够显示在七段数码显示管上。

根据系统设计要求,要实现一个4 位十进制数字频率计,则要设计测频控制信号发生器模块 test、四位十进制加法计数器模块 cnt4、reg4 锁存器模块, 顶层设计原理框图如下图所示。

图5-1 4位十进制频率计顶层文件原理图
2、测频计设计
VHDL语言描述为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY test IS
PORT(CLKK:IN STD_LOGIC;--1Hz
CNT_EN,RST_CNT,LOAD:OUT STD_LOGIC);
END test;
ARCHITECTURE behav OF test IS
SIGNAL DIV2CLK:STD_LOGIC;
BEGIN
PROCESS(CLKK)
BEGIN
IF CLKK'EVENT AND CLKK='1' THEN DIV2CLK<=NOT DIV2CLK;
END IF;
END PROCESS;
PrOCESS (CLKK,DIV2CLK)
BEGIN
IF 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;
仿真波形如图5-2所示:
图5-2 频率计测频控制器TESTCTL测控时序图3、十位计数器设计
VHDL语言描述为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt4 IS
PORT( CLK:IN STD_LOGIC;
RST,ENA:IN STD_LOGIC;
COUT:OUT STD_LOGIC;
OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END cnt4;
ARCHITECTURE behv OF cnt4 IS
BEGIN
PROCESS(RST,ENA,CLK)
V ARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='1' THEN CQI:=(OTHERS =>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF ENA='1' THEN
IF CQI<9 THEN CQI:=CQI+1;
ELSE CQI:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF CQI=9 THEN COUT<='1';
ELSE COUT<='0';
END IF;
OUTY<=CQI;
END PROCESS;
END behv;
波形图如图5-3所示:
图5-3 十进制波形图
4、4位锁存器设计
VHDL语言描述为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY reg4 IS
PORT( LOAD:IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END reg4;
ARCHITECTURE behav OF reg4 IS
BEGIN
PROCESS(LOAD,DIN)
BEGIN
IF LOAD'EVENT AND LOAD='1'THEN DOUT<=DIN;
END IF;
END PROCESS;
END behav;
仿真波形如图5-4所示:
图5-4 4位锁存器仿真波形
5、4位十进制频率计波形仿真如图5-5所示
图5-5 4位十进制频率计仿真波形
6、引脚锁定
我们选择了实验电路模式0,4个数码管(数码4-1)显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256Hz或更高;1HZ测频控制信号F1HZ 可有clock2输入。

引脚锁定截图如下
6.实验结果
数码管显示的频率与clock0待测频率相同。

四、实验小结
通过本次实验,初步了解四位频率计的基本原理,也通过对四位十进制频率计的编译和仿真,加深对VHDL语言表达和设计电路的运用,进一步熟悉了VHDL设计技术。

相关文档
最新文档