4位十进制频率计的设计
- 格式:pptx
- 大小:51.66 KB
- 文档页数:6
目录一、设计任务与要求 (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位十进制频率计。
==设计思路==为了设计一个能够测量高精度频率的4位十进制频率计,我们需要考虑以下几个关键因素:1.输入范围:频率计应该能够适应不同频率范围的输入信号,从几赫兹到几百兆赫兹。
为了实现这一点,我们可以选择一个高性能的计数器和适当的预分频器。
2.分辨率:分辨率是指频率计能够测量的最小变化量。
较高的分辨率可以提供更精确的测量结果。
为了实现较高的分辨率,我们可以选择一个高位数的计数器以及适当的预分频器。
3.显示和输出:频率计应该能够以易读的方式显示测量结果,并可以通过输出接口连接到其他设备或系统。
基于以上要求,我们可以采用以下设计思路来实现4位十进制频率计。
1.时钟源:选择一个高稳定性的晶振作为频率计的时钟源。
晶振的稳定性对于频率计的测量精度非常重要。
2.频率测量:我们可以使用计数器和预分频器的组合来测量输入信号的频率。
计数器将输入信号进行计数,并以预定的时间间隔将计数器的值读取到显示寄存器中。
a.计数器:选择一个具有足够位数的计数器,以提供较高的分辨率。
例如,采用16位或者更高位的计数器,可以提供较高的计数能力和分辨率。
b.预分频器:使用预分频器将输入信号的频率降低到易于计数器处理的范围内。
预分频器的选择要根据输入信号的频率范围来确定。
比如,对于输入信号频率范围为几赫兹到几百兆赫兹,我们可以选择一个可设置不同分频系数的预分频器。
c.计数时间:选择一个适当的计数时间来保证测量结果的准确性。
较短的计数时间会降低分辨率,较长的计数时间会增加测量误差。
通过权衡这两者,我们可以设定一个合适的计数时间。
3.显示和输出:在实现频率计的显示和输出功能时,我们可以采用以下几种方式:a.LED数码管:选择一个4位数码管显示器来显示频率测量结果。
设计一个驱动电路,将显示寄存器中的计数值转换为相应的数码管显示。
实验七四位十进制频率计的设计一、实验目的1、掌握计数器的设计方法;2、学习较复杂的数字系统的设计方法;3、掌握实现时钟上升沿的设计方法。
二、设计要求1、编写4位十进制计数器的VHDL源程序;2、进行编译、引脚锁定、下载测试;3、进行频率计仿真波形的测试与分析;4、写出设计性实验报告。
三、设计提示图1 四位十进制频率计顶层文件原理图1、实验原理提示:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,如图1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT 对计数器进行清零,为下1秒钟的计数操作作准备。
其工作时序波形如图2。
图2 频率计测频控制器TESTCTL测控时序图2、引脚锁定以及硬件下载测试提示:如果目标器件是EPF10K10,建议选实验电路模式0,4个数码管(数码4-1:PIO31-PIO16)显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256HZ . . .或更高;1HZ测频控制信号F1HZ可由clock2输入(用电路帽选选1Hz)。
四、实验报告要求根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;设计原程序,程序分析报告、仿真波形图及其项目分析。
重庆交通大学信息科学与工程学院综合性实验报告姓名:学号班级:专业级班实验项目名称:四位十进制频率计设计实验项目性质:综合性设计实验实验所属课程: 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 位十进制数字频率计, 其原理框 图如图 1 所示。
主要由脉冲发生器电路、 测频控制信号发生器电路、 待测 信号计数模块电路、 锁存器、 七段译码驱动电路及扫描显示电路等模块组 成。
由于是4位十进制数字频率计, 所以计数器CNT10需用4个,7段显示译 码器也需用4个。
频率测量的基本原理是计算每秒钟内待测信号的脉冲个 数。
为此,测频控制信号发生器 F_IN_CNT 应设置一个控制信号时钟CLK , 一个计数使能信号输出端EN 、一个与EN 输出信号反 向的锁存输出信号 LOCK 和清零输出信号CLR 。
若CLK 的输入频率为1HZ ,则输出信号端EN 输出 一个脉宽恰好为1秒的周期信号, 可以 作为闸门信号用。
由它对频率计的 每一个计数器的使能端进行同步控制。
当EN 高电平时允许计数, 低电平时 住手计数,并保持所计的数。
在住手计数期间,锁存信号LOCK 的上跳沿 将计数器在前1秒钟的计数值锁存进4位锁存器LOCK ,由7段译码器译出 并稳定显示。
设置锁存器的好处是: 显示的数据稳定, 不会由于周期性的标准时钟 CLKEN待测信号计数电路脉冲发 生器待测信号F_INLOCK锁存与译 码显示驱 动电路测频控制信 号发生电路CLR扫描控制数码显示清零信号而不断闪烁。
锁存信号之后,清零信号CLR对计数器进行清零,为下1秒钟的计数操作作准备。
时基产生与测频时序控制电路主要产生计数允许信号EN、清零信号CLR 和锁存信号LOCK。
其VHDL 程序清单如下:--CLK_SX_CTRLLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLK_SX_CTRL ISPORT(CLK: IN STD_LOGIC;LOCK: OUT STD_LOGIC;EN: OUT STD_LOGIC;CLR: OUT STD_LOGIC);END;ARCHITECTURE ART OF CLK_SX_CTRL ISSIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF Q="1111"THENQ<="0000";ELSEQ<=Q+'1';END IF;END IF;EN<=NOT Q(3);LOCK<=Q(3)AND NOT(Q(2))AND Q(1);CLR<=Q(3)AND Q(2)AND NOT(Q(1));END PROCESS;END ART;测频时序控制电路:为实现系统功能,控制电路模块需输出三个信号:一是控制计数器允许对被测信号计数的信号EN;二是将前一秒计数器的计数值存入锁存的锁存信号LOCK;三是为下一个周期计数做准备的计数器清零信号CLR。
4位十进制频率计设计一、原理说明:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这清0个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
【例1】--测频控制器,使得频率计能自动测频module testctl(clkk,cnt_en,rst_cnt,load);input clkk; // 1HZoutput cnt_en;output rst_cnt;output load;reg div2clk;wire cnt_en;reg rst_cnt;wire load;always@(posedge clkk)div2clk<=~div2clk;always @(clkk or div2clk) beginif(!clkk & !div2clk) rst_cnt<=1'b1;else rst_cnt<=1'b0;endassign load = ~div2clk;assign cnt_en = div2clk;endmodule【例2】锁存器,将频率计的每位数锁存后输出module reg4(clk,cq,led );input clk;input[3:0] cq;output[3:0] led;reg[3:0] led;always@(posedge clk)led<=cq;endmodule[例3] 用原理图方式将各模块连接起来也可以用.v文件实现系统组合。
实验七4位十进制频率计的设计实验目的:设计一个4位十进制频率计,学习复杂数字系统的设计方法。
实验原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的脉冲计数允许信号,1秒计数结束后,计数值(即所测信号频率)锁入锁存器,并为下一次测频作准备,即将计数器清零。
试验内容:1、根据频率计的工作原理,将电路划分成控制器、计数器、锁存器和LED显示几个模块,控制器——产生1秒脉宽的计数允许信号、锁存信号和计数器清零信号计数器——对输入信号的脉冲数进行累计锁存器——锁存测得的频率值LED显示——将频率值显示在数码管上顶层文件框图如下:2、用元件例化语句写出频率计的顶层文件。
3、用VHDL硬件描述语言进行模块电路的设计。
本实验中不少模块在之前的实验中已经有所涉及,只需要对以前的设计做部分修改即可用于这次实验。
提示:十进制计数器输出的应是4位十进制数的BCD码,因此输出一共是4×4bit。
4、用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据(不包括数码管显示部分)。
5、通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
实验结果:各模块电路的VHDL描述:10进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport (rst,fx,ena:in std_logic;cout: out std_logic;outy :out std_logic_vector(3 downto 0)); end cnt10;architecture behv of cnt10 isbeginprocess (rst,ena,fx)variable cqi :std_logic_vector(3 downto 0);beginif rst='1' then cqi :=(others =>'0');elsif fx'event and fx='1' thenif ena ='1' thenif cqi < 9 then cqi:=cqi+1;cout<='0';elsif cqi=9 thencqi :=(others =>'0');cout<='1';end if;elsif ena='0' then cqi:=(others =>'0');end if;end if;outy <=cqi;end process;end behv;4位10进计数器library ieee;use ieee.std_logic_1164.all;entity cnt10_4 isport(fx,rst,ena:in std_logic;d:out std_logic_vector(15 downto 0));end entity;architecture one of cnt10_4 iscomponent cnt10port (rst,fx,ena:in std_logic;cout: out std_logic;outy :out std_logic_vector(3 downto 0));end component;signal e:std_logic_vector(3 downto 0);beginu1:cnt10 port map(fx=>fx,rst=>rst,ena=>ena,cout=>e(0),outy=>d(3 downto 0));u2:cnt10 port map(fx=>e(0),rst=>rst,ena=>ena,cout=>e(1),outy=>d(7 downto 4));。
EDA实验报告课程名称:EDA技术实验名称:4位十进制频率计设计班级:姓名:指导老师:签名:一、实验目的1.设计4位十进制频率计,学习较复杂的数字系统设计方法;2.用VHDL硬件描述语言进行模块电路的设计;3.掌握较为复杂的原理图层次化设计,熟悉详细的设计流程。
二、实验仪器计算机一台;Quartus Ⅱ软件;U盘。
三、实验内容与步骤在QuartusⅡ上完成4位计数器、测频控制器的设计以及4位锁存器的设计,根据以上三个设计完成4位十进制频率计的设计并验证。
1. 4位计数器设计(1)输入完整的VHDL语言描述,具体描述如下。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B ISPORT (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 CNT4B;ARCHITECTURE behav OF CNT4B ISSIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP_REG: PROCESS(CLK, RST, ENA)BEGINIF RST = '1' THEN CQI <= "0000";ELSIF CLK'EVENT AND CLK = '1' THENIF ENA = '1' THEN CQI <= CQI + 1;END IF;END IF;OUTY <= CQI ;END PROCESS P_REG ; --进位输出COUT<=CQI(0) AND CQI(1) AND CQI(2) AND CQI(3);END behav;(2) 模块图形符号及逻辑功能描述如图1所示。