四位十进制频率计(EDA)
实验三 4位十进制频率计设计
实验三4位十进制频率计设计一、实验目的1.掌握数字频率计的Verilog描述方法;2.学习设计仿真工具的使用方法3.学习层次化设计方法;二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽位1秒的输入信号脉冲计数允许信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一次测频计数周期做准备的计数器清零信号。
这3个信号由测频控制信号发生器产生,它的设计要求是,测频控制信号发生器的计数使能信号输出CNT_EN 能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN 高电平时,允许计数;当CNT_EN低电平时停止计数,并保持所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各个锁存器REG4B中,并由外部的七段译码器译出,显示计数值。
设置锁存器的好处是,显示数据稳定,不会由于周期性的清零信号而不断闪烁。
信号锁存之后,还必须用清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作做准备。
三、实验内容1、用4位十进制计数器对用户输入时钟进行计数,计数间隔为1秒,计数满1秒后将计数值(即频率值)锁存到4位寄存器中显示,并将计数器清0,再进行下一次计数。
2、为上述设计建立元件符号3、设计仿真文件,进行验证。
4、编程下载并在实验箱上进行验证四、实验步骤程序源代码module FREG (clk1HZ,uclk,led0,led1,led2,led3,rst,en,load);input clk1HZ, uclk;output [3:0]led0,led1,led2,led3;output load,rst,en;wire in_load,in_rst,in_en,c0,c1,c2;wire [3:0]dout0,dout1,dout2,dout3;assign load=in_load;assign rst=in_rst;assign en=in_en;CNTL u1(.CLK(clk1HZ),.CNL_EN(in_en),.RST_CNL(in_rst),.LOAD(in_load));CNT10 u2 (.CLK(uclk),.EN(in_en),.RST(in_rst),.COUT(c0),.DOUT(dout0));CNT10 u3 (.CLK(c0),.EN(in_en),.RST(in_rst),.COUT(c1),.DOUT(dout1));CNT10 u4 (.CLK(c1),.EN(in_en),.RST(in_rst),.COUT(c2),.DOUT(dout2));CNT10 u5 (.CLK(c2),.EN(in_en),.RST(in_rst),.DOUT(dout3));RGB4 u6 (.DIN(dout0),.LOAD(in_load),.DOUT(led0));RGB4 u7 (.DIN(dout1),.LOAD(in_load),.DOUT(led1));RGB4 u8 (.DIN(dout2),.LOAD(in_load),.DOUT(led2));RGB4 u9 (.DIN(dout3),.LOAD(in_load),.DOUT(led3));endmodulemodule CNT10(CLK,RST,EN,COUT,DOUT); //4位计数器input CLK,RST,EN;output COUT;output[3:0] DOUT;reg[3:0] Q; reg COUT;always @ (posedge CLK or posedge RST)beginif(RST) Q=0;else if(EN) beginif(Q<9) Q=Q+1;else Q=0;endendalways @ (Q)if(Q==4'b1001) COUT=1;else COUT=0;assign DOUT=Q;endmodulemodule RGB4(DIN,LOAD,DOUT); //数据缓存器input LOAD;input[3:0] DIN;output[3:0] DOUT;reg[3:0] DOUT;always @ (posedge LOAD)DOUT=DIN;endmodulemodule CNTL(CLK,CNL_EN,RST_CNL,LOAD);//控制部分input CLK;output CNL_EN,RST_CNL,LOAD;reg CLKDIV,CNL_EN,LOAD,RST_CNL;always @ (posedge CLK)CLKDIV=~CLKDIV;always @ (posedge CLK) beginCNL_EN=CLKDIV;LOAD=~CLKDIV;endalways @ (CLK) beginif(CLK==1'b0&&CNL_EN==1'b0)RST_CNL=1;elseRST_CNL=0; endendmoduleRTL视图仿真结果功能分析:在波形中,CLK1HZ的频率为1HZ,以CLK1HZ为输入,产生en,rst,load的输出波形。
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位十进制频率计,我们需要考虑以下几个关键因素:1.输入范围:频率计应该能够适应不同频率范围的输入信号,从几赫兹到几百兆赫兹。
为了实现这一点,我们可以选择一个高性能的计数器和适当的预分频器。
2.分辨率:分辨率是指频率计能够测量的最小变化量。
较高的分辨率可以提供更精确的测量结果。
为了实现较高的分辨率,我们可以选择一个高位数的计数器以及适当的预分频器。
3.显示和输出:频率计应该能够以易读的方式显示测量结果,并可以通过输出接口连接到其他设备或系统。
基于以上要求,我们可以采用以下设计思路来实现4位十进制频率计。
1.时钟源:选择一个高稳定性的晶振作为频率计的时钟源。
晶振的稳定性对于频率计的测量精度非常重要。
2.频率测量:我们可以使用计数器和预分频器的组合来测量输入信号的频率。
计数器将输入信号进行计数,并以预定的时间间隔将计数器的值读取到显示寄存器中。
a.计数器:选择一个具有足够位数的计数器,以提供较高的分辨率。
例如,采用16位或者更高位的计数器,可以提供较高的计数能力和分辨率。
b.预分频器:使用预分频器将输入信号的频率降低到易于计数器处理的范围内。
预分频器的选择要根据输入信号的频率范围来确定。
比如,对于输入信号频率范围为几赫兹到几百兆赫兹,我们可以选择一个可设置不同分频系数的预分频器。
c.计数时间:选择一个适当的计数时间来保证测量结果的准确性。
较短的计数时间会降低分辨率,较长的计数时间会增加测量误差。
通过权衡这两者,我们可以设定一个合适的计数时间。
3.显示和输出:在实现频率计的显示和输出功能时,我们可以采用以下几种方式:a.LED数码管:选择一个4位数码管显示器来显示频率测量结果。
设计一个驱动电路,将显示寄存器中的计数值转换为相应的数码管显示。
EDA课程设计数字频率计
目录前言 (1)1. 总体设计方案 (2)1.1总体设计方案 (2)2. 单元模块设计 (2)2.1十进制计数器设计 (2)2.1.1 十进制计数器原件cnt10设计 (2)2.1.2 位十进制计数器的顶层设计 (4)2.2闸门控制模块EDA设计 (5)2.2.1 定时信号模块Timer (5)2.2.2 控制信号发生器模块T_con (7)2.3译码显示模块 (8)2.3.1 显示寄存器设计 (8)2.3.2 译码扫描显示电路 (9)2.3.3 译码显示模块的顶层电路设计 (12)3. 软件测试 (13)3.1测试的环境 (13)3.2调试和器件编程 (14)4. 设计总结 (15)5. 参考文献 (15)前言在电子技术高度发展的今天,各种电子产品层出不穷,而频率作为设计的最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程的自动化等优点。
数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器,它的基本功能是测量正弦信号、方波信号、尖脉冲信号以及其它各种单位时间内变化的物理量。
当今国内外厂家生产的数字频率计在功能和性能方面都比较优良,而且还在不断发展中,但其结构比较复杂,价位也比较高,在测量精准度要求比较低的测量场合,使用这些数字频率计就不够经济合算。
我所设计的这款数字频率计能够可靠实现频率显示功能,原理及结构也比较简单本次所做的课程设计就是一个数字频率计,能测量1HZ~9999HZ的矩形波信号,并正确地显示所测信号的频率值。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着现场可编程门阵列FPGA 的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
太原理工大学EDA课设4位十进制计数显示器
太原理工大学课程设计任务书注:1.课程设计完成后,学生提交的归档文件应按照:封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)2.可根据实际内容需要续表,但应保持原格式不变。
指导教师签名:日期:目录一、设计目的 (4)二、设计设备 (4)三、设计原理 (4)四、设计任务 (4)五、设计程序 (4)1、4位十进制计数电路 (4)2、显示译码电路 (6)3、四选一数据选择器电路 (7)4、2 位二进制计数器电路 (7)5、各电路连接的顶层文件设计 (8)六、对程序编译,仿真 (9)1、对4位十进制计数器的程序进行编译 (9)2、对显示译码段编译、仿真 (10)3、对整体进行全局编译、引脚分配、波形仿真 (10)七、 VHDL源文件下载到实验箱 (12)八、设计总结 (13)设计一 4位十进制计数显示器一、设计目的1.设计4位十进制计数器2.设计输出低电平有效地七段显示译码器3.显示计数器值二、设计设备EDA实验箱,计算机及QuartusⅡ软件。
三、设计原理计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数学运算等,计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。
4位十进制计数器的设计分5步完成。
先设计4位十进制计数电路,之后设计显示译码电路,再设计四选一数据选择器电路,再设计2位二进制计数器,最后建立一个顶层文件将4者连接起来。
四、设计任务(1)对四位十进制计数器进行编辑、编译、仿真。
(2)对七段译码电路进行编辑、编译、仿真。
(3)对四位十进制计数译码电路进行编辑、编译、仿真。
(4)进行引脚锁定以及硬件下载测试,记录实验结果。
五、设计程序1.4位十进制计数电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COU4 ISPORT(CLK,RESET,CIN :IN STD_LOGIC;CO :OUT STD_LOGIC;BCDAP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDBP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDCP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDDP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COU4;ARCHITECTURE BEHAVE OF COU4 ISSIGNAL BCDAN:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCDBN:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCDCN:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCDDN:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINBCDAP<=BCDAN;BCDBP<=BCDBN;BCDCP<=BCDCN;BCDDP<=BCDDN;KK1:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDAN<="0000";ELSIF(CIN='1')THENIF(BCDAN="1001")THENBCDAN<="0000";ELSEBCDAN<=BCDAN+'1';END IF;END IF;END IF;END PROCESS KK1;KK2:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDBN<="0000";ELSIF(CIN='1') AND (BCDAN="1001")THENIF(BCDBN="1001")THENBCDBN<="0000";ELSEBCDBN<=BCDBN+'1';END IF;END IF;END IF;END PROCESS KK2;KK3:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDCN<="0000";ELSIF(CIN='1') AND (BCDBN="1001") AND (BCDAN="1001")THEN IF(BCDCN="1001")THENBCDCN<="0000";ELSEBCDCN<=BCDCN+'1';END IF;END IF;END IF;END PROCESS KK3;KK4:PROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(RESET='0')THENBCDDN<="0000";ELSIF(CIN='1') AND (BCDCN="1001") AND (BCDBN="1001") AND (BCDAN="1001")THENIF(BCDDN="1001")THENBCDDN<="0000";ELSEBCDDN<=BCDDN+'1';END IF;END IF;END IF;END PROCESS KK4;END BEHAVE;2.显示译码电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SEG7 ISPORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END SEG7;ARCHITECTURE BEHAVE OF SEG7 ISSIGNAL INDATA:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGININDATA<=II;PROCESS(INDATA)BEGINCASE INDATA ISWHEN"0000"=> Y<="0111111";WHEN"0001"=> Y<="0000110";WHEN"0010"=> Y<="1011011";WHEN"0011"=> Y<="1001111";WHEN"0100"=> Y<="1100110";WHEN"0101"=> Y<="1101101";WHEN"0110"=> Y<="1111101";WHEN"0111"=> Y<="0000111";WHEN"1000"=> Y<="1111111";WHEN"1001"=> Y<="1101111";WHEN"1010"=> Y<="1110111";WHEN"1011"=> Y<="1111100";WHEN"1100"=> Y<="0111001";WHEN"1101"=> Y<="1011110";WHEN"1110"=> Y<="1111001";WHEN"1111"=> Y<="1110001";WHEN OTHERS=>Y<="XXXXXXX";END CASE;END PROCESS;END BEHAVE;3.四选一数据选择器电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux4_1 isPORT (SEG1,SEG2,SEG3,SEG4:IN STD_LOGIC_VECTOR(3 downto 0); s:IN STD_LOGIC_VECTOR(1 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 downto 0));END mux4_1;ARCHITECTURE BEHAVIORAL1 OF mux4_1 ISBEGINPROCESS(SEG1,SEG2,SEG3,SEG4,s)BEGIN CASE s ISWHEN "00"=>y<=SEG1;WHEN"01"=>y<=SEG2;WHEN"10"=>y<=SEG3;WHEN"11"=>y<=SEG4;WHEN OTHERS=>y<="0000";END CASE;END PROCESS;END BEHAVIORAL1;4.2位二进制计数器电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter4 isPORT(CLK1:IN STD_LOGIC;CNT: OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END counter4;ARCHITECTURE BEHAVIORAL2 of counter4 ISSIGNAL cnt1:STD_LOGIC_VECTOR(1 DOWNTO 0 ):="00";BEGINPROCESS(CLK1)BEGINIF CLK1'EVENT AND CLK1='1' THENcnt1<=cnt1+1;END IF;END PROCESS;CNT<=cnt1;END BEHAVIORAL2;5.各电路连接的顶层文件设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY COU47SEG ISPORT(CLK,clk1,RESET,ENA:IN STD_LOGIC;SEG1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);Sel: out std_logic_vector(1 downto 0));END COU47SEG;ARCHITECTURE X47 OF COU47SEG ISCOMPONENT SEG7PORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT COU4PORT(CLK,RESET,CIN:IN STD_LOGIC;BCDAP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDBP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDCP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);BCDDP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT mux4_1PORT(SEG1,SEG2,SEG3,SEG4:IN STD_LOGIC_VECTOR(3 downto 0); s:IN STD_LOGIC_VECTOR(1 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 downto 0));END COMPONENT;COMPONENT counter4PORT(CLK1:IN STD_LOGIC;CNT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END COMPONENT;SIGNAL A,B,C,D,seg:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL e:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINU0:COU4 PORT MAP(CLK,RESET,ENA,A,B,C,D);U1:mux4_1 PORT MAP(A,b,c,d,e,seg);U2:counter4 PORT MAP(CLK1,e);U3:seg7 PORT MAP(seg,seg1);sel<=e;END X47;六、对程序编译,仿真1、对4位十进制计数器的程序进行编译,其结果如下:2、对显示译码段编译、仿真,其结果如下:3、对整体进行全局编译、引脚分配、波形仿真,其结果如下:七、 VHDL源文件下载到实验箱:八、设计总结在本次设计中,我们还需要大量的以前没有学到过的知识,于是图书馆和INTERNET成了我们很好的助手。
四位十进制频率计的设计
十进制计 数模块
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为七段译码显示驱动电路,可以将频率计数的结 果译成能在数码管上显示相对应的阿拉伯数字,便于读 取测量的结果。
EDA实验三 硬件描述语言的层次化设计(频率计)
实验三硬件描述语言的层次化设计一、4位十六进制频率计1.建立新工程,命名为bit4_16,建立VHD文件COUNTER4B.vhd,编写4位十六进制计数器程序,并对文件编译,将文件另存为可调用symbol元件。
计数器仿真结果:2.建立测频控制器的VHD文件:FTCTRL.vhd,编写测频控制器程序,并对文件编译,将文件另存为可调用symbol元件。
测频控制器的仿真波形:3.建立4位锁存器文件的VHD文件:REG4B.vhd。
编写锁存器程序,并对文件编译,将文件另存为可调用symbol元件。
4.建立总的4位十进制频率计的原理图文件: fenpin.bdf对其进行波形仿真,因学号为19,故将时钟信号频率设定在119HZ,然后进行波形仿真波形仿真结果:仿真结果如下:输入频率119HZ,频率计测得的频率为77H HZ,可知仿真结果无误。
关于76nCEO管脚的处理方法如图:二.8位十进制频率计1.建立新工程,命名为bit8_10,建立VHD文件COUNTER4B.vhd,编写4位十进制计数器程序,并对文件编译,将文件另存为可调用symbol元件。
计数器仿真结果:2.建立测频控制器的VHD文件:FTCTRL.vhd,编写测频控制器程序,并对文件编译,将文件另存为可调用symbol元件。
测频控制器的仿真波形:3.建立4位锁存器文件的VHD文件:REG4B.vhd。
编写锁存器程序,并对文件编译,将文件另存为可调用symbol元件。
4.建立总的4位十进制频率计的原理图文件: fenpin2.bdf,并对其进行仿真,因学号28,故将时钟信号频率设定在128HZ,然后进行波形仿真仿真结果;波形仿真结果:因学号19,输入频率119HZ,频率计测得的频率也为119HZ,可知仿真结果正确。
EDA四位十进制频率计课程设计报告
EDA四位十进制频率计课程设计报告本科课程设计报告S课程名称:CPLD/FPGA应用设计课程设计题目:4位十进制计数扫描显示电路实验地点:中区采矿楼二层专业班级:电信学号:学生姓名: 2021年 6 月 17 日目录一、设计目的 ........................................................................... ...................................................... 3 二、设计的主要内容和要求 ........................................................................... ................................ 3 三、整体设计方案 ........................................................................... ................................................ 3 1、设计方案 ........................................................................... .......................................................... 3 2、四位十进制频率计顶层文件原理图 ........................................................................... .............. 4 3、本设计中重要端口说明 ........................................................................... .................................. 4 四、各个模块的设计说明及设计步骤 ........................................................................... ................ 4 1、顶层文件原理图设计 ........................................................................... ...................................... 5 2、x4Cnt10 模块说明 ........................................................................... .......................................... 5 3、 Tctl 模块说明 ........................................................................... ............................................. 5 4、锁存器reg16模块的说明 ........................................................................... ............................... 6 5、scan_led 模块说明 ........................................................................... .......................................... 7 6、分频器............................................................................ ............................................................. 8 7、动态显示时序仿真图 ........................................................................... ...................................... 8 8、调用各子模块编译仿真,时序仿真图如下 ........................................................................... .. 9 9、编译仿真完成,定义管脚 ........................................................................... .............................. 9 10、试验箱进行硬件测试 ........................................................................... .................................... 9 五、设计总结 ........................................................................... ...................................................... 10 六.参考文献 ........................................................................... ...................................................... 11 七.附录............................................................................ . (11)一、设计目的1、学习掌握频率计的设计方法。
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输出结果是正确的,和输入应该得到的结果一致,表明程序设计基本没有问题。
EDA四位十进制频率计课程设计报告解析
Hefei University 在系统编程课程设计课题名称4位十进制频率计的设计姓名钟文俊学号1105012012院系电子信息与电气工程系专业电子信息工程指导教师黄慧2013年 12月28日4位十进制频率计的设计一、设计目的1、学习掌握频率计的设计方法。
2、掌握动态扫描输出电路的实现方法。
3、学习较复杂的数字系统设计方法。
二、设计的主要内容和要求4位十进制频率计外部接口设计,顶层文件设计,包含4个模块,Tctl,Reg16,scan_led和一个x4cnt10(4个十进制计数器)。
三、整体设计方案1、设计方案根据频率计的定义和频率测量的基本原理:频率计即是指单位时间1秒内输入脉冲个数并显示出来的电路。
因为要显示被测信号的,只要限制计数器的计数过程为一秒则计数器的结果即为被测信号的频率。
频率值为:Fx=N,N为一秒内计数器所计脉冲个数。
因为是4位十进制频率计计数器是模为9999的十进制加法计数器,可以由4个模为10的十进制计数器级联而成,所以可以显示的频率范围是1-9999HZ。
因此,频率计的功能分割成四个模块:计数器,测频控制信号发生器和输出锁存器,。
各个模块均用VHDL语言描述。
待测信号的转速必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号,并有为下一测频计数周期作准备的计数器清零信号。
这三个信号可以由一个测频控制信号发生器产生。
当系统正常工作时,标准信号提供频率为1 Hz的输入信号,经过测频控制信号发生器进行信号变换,产生计数信号,将被测信号当做脉冲信号送入计数器模块,计数模块对输入的脉冲个数进行计数数结束后,将计数结果送入锁存器中,保证系统可以稳定显示数据,计数结果能够显示在七段数码显示管上。
根据系统设计要求,要实现一个4位十进制数字频率计,则要设计测频控制信号发生器模块tct1、四位十进制加法计数器模块x4cnt10、reg16锁存器模块, 七段译码显示模块scan_led其原理框图如下图所示。
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位十进制频率计顶层文件原理图。
4位十进制频率计设计
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文件实现系统组合。
EDA实验报告_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所示。
四位十进制频率计(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个十进制的加法计数器来构成所需要的计数器;在技计数完成之后还需要一个锁存器将计数值进行锁存,从而使显示的数值稳定。
基于EDA的四位数码显示频率计
基于EDA的四位数码显示频率计————————————————————————————————作者:————————————————————————————————日期:基于EDA的数字频率计的设计【摘要】在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。
直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。
本文阐述了用VHDL语言设计了一个简单的数字频率计的过程.【关键词】EDA;VHDL;数字频率计;波形仿真;1.1 设计要求借助于FPGA/CPLD的开发技术,设计一个4位十进制数字显示的数字式频率计,具体要求如下:(1)4位十进制数字显示的数字式频率计的测量范围为1k~9999KHZ,测量单位为KHZ;(2)要求量程能够自动转换,即几十KHZ显示小数点后两位,而几百KHZ 则显示小数点后一位;(3)当输入信号小于1KHZ时,输出全0,当输入大于9999KHZ时,输出显示全H。
1.2方案论证采用FPGA/CPLD芯片作为控制核心单元,完成各功能模块。
首先将被测信号与控制信号加在FPGA/CPLD芯片上,通过在芯片内部进行各逻辑操作,完成分频、计数及扫描显示等功能操作,最后通过数码管显示结果.其原理框架图如下图1-2所示。
FPGA/C被测图1—2 以FPGA/CPLD 为核心的数字频率计第二章 频率计的原理及测量方法数字频率计是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓频率,就是周期性信号在单位时间(1s)里变化的次数。
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课程设计
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 其原理框图如下图所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四位十进制频率计设计报告目录一、题目分析 (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个十进制的加法计数器来构成所需要的计数器;在技计数完成之后还需要一个锁存器将计数值进行锁存,从而使显示的数值稳定。
3、模块描述(1)四位十进制频率计顶层该模块即为我们最终所要实现的模块,即给定一个频率后,我们可以在外部显示上看到待测频率的频率值。
(2)测频控制电路该模块用于产生产生一个脉宽为1S的输入信号脉冲计数允许的信号,以便于后面模块的使用。
(3)16位计数器该模块用于在1S脉宽的周期信号内对待测频率的周期进行计数,从而得到待测频率的频率值。
(4)16位锁存器该模块用于将计数器产生的最终的计数值进行锁存,从而使显示的数值稳定。
(5)十进制加法计数器该模块用于产生设计所要求的十进制的计数器,从而构造成我们所需要的计数器。
4、顶层电路图16位计数器由四个十进制的加法计数器组成三、方案实现1、各模块仿真及描述(1)测频控制电路的仿真在CLKK时钟的控制下,计数使能信号CNT_EN能产生一个一定脉宽的周期信号(后面用于产生1S脉宽的周期信号),在停止计数期间,一个锁存信号LOAD的上升沿将计数器在前一秒钟的计数值锁进锁存器REG16D中。
清零信号RST_CNT对计数器进行清零,为下一秒的技术操作做准备。
(2)16位计数器的仿真从波形图中可以看出,当清零信号CLR置0,计数使能信号置1时,计数器以十进制的方式对所给的周期信号的周期进行计数。
(3)16位锁存器的仿真从波形图中可以看出,当LK置1时,锁存器对所给的数值进行锁存,并且使输出的锁存的数值保持不变,这将在后面的外部显示时使数值保持稳定。
(4)十进制加法计数器的仿真从波形图中可以看出,当使能端ENA置1,清零端置0时,计数器对给定的时钟的周期进行计数,计数值从0000---1001进行循环,这就满足了我们所需要的十进制的计数器。
2、顶层电路仿真及描述在进行仿真时,我设置的CLK1HZ的时钟周期是1s(频率为1HZ),FSIN 的时钟周期为10ms(频率为100HZ),从波形图中可以看出,输出的计数值确实是100,验证是正确的。
四、硬件测试及说明我选择了实验电路模式0,测频控制信号CLK1HZ由clock2输入,待测频率FSIN由clock0输入(可用电路帽选择所需要的频率),4个数码管(数码4-1:PIO31--PIO16)显示测频的输出。
(1)我所设计的四位十进制频率计对于四位的待测频率可以准确的显示出来;(2)但对于超过四位的待测频率只能将前面超出的溢出,只保留最后四位;(3)待测频率的位数越多,越往后数码管显示结果的误差就越大。
五、结论本实验设计的是四位十进制频率计,利用测频控制电路、16位锁存器、16位计数器和十进制的计数加法器几个模块完成了我所要的设计。
实现的功能是:在测频控制电路给的1HZ的测频信号下,计数器对待测频率的周期进行计数,再由锁存器锁存,最终通过外部的数码管将待测频率的频率数值显示出来。
通过本次设计实验我也学到了很多东西,刚开始时选定题目后不知道如何下手,通过翻书、上网查资料找到了一些相关知识才开始做实验。
在实验的进行中也出现了很多问题,比如说编译出现了很多错误,经过我仔细的排查和修改后,最终使得编译完全正确了,这让我有一点成就感,同时也使我对此充满了兴趣,做得就更加认真了,努力把很多没弄懂的问题都想清楚了,做完本次设计实验后真的收获颇丰!六、课程总结通过《在系统编程技术》这门课的学习,我真的学到了很多东西。
理论知识主要是学习了FPGA/CPLD、EDA的设计平台、VHDL语言等。
在理论学习之后,我们通过实验锻炼了自己的实践能力,同时在实验的过程中也加深了我们对课本上理论知识的理解。
记得刚开始学习这门课时,觉得还是比较有压力的,老师说我们要多了解EDA方面一些比较前沿的知识,第一节课听着老师提到的各个设计公司,比如说:Lattice、Xilinx、Altera公司等相关方面的专业名词,其实那时心里是有点激动的,觉得自己正在接触着前沿的知识。
在后面的理论知识的学习中觉得是痛并快乐着,痛的是各方面的知识比较多,比如说在学习VHDL语言的变量、常量、信号时,要注意很多的细节知识,当然快乐的就是自己学到了知识,丰富了自己所知道的知识范围。
在实验课上,我们学会了如何用电路原理图或者VHDL语言实现一个设计,通过在实验过程中遇到的各种问题来提高自己对Quartus ii 6.0软件的应用能力。
以及在最后的设计实验中更是让我知道一个设计人员的专业素养的要求也很高,要有一定的理论知识、清晰地头脑、较强的分析能力。
我认识到自己离一个设计人员的标准很有很多距离,但我会不断努力下去,努力让自己接近于一个设计人员的水平。
在最后,谢谢同学在学习的过程中给我的帮助以及老师给予的指导!七、附录(源程序,加中文注释)1、频率计顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;ENTITY freqtest ISPORT (CLK1HZ:IN STD_LOGIC; --测频控制信号FSIN:IN STD_LOGIC; --待测频率D:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--输出计数值END entity freqtest;ARCHITECTURE fd1 OF freqtest ISCOMPONENT couter16D ISPORT (FIN:IN STD_LOGIC; --时钟信号ENABL:IN STD_LOGIC; --计数使能信号CLR:IN STD_LOGIC; --清零信号DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--计数结果END COMPONENT;COMPONENT FTCTRL ISPORT (CLKK:IN STD_LOGIC; --测频控制信号(选取1HZ)CNT_EN:out STD_LOGIC; --计数器时钟使能RST_CNT:OUT STD_LOGIC; --计数器清零LOAD:out STD_LOGIC); --输出锁存信号END COMPONENT;COMPONENT REG16D ISPORT (LK:IN STD_LOGIC; --控制端,置1时锁存输出DIN:in STD_LOGIC_VECTOR(15 downto 0); --输入的计数值DOUT:OUT STD_LOGIC_VECTOR(15 downto 0));--输出的计数值END COMPONENT;SIGNAL x,y,z:STD_LOGIC; --定义信号x,y,zSIGNAL e:STD_LOGIC_VECTOR(15 DOWNTO 0); --定义16位的信号eBEGIN --下面就是有原先设计的模块构成顶层文件u1:couter16D PORT MAP(FIN=>FSIN,ENABL=>x,CLR=>y,DOUT=>e);u2:FTCTRL PORT MAP(CLKK=>CLK1HZ,CNT_EN=>x,RST_CNT=>y,LOAD=>z);u3:REG16D PORT MAP(DIN=>e,LK=>z,DOUT=>D);END ARCHITECTURE fd1;2、测频控制电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.all;ENTITY FTCTRL ISPORT(CLKK:IN STD_LOGIC; --测频控制信号(验证时取1HZ)CNT_EN:OUT STD_LOGIC; --计数器时钟使能RST_CNT:OUT STD_LOGIC; --计数器清零LOAD:OUT STD_LOGIC); --输出锁存信号END FTCTRL;ARCHITECTURE behav OF FTCTRL ISSIGNAL Div2CLK:STD_LOGIC;BEGINPROCESS(CLKK)BEGINIF CLKK'EVENT AND CLKK='1' THEN --1HZ时钟2分频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;3、16位锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;ENTITY REG16D ISPORT (LK:IN STD_LOGIC; --控制端,置1时锁存输出DIN:in STD_LOGIC_VECTOR(15 downto 0);--输入的计数值DOUT:OUT STD_LOGIC_VECTOR(15 downto 0));--输出的计数值END ENTITY REG16D;ARCHITECTURE fd1 OF REG16D ISBEGINprocess(LK,DIN)beginif (LK'EVENT and LK = '1' ) then DOUT<=DIN;--在LK上升沿时锁存输出end if;end process;END ARCHITECTURE fd1;4、16位计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;ENTITY couter16D ISPORT (FIN::IN STD_LOGIC; --时钟信号ENABL:IN STD_LOGIC; --计数使能信号CLR:IN STD_LOGIC; --清零信号DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--计数结果END entity couter16D;ARCHITECTURE fd1 OF couter16D ISCOMPONENT CNT10PORT (RST:IN STD_LOGIC; --清零端FX::IN STD_LOGIC; --时钟信号ENA:IN STD_LOGIC; --使能端OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出计数结果COUT:OUT STD_LOGIC); --输出信号用于进位END COMPONENT;SIGNAL x,y,z:STD_LOGIC; --定义信号x,y,zBEGIN --由四个十进制加法计数器设计成16位计数器u1:CNT10 PORT MAP(FX=>FIN,ENA=>ENABL,RST=>CLR,OUTY=>DOUT(3 downto 0),COUT=>x);u2:CNT10 PORT MAP(FX=>x,ENA=>ENABL,RST=>CLR,OUTY=>DOUT(7 downto 4),COUT=>y);u3:CNT10 PORT MAP(FX=>y,ENA=>ENABL,RST=>CLR,OUTY=>DOUT(11 downto 8),COUT=>z);u4:CNT10 PORT MAP(FX=>z,ENA=>ENABL,RST=>CLR,OUTY=>DOUT(15 downto 12));END ARCHITECTURE fd1;5、十进制加法计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;ENTITY CNT10 ISPORT (RST:IN STD_LOGIC; --清零端FX::IN STD_LOGIC; --时钟信号ENA:IN STD_LOGIC; --使能端OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出计数结果COUT:OUT STD_LOGIC); --输出信号用于进位END ENTITY CNT10;ARCHITECTURE behav OF CNT10 ISBEGINprocess(RST,ENA,FX)variable CQI :STD_LOGIC_VECTOR(3 downto 0);--定义变量CQIbeginif (RST = '1') then CQI:=(others =>'0');elsif(FX'EVENT and FX = '1') then --在时钟信号FX的上升沿if ENA='1' then --使能端为1,让信号从0--9进行计数if CQI<9 then CQI:= CQI+1; COUT<='0';elsif CQI=9 then CQI:=(others =>'0');COUT<='1';--超出9时进位END IF;ELSIF ENA='0' THEN CQI:=(others =>'0');--使能端置0输出为0END IF;end if;OUTY<= CQI;end process;END behav;2。