四位十进制频率计

合集下载

电子课程设四位十进制计数器

电子课程设四位十进制计数器

目录一、设计任务与要求 (2)二、总体框图 (2)三、选择器件 (3)四、功能模块 (3)五、总体设计电路 (12)四位十进制频率计一、设计任务与要求1、用大规模可编程器件设计一个数字频率计,主要技术指标如下:1)频率测量范围:1Hz~10kHz。

2)数字显示位数:4位数字显示。

3)测量时间:t<=1.5s。

2、利用设计软件对EP1C12Q240C8器件进行设计输入设计仿真及器件编程,使其具备要求的逻辑功能。

3、计算参数,安装、调试电路。

4、画出完整电路图,写出设计总结报告。

5、选作内容:用数字频率计测量信号周期。

二、总体框图模块功能1)计数器:实现十进制计数功能。

2)锁存器:锁存信号。

3)频率信号控制发生器:输入端clk收到1Hz信号后,其输出端testen控制各个计数器的使能,clr_cnt控制各个计数器的清零,load控制锁存器内数据的输出。

4)译码驱动电路:将锁存器输出的BCD码译码,译码后输送到译码显示器件。

5)数码管显示:显示待测信号的频率值。

设计思路频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。

这就要求testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端ena进行同步控制。

当tsten为高电平"1"时,允许计数;为低电平"0"时停止计数,并保持其计数结果。

在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1 秒种的计数值锁存进16位锁存器reg16b中。

锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1 秒的计数操作做准备,然后由数码管显示出来。

三、选择器件电路中的所有器件都是VHDL语言设计生成的,所以无通用常规器件。

四、功能模块分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk_in:IN std_logic;div_outb,div_outc:out std_logic);end div;ARCHITECTURE a of div issignal fre_nb:integer range 0 to 25000000;signal fre_nc:integer range 0 to 100000;signal clk_tmpb:std_logic;signal clk_tmpc:std_logic;begindiv_outb<=clk_tmpb;div_outc<=clk_tmpc;process(clk_in) beginif falling_edge(clk_in) then if fre_nb>24999999 then fre_nb<=0;clk_tmpb<=not clk_tmpb; elsefre_nb<=fre_nb+1; end if;if fre_nc>99999 then fre_nc<=0;clk_tmpc<=not clk_tmpc; elsefre_nc<=fre_nc+1; end if; end if;end process;end a;逻辑功能:将50MH 分频为单位脉冲1Hz 和扫描频率。

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

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);--数码管的选择begin--分频,得到0.5Hz信号test_enprocess(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<="0000000000000000";elsif fsin'event and fsin='1' thenif test_en='1' thenif data(15 downto 0)="1001100110011001" then data<=data+"0110011001100111"; --9999->0000elsif data(11 downto 0)="100110011001" then data<=data+"011001100111";--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位的十进制的数字频率计。

4位十进制频率计设计

4位十进制频率计设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四位十进制频率计

四位十进制频率计

四位十进制频率计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位十进制频率计的外部接口
四位十进制频率计的端口说明
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位10进制数字频率计

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位十进制频率计设计

【实验四】4位十进制频率计设计

实验原理 根据频率的定义和频率测量的基本原理,测定信 号的频率必须有一个脉宽为1秒的对输入信号脉 冲计数允许的信号;1秒计数结束后,计数值锁 入锁存器的锁存信号和为下一测频计数周期作准 备的计数器清0信号。这清0个信号可以由一个 测频控制信号发生器产生,即图4-1中的 TESTCTL,它的设计要求是,TESTCTL的计数 使能信号CNT_EN能产生一个1秒脉宽的周期信 号,并对频率计的每一计数器CNT10的ENA使
实验原理 能端进行同步控数。在停止计数期间,首先需要一个锁存信号 LOAD的上跳沿将计数器在前1秒钟的计数值锁 存进各锁存器REG4B中,并由外部的7段译码器 译出,显示计数值。设置锁存器的好处是,显示 的数据稳定,不会由于周期性的清零信号而不断 闪烁。
这清0个信号可以由一个测频控制信号发生器产生即图41中的testctl它的设计要求是testctl的计数使能信号cnten能产生一个1秒脉宽的周期信号并对频率计的每一计数器cnt10的ena使实验原理能端进行同步控制
EDA实验
【实验四】4位十进制频率计设计
实验目的

设计四位十进制频率计。 学习复杂数字系统的设计方法。
实验内容
实验结果与数据记录 1. 4位十进制频率计工作波形
实验要求 2. 编译、综合和适配频率计顶层设计文件,并编 程下载到目标器件EPF10K10中。建议选实验电 路模式0,数码管4-1(PIO31-PIO16)显示测 频输出;待测频率输入FIN由clock0输入,频率 可选4Hz、256HZ . . .或更高;1HZ测频控制信 号F1HZ由clock2输入(用电路帽选选1Hz)。
实验原理 锁存信号之后,必须有一清零信号RST_CNT对 计数器进行清零,为下1秒钟的计数操作作准备。 其工作时序波形如图4-2。

4位十进制频率计设计

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位十进制频率计顶层文件原理图。

FPGA—4位十进制频率计

FPGA—4位十进制频率计

FPGA—4位十进制频率计4位十进制频率计一、设计目的用Verilog HDL语言设计一个能实现自动测频的4位十进制频率计。

1)测量范围: 1Hz~9999Hz2)测量的数值通过4个数码管显示3)频率超过9999Hz时,溢出指示灯亮,可以作为扩大测量范围的接口。

二、设计原理1、若某一信号在T秒时间里重复变化了N 次,则根据频率的定义可知该信号的频率fs 为:fs=N/T。

2、当T=1s时,N就是测得的频率。

3、根据以上所提出的方法,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器复位信号。

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

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

在停止计数期间,每0.01ms锁存器进行一次锁存,并由数码管显示计数值。

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

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

图3 芯片信息配置由于我们所采用的板子为RCXQ208_V5 FPGA开发板,所以配置如图所示。

1、新建各个分模块并输入代码。

图4 建立VHDL文件2、建立顶层文件为原理图型,例化各个模块并连接。

图5 建立VHDL文件3、对设计进行综合,如果出现错误,根据提示改正。

图6 综合黄色感叹符号代表有警告,有些警告可以忽略,绿色小勾表示综合成功。

4、建立测试文件并进行仿真,验证设计。

图7 建立激励文件之后一直点击确认即可。

为了结合我们的下载板子的时钟信号,在测试文件中设置时钟单位为10ns,精度为1ps,如图:图8 设置时钟单位仿真文件应验证个端口的正确性。

四位十进制频率计(EDA)

四位十进制频率计(EDA)

四位十进制频率计设计报告目录一、题目分析 (3)1、设计原理 (3)二、设计方案 (3)1、顶层实体描述 (3)2、模块划分 (4)3、模块描述 (4)4、顶层电路图 (5)三、方案实现 (5)1、各模块仿真及描述 (5)2、顶层电路仿真及描述 (6)四、硬件测试及说明 (7)五、结论 (7)六、课程总结 (7)七、附录(源程序,加中文注释) (8)1、频率计顶层文件 (8)2、测频控制电路 (9)3、16位锁存器 (9)4、16位计数器 (10)5、十进制加法计数器 (10)一、题目分析1、设计原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1S的输入信号脉冲计数允许的信号;1S计数结束后,计数值被锁入锁存器,计数器清零,为下一测评计数周期做好准备。

测频控制信号可以由一个独立的发生器来产生。

2、设计要求:FTCTRL的计数使能信号CNT_EN能产生一个1S脉宽的周期信号,并对频率计中的16位计数器couter16D的ENABL使能端进行同步控制。

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

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

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

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

3、实现功能当输入一个待测频率时,在测频信号的控制下,可以通过外部的7段译码器显示出其频率值。

二、设计方案1、顶层实体描述图1:四位十进制频率计顶层实体图2:测频控制电路实体图3: 16位计数器实体图4: 16位锁存器实体图5:十进制加法计数器实体2、模块划分1S的输入信号脉冲计数允许的信号;然后需要一个16位计数器进行计数,由于我们设计的是四位的十进制的频率计,所以还需要用4个十进制的加法计数器来构成所需要的计数器;在技计数完成之后还需要一个锁存器将计数值进行锁存,从而使显示的数值稳定。

四位十进制频率计数器

四位十进制频率计数器

四位十进制频率计数器一实验目的:设计四位十进制频率计,学习复杂的数字系统设计方法。

二实验原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1s 的输入信号脉冲计数允许的信号,1s计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期做好准备,测频控制信号可以有一个独立的发生器来产生。

三实验内容:(1)打开quartus,在菜单中选择new,然后点vhdl,在编辑窗口输入vhdl代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX10 ISPORT (clk1Hz : IN STD_LOGIC; -- 1 Hz clock -- IO30(P125)uclk : IN STD_LOGIC; -- user clock input -- IO31(P55 )led0 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO11..IO08 (P59, P51, P49, P48)led1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO15..IO12 (P64, P63, P62, P60)led2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO19..IO16 (P69, P68, P67, P65)led3 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO23..IO20 (P79, P73, P72, P70)p_cnt_en : OUT STD_LOGIC; -- IO01(P38)p_rst_cnt: OUT STD_LOGIC; -- IO00(P37)p_load : OUT STD_LOGIC -- IO02(P39));END EX10;ARCHITECTURE behv OF EX10 ISCOMPONENT cnt10PORT (clk : IN STD_LOGIC;rst : IN STD_LOGIC;ena : IN STD_LOGIC;outy: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout: OUT STD_LOGIC);END COMPONENT;COMPONENT reg4bPORT (load: IN STD_LOGIC;din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT testctlPORT (clkk : IN STD_LOGIC;cnt_en : OUT STD_LOGIC;rst_cnt: OUT STD_LOGIC;load : OUT STD_LOGIC);END COMPONENT;SIGNAL cnt_en : STD_LOGIC;SIGNAL rst_cnt : STD_LOGIC;SIGNAL load : STD_LOGIC;SIGNAL dout0, dout1, dout2, dout3: STD_LOGIC_VECTOR(3 DOWNTO 0); -- cnt10 counter outputSIGNAL cout0, cout1, cout2, cout3: STD_LOGIC; -- cnt10 cout outputBEGINp_cnt_en <= cnt_en ;p_rst_cnt <= rst_cnt;p_load <= load ;u_testctl:testctl PORT MAP (clkk => clk1Hz ,cnt_en => cnt_en ,rst_cnt => rst_cnt,load => load);u_cnt10_0:cnt10 PORT MAP (rst => rst_cnt,ena => cnt_en ,outy => dout0 ,cout => cout0 );u_cnt10_1:cnt10 PORT MAP (clk => cout0 ,rst => rst_cnt,ena => cnt_en ,outy => dout1 ,cout => cout1 );u_cnt10_2:cnt10 PORT MAP (clk => cout1 ,rst => rst_cnt,ena => cnt_en ,outy => dout2 ,cout => cout2 );u_cnt10_3:cnt10 PORT MAP (clk => cout2 ,rst => rst_cnt,ena => cnt_en ,outy => dout3 ,cout => cout3 );u_reg4b_0:reg4b PORT MAP (load => load ,din => dout0,dout => led0 );u_reg4b_1:reg4b PORT MAP (load => load ,dout => led1);u_reg4b_2:reg4b PORT MAP (load => load ,din => dout2,dout => led2);u_reg4b_3:reg4b PORT MAP (load => load ,din => dout3,dout => led3);END behv;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY reg4b ISPORT (load: IN STD_LOGIC;din : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END reg4b;ARCHITECTURE behv OF reg4b ISBEGINPROCESS(load)BEGINIF load'EVENT AND load = '1' THENdout <= din;END IF;END PROCESS;END behv;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY testctl ISPORT (clkk : IN STD_LOGIC;cnt_en : OUT STD_LOGIC;rst_cnt: OUT STD_LOGIC;load : OUT STD_LOGIC);END testctl;ARCHITECTURE behv OF testctl ISSIGNAL div2clk: STD_LOGIC;BEGINPROCESS(clkk)BEGINIF clkk'EVENT AND clkk = '1' THENdiv2clk <= NOT div2clk;END IF;END PROCESS;PROCESS(clkk, div2clk)BEGINIF clkk = '0' AND div2clk = '0' THENrst_cnt <= '1';ELSErst_cnt <= '0';END IF;load <= NOT div2clk;cnt_en <= div2clk;END PROCESS;END behv;(2)创建工程之后对编译之前的参数进行设置,启动start compilation项,其编译结果如下:(3)时序仿真:对仿真前参数设置后启动start simulation,直到出现simulation was successful,仿真结束。

四位十进制频率计设计 自己写的

四位十进制频率计设计 自己写的

四位十进制频率计设计自己写的四位十进制频率计设计自己写的数字频率计设计1设计任务设计一简易数字频率计,其基本要求是:1)测量频率范围为1Hz~10Hz,测量范围分为四个等级,即×1、×10、×100、×1000。

2)频率测量精度fxfx2103.3)被测信号可以是下弦波、三角波和方波。

4)显示模式为4位十进制显示。

5)使用EWB进行模拟。

2.设计原则及方案频率的定义是单位时间(1s)内周期信号的变化次数。

若在一定时间间隔t内测得周期信号的重复变化次数为n,则其频率为f=n/t据此,设计方案框图如图1所示。

图1数字频率计组成框图其基本原理是,被测信号ux首先经整形电路变成计数器所要求的脉冲信号,频率与被测信号的频率fx相同。

时钟电路产生时间基准信号,分频后控制计数与保持状态。

当其高电平时,计数器计数;低电平时,计数器处于保持状态,数据送入锁存器进行锁存显示。

然后对计数器清零,准备下一次计数。

其波形逻辑关系图如图2所示。

3.基本电路设计1)整形电路整形电路将待测信号整形为计数器所需的脉冲信号。

电路形式采用555定时器组成的施密特触发器。

电路如图XXX所示。

如果待测信号为三角波,则输入整形电路,将分析设置为瞬态分析,然后启动电路。

输入和输出波形如图XXX所示。

可以看出,输出是相同频率的方波。

2)时钟产生电路时钟信号是控制计数器计数的标准时间信号,其精度在很大程度上决定了频率计的频率测量精度。

当需要高频率测量精度时,应使用晶体振荡器通过分频获得频率。

在该频率计中,时钟信号采用555定时器组成的多谐振荡器电路,产生频率为1kz的信号,然后进行分频。

多谐振荡器电路如图XXX所示。

给出了由555定时器组成的多谐振荡器的周期计算公式xxxxxxxxxx取XXXXXXXXXXXXX获得一个振荡频率为1kz的负脉冲,其振荡波形如图XXX所示。

3)分频器电路分频电路由计数器组成,对1kz时钟脉冲进行分频,获得不同量程所需的时间基准信号,实现量程控制。

4位十进制频率计的设计 计算机与电子等专业课程设计

4位十进制频率计的设计 计算机与电子等专业课程设计

4位十进制频率计的设计计算机与电子等专业课程设计4位十进制频率计的设计一、主要指标和要求1.设计4位十进制频率计,学习较复杂的数字系统设计方法;2.深入学习数字系统设计的方法与步骤;3.用元件例化语句写出频率计的顶层文件;4.用VHDL硬件描述语言进行模块电路的设计;5.设计硬件要求:PC机,操作系统为Windows2000/XP,本课程所用系统均为max+plus II 5.1设计平台,GW48系列SOPC/EDA实验开发系统。

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

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

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

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

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

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

其工作时序波形如图(a)。

图(a) 频率计测频控制器TESTCTL测控时序图图 (b) 4位十进制频率计顶层文件原理图选择的设计方案:1.根据频率计的工作原理,将电路划分成控制器、计数器、锁存器和LED显示几个模块,控制器——产生1秒脉宽的计数允许信号、锁存信号和计数器清零信号计数器——对输入信号的脉冲数进行累计锁存器——锁存测得的频率值LED显示——将频率值显示在数码管上2.根据图(a)、(b)及(1)(2)描述的4位十进制频率计的工作原理,利用max+ plusII5.1对以上三者的程序进行文本编辑输入和仿真测试并根据图(b),写出频率计的顶层文件,并给出其测频时序波形,及其分析。

4位十进制频率计的设计.EDA课程设计

4位十进制频率计的设计.EDA课程设计

EDA 课程设计报告书课题名称 4位十进制频率计的设计姓 名 刘智 学 号 0812201-45 院 系 物理与电信工程系 专 业 电子信息工程 指导教师周来秀讲师2011年 6月10日※※※※※※※※※ ※※※※ ※※※※※※※※※※※2008级学生EDA 课程设计4位十进制频率计的设计刘智(湖南城市学院物理与电信工程系电子信息工程专业,湖南益阳,41300)1设计目的1)学习掌握频率计的设计方法。

2)掌握动态扫描输出电路的实现方法。

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

2设计的主要内容和要求4位十进制频率计外部接口设计,顶层文件设计,包含4个模块,Tctl,Reg16,scan_led和一个x4cnt10(4个十进制计数器)。

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

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

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

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

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

各个模块均用VHDL语言描述。

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

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

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

根据系统设计要求,要实现一个4位十进制数字频率计,则要设计测频控制信号发生器模块tct1、四位十进制加法计数器模块x4cnt10、reg16锁存器模块, 七段译码显示模块scan_led 其原理框图如下图所示。

4位十进制频率计设计

4位十进制频率计设计

一、实验目的1.利用在quartus ii中用VHDL设计一个4位十进制频率计;2.了解且掌握频率计各模块的设计方法和复杂数字系统的设计方法。

二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的脉冲计数允许信号,1秒计数结束后,计数值(即所测信号频率)锁入锁存器,并为下一次测频作准备,即将计数器清零。

三、实验内容根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的脉冲计数允许信号,1秒计数结束后,计数值(即所测信号频率)锁入锁存器,并为下一次测频作准备,即将计数器清零。

四、实验步骤用VHDL硬件描述语言进行模块电路的设计(1)10进制计数器建立十进制计数器模块图如图1图1仿真波形图如图2:图2ena为高电平时,允许计数,当rst为高电平时重新开始计数,输出为9时自动进位。

(2)4位10进计数器建立4位十进制计数器模块图如图3图3波形图如图4图4如图所示,当rst为高电平时重新开始计数,当有上升沿高电平时输出自动加一,直到9999. (3)16位锁存器建立锁存器模块图如图5图5波形图如图6图6Ena 为高电平时候,允许数据锁存(4)LED控制模块建立LED控制模块图图7图7仿真波形图如图8图8如图8所示,D为4时候,A输出为1100110,D为0时候,A输出为0111111,即为控制LED各管的显示电平(5)控制模块控制分频的模块图图9图9 仿真波形图如图10图9 (6)顶层模块语句仿真波形输入CLK为1HZ脉冲,FX为3HZ时钟信号。

根据程序设计,每七位对应一个数码管,从高到低排列即为(0111111)(0111111)(0111111)(0111111),数码管显示10进制数为0000 结果分析:FX若改为10HZ时钟信号将实现数码管显示10进制数。

四、实验总结(1)从原理图来看,原理图可以分四个模块:十进制计数器,控制模块,锁存器,译码器输出模块。

动态输出4位十进制频率计的设计

动态输出4位十进制频率计的设计

武汉职业技术学院课程结业论文论文题目:动态输出4位十进制频率计的设计姓名:彭华平所在院系:电子信息工程学院班级:通信12303学号:12011193指导教师:虞沧武汉职业技术学院二〇一三年十二月目录一、概述 (2)二、设计正文 (3)(一)设计目的 (3)(二)设计实现 (4)1、端口说明 (4)2、Cnt10模块说明 (5)3、Tctl模块说明 (6)4、锁存器reg16模块说明 (8)5、scan_led模块说明 (9)6、顶层文件仿真 (9)7、硬件实现 (11)三、总结 (13)四、感言 (14)五、参考献 (14)摘要此次设计的主要目的是学习掌握频率计的设计方法;掌握动态扫描输出电路的实现方法;学习较复杂的数字系统设计方法。

通过单位时间(1秒)内频率的计数来实现频率计的设计。

此设计主要用四位十进制计数器,所以频率计数范围为100~9999Hz。

然后锁存防止闪烁显示,最后由译码扫描显示电路输出到数码管进行显示输出。

并且下载后会有一秒钟的延时后才会显示输出所计频率输出。

设计下载后能够进行仿真频率的计数和静态显示,但是分频的设计程序有所缺陷导致长时间显示后会有1Hz的抖动。

通过这次的设计能够更清楚的理解VHDL程序的描述语言,进行简单程序的编写和仿真。

动态输出4位十进制频率计的设计一、目的1. 学习掌握频率计的设计方法。

2. 掌握动态扫描输出电路的实现方法。

3. 学习较复杂的数字系统设计方法二、设计实现4位十进制频率计外部接口如图1所示,顶层文件如图2所示,包含4中模块;Tctl、reg16、scan_led和4个cnt10。

(1)端口说明F1Hz:给Tctl模块提供1Hz的频率输入。

Fin:被测频率输入。

scan_led:给scan_led模块提供扫描输入频率输入。

bt[1..0]:片选信号输出。

sg[6..0]:译码信号输出。

cout:进位输出。

图一四位十进制频率计的外部接口图二四位十进制频率计顶层文件(2)cnt10模块说明cnt10为含异步清零和同步时钟使能的十进制计数器,采用级联的方法进行计数,计数范围与所用cnt10级联个数有关,本次设计采用的是四个cnt10的级联,所以测频范围为0~9999Hz。

四位10进制VHDL频率计设计说明1

四位10进制VHDL频率计设计说明1

四位10进制VHDL频率计设计说明一、频率计数器的功能说明频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。

闸门时间也可以大于或小于一秒。

闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。

闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。

数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。

如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。

因此,数字频率计是一种应用很广泛的仪器。

设计中生成的测频计电路图二、频率计实现四位频率计的结构包括一个测频率控制信号发生器、四个十进制计数器和一个十六位锁存器(本例中所测频率超过测频范围时有警示灯)。

(1)测频时序控制器TESTCTL设计频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。

控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟信号TSTEN,以此作为计数闸门信号。

当TSTEN为高电平时,允许计数;当TSTEN由高电平变为低电平(下降沿到来)时,输出计数锁存信号LOAD,将(2)十进制计数器计数器以待测信号作为时钟,清零信号CLR_CNT到来时清零端ACLR异步清零;CLK_ENA为高电平时开始计数。

如果需要测试较高的频率信号则可将输出位数增加,当然锁存器的位数也要增加。

设计中生成的电路如下(3当如下(4极管闪亮,说明所测频率已经超过频率计所能测量的范围。

三、测频时序控制器的设计思路如下图所示,CLK是由脉冲发生器产生的频率为1Hz的标准时钟信号,当测频计接收到CLK上升沿脉冲时,首先有一个D触发器构成二分频器,在每次时钟CLK的上升沿到来使其值翻转,分为DIV2CLK 与NOTDIV2CLKA,当接收到首个CLK上升沿时,将产生DIV2CLK=1与NOTDIV2CLK=0,分别将他们送入TSTEN与LOAD,则计数器使能端有效,开始计数。

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

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

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

3.代码
module freqcounter(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;
end
always @(posedge uclk or posedge cls)
begin
if(cls) begin
A=4'd0;B=4'd0;C=4'd0;D=4'd0; end
else if(en) begin A=A+4'd1;
if(A==4'D10) begin A=4'd0;B=B+4'd1; end
if(B==4'D10) begin B=4'd0;C=C+4'd1; end
if(C==4'D10) begin C=4'd0;D=D+4'd1; end
if(D==4'D10) begin D=4'd0; end
end
end
always @(posedge load)
begin
ge_bit=A;
shi_bit=B;
bai_bit=C;
qian_bit=D;
end
endmodule
实验步骤
1.新建Verilog工程,编写代码并保存至与模块名对应的文件夹。

注意:项目应存为系统
盘以外的盘内,路径中不含中文字符。

2.编译程序,编译无误后,在【tools】里面选择RTL视,观察电路结构。

3.新建波形文件进行仿真。

保存时要和源程序存放在同一目录下。

设置好输入波形参数后,
开始仿真。

在仿真后输入输出波形中观察逻辑关系是否正确。

4.将实验箱和PC合理连接起来。

打开EDA6000软件,设置好芯片类型为ACEX1K(EP1K30
TC144-3),载入模式10.
5.根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSII里面设定管
脚号并检查无误。

实验心得
通过本次试验熟悉了十进制频率计的硬件结构和设计方法,了解了模块化代码风格和非结构化的编码方法,掌握了分频计、计数器以及顶层程序编码,进一步熟悉了virlog hdl的本质,熟练了书上知识。

相关文档
最新文档