最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于VHDL数字频率计的课程设计

来源:动视网 责编:小OO 时间:2025-09-25 06:59:55
文档

基于VHDL数字频率计的课程设计

频率计设计报告题目:专业:班级:姓名:学号:指导教师:2011年12月21日武汉工程大学制一:内容摘要本次设计的频率计是一个8位十进制数字频率计,它由1个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、8个HC4511译码器,一个32位锁存器REG32B组成。测频信号产生的信号作为使能信号来控制计数器和寄存器,八位十进制的计数器从左到右分别为个、十、百、、、、,32寄存器存放最终的频率读数,然后通过译码器译码输出,连接到数码管。二:关键字频率计、TESTCTL、CNT
推荐度:
导读频率计设计报告题目:专业:班级:姓名:学号:指导教师:2011年12月21日武汉工程大学制一:内容摘要本次设计的频率计是一个8位十进制数字频率计,它由1个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、8个HC4511译码器,一个32位锁存器REG32B组成。测频信号产生的信号作为使能信号来控制计数器和寄存器,八位十进制的计数器从左到右分别为个、十、百、、、、,32寄存器存放最终的频率读数,然后通过译码器译码输出,连接到数码管。二:关键字频率计、TESTCTL、CNT
         

        频率计设计报告

        题   目:

        专   业: 

        班   级: 

        姓   名:  

        学   号: 

        指导教师:

         

                                 2011年 12 月 21 日

                              武汉工程大学 制

一:内容摘要

     本次设计的频率计是一个8位十进制数字频率计,它由1个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、8个HC4511译码器,一个32位锁存器REG32B组成。测频信号产生的信号作为使能信号来控制计数器和寄存器,八位十进制的计数器从左到右分别为个、十、百、、、、,32寄存器存放最终的频率读数,然后通过译码器译码输出,连接到数码管。

 

二:关键字

频率计、TESTCTL、CNT10、REG32B、HC4511、数码管

三:参考文献

1、《EDA技术及应用》王广君、杨志方编著;

2、《电子技术基础》康光华编著;

3、《单片机原理及应用》张毅刚编著。

四:正文

 1. 频率计的组成

        8位十进制数字频率计由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、8个74L4511译码器,一个32位锁存器REG32B组成。以下分别叙述频率计各逻辑模块的功能与设计方法。 

2. 各个部件的设计与 VHDL源程序

1) 有时钟使能的十进制计数器的设计

源程序CNT10.VHD

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;        --有时钟使能的十进制计数器

ENTITY CNT10 IS

PORT (CLK:IN STD_LOGIC;        --计数时钟信号

          CLR:IN STD_LOGIC;            --清零信号

          END:IN STD_LOGIC;            --计数使能信号

          CQ:OUT INTEGER RANGE 0 TO 15;    --4位计数结果输出

          CARRY_OUT:OUT STD_LOGIC);        --计数进位

 END CNT10;

ARCHITECTURE ART OF CNT10 IS 

    SIGNAL CQI :INTEGER RANGE 0 TO 15;

    BEGIN

             PROCESS(CLK,CLR,ENA)

              BEGIN

         IF CLR= '1' THEN CQI<= 0;         --计数器异步清零

              ELSIF CLK'EVENT AND CLK= '1' THEN            

                   IF ENA= '1' THEN 

IF CQI<9 THEN CQI<=CQI+1;

ELSE CQI<=0;END IF;         --等于9,则计数器清零

                   END IF;

              END IF;

        END PROCESS;

        PROCESS (CQI)

        BEGIN

IF CQI=9 THEN CARRY_OUT<= '1';     --进位输出

ELSE CARRY_OUT<= '0';END IF;

        END PROCESS;

CQ<=CQI;

END ART;

原理图如下:

2)  32位锁存器的的设计

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。若已有32位BCD码存在于此模块的输入口,在信号LOAD的上升沿后即被锁存到寄存器REG32B的内部,并由REG32B的输出端输出,然后由实验板上的7段译码器译成能在数码管上显示输出的相对应的数值。

源程序REG32B.VHD

LIBRARY IEEE;    --32位锁存器

USE IEEE.STD_LOGIC_11.ALL;

ENTITY REG32B IS 

   PORT(LOAD:IN STD_LOGIC;

           DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);

           DOUT:OUT STD_LOGEC_VECTOR(31 DOWNTO 0));

END REG32B;

ARCHITECTURE ART OF REG32B IS 

BEGIN

PROCESS ( LOAD, DIN )

BEGIN

IF LOAD 'EVENT AND LOAD= '1' THEN DOUT<=DIN; --锁存输入数据

  END IF ;

  END PROCESS;

END ART;

3) 测频控制信号发生器的设计

 频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数;低电平时,停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定显示。锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下1秒钟的计数操作作准备。测频控制信号发生器的工作时序如图6.6所示。为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时其值翻转。

       其中控制信号时钟CLK的频率取1 Hz,而信号TSTEN的脉宽恰好为1 s,可以用作闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。在计数完成后,即计数使能信号TSTEN在1 s的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5 s后,CLR_CNT产生一个清零信号上跳沿。

源程序TESTCTL.VHD 

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;            --测频控制信号发生器

USE IEEE.STD_LOGIC_UNSIGNED.ALL

ENTITY TESTCTL IS 

     PORT (CLK:IN STD_LOGIC;            --1 Hz测频控制时钟

                 TSTEN:OUT STD_LOGIC;        --计数器时钟使能

                 CLR_CNT:OUT STD_LOGIC;        --计数器清零

                 LOAD:OUT STD_LOGIC);        --输出锁存信号

END TESTCTL;

ARCHITECTURE ART OF TESTCTL IS 

      SIGNAL Dvi2CLK :STD_LOGIC;

      BEGIN

PROCESS ( CLK )

BEGIN

IF  CLK'EVENT AND CLK= '1' THEN             --1 Hz时钟二分频

Div2CLK<=NOT Div2CLK;

END IF ;

END PROCESS;

PROCESS ( CLK,Div2CLK )

BEGIN 

      IF CLK= '0' AND Div2CLK = '0' THEN             --产生计数器清零信号

CLR_CNT<= '1';

ELSE CLR_CNT<= '0' ; END IF;

   END PROCESS;

LOAD<=NOT Div2CLK; TSTEN<=Div2CLK;

END ART;

4)HC4511译码器的设计:

分别将寄存器的输出端DATA(0至3),DATA(4至7)............,,DATA(28至31)对应接到各个译码器的输入端口datain,然后将各个译码器的输出端啊,a,b,c,d,e,f,g接到数码管的a,b,c,d,e,f,g。

       程序设计如下:

library ieee;

use ieee.std_logic_11.all;

entity HC4511 is

port(datain:in std_logic_vector(3 downto 0);

     a:out std_logic;

     b:out std_logic;

     c:out std_logic;

     d:out std_logic;

     e:out std_logic;

     f:out std_logic;

     g:out std_logic);

     end entity;

      architecture ART of HC4511 is

     begin

    process(datain)

    begin

case datain    is

when "0001" =>

a<='0';b<='1';c<='1';d<='0';e<='0';f<='0';g<='0';

when "0010" =>

a<='1';b<='1';c<='0';d<='1';e<='1';f<='0';g<='1';

when "0011" =>

a<='1';b<='1';c<='1';d<='1';e<='0';f<='0';g<='1';

when "0100" =>

a<='0';b<='1';c<='1';d<='0';e<='0';f<='1';g<='1';

when "0101" =>

a<='1';b<='0';c<='1';d<='1';e<='0';f<='1';g<='1';

when "0110" =>

a<='0';b<='0';c<='1';d<='1';e<='1';f<='1';g<='1';

when "0111" =>

a<='1';b<='1';c<='1';d<='0';e<='0';f<='0';g<='0';

when "1000" =>

a<='1';b<='1';c<='1';d<='1';e<='1';f<='1';g<='1';

when "1001" =>

a<='1';b<='1';c<='1';d<='1';e<='0';f<='1';g<='1';

when others =>

a<='1';b<='1';c<='1';d<='1';e<='1';f<='1';g<='0';

end case;

end process;

end architecture ART ;

5) 数字频率计的源程序FREQ.VHD

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY FREQ IS

  PORT(FSIN:IN STD_LOGIC;

        CLK:IN STD_LOGIC;

          a0,b0,c0,d0,e0,f0,g0:out STD_LOGIC;

           a1,b1,c1,d1,e1,f1,g1:out STD_LOGIC;

             a2,b2,c2,d2,e2,f2,g2:out STD_LOGIC;

              a3,b3,c3,d3,e3,f3,g3:out STD_LOGIC;

               a4,b4,c4,d4,e4,f4,g4:out STD_LOGIC;

                 a5,b5,c5,d5,e5,f5,g5:out STD_LOGIC;

                  a6,b6,c6,d6,e6,f6,g6:out STD_LOGIC;

                   a7,b7,c7,d7,e7,f7,g7:out STD_LOGIC);

                     

END FREQ;

ARCHITECTURE ART OF FREQ IS

COMPONENT CNT10  --待调用的有时钟使能的十进制计数器端口定义

   PORT(CLK,CLR,ENA:IN STD_LOGIC;

         CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

         CARRY_OUT:OUT STD_LOGIC);

END COMPONENT;

COMPONENT REG32B  --待调用的32位锁存器端口定义

port(LOAD:in std_logic;

     DIN:in std_logic_vector(31 downto 0);

     DOUT:out std_logic_vector(31 downto 0));

END COMPONENT;

COMPONENT TESTCTL  --待调用的测频控制信号发生器端口定义

port(clk:in std_logic;

     tsten,clr_cnt,load:out std_logic);

 END COMPONENT;

 

 component HC4511

 port(datain :in std_logic_vector(3 downto 0);

     a:out std_logic;

     b:out std_logic;

     c:out std_logic;

     d:out std_logic;

     e:out std_logic;

     f:out std_logic;

     g:out std_logic);

   end component;

   SIGNAL TSTEN:STD_LOGIC;

   SIGNAL CLR_CNT:STD_LOGIC;

   SIGNAL LOAD:STD_LOGIC;

   SIGNAL CARRY1:STD_LOGIC;

   SIGNAL CARRY2:STD_LOGIC;

   SIGNAL CARRY3:STD_LOGIC;

   SIGNAL CARRY4:STD_LOGIC;

   SIGNAL CARRY5:STD_LOGIC;

   SIGNAL CARRY6:STD_LOGIC;

   SIGNAL CARRY7:STD_LOGIC;

   SIGNAL CARRY8:STD_LOGIC;

   SIGNAL DIN:STD_LOGIC_VECTOR(31 DOWNTO 0);

    SIGNAL DOUT:STD_LOGIC_VECTOR(31 DOWNTO 0);

    

BEGIN

U0:TESTCTL PORT MAP(CLK=>CLK,TSTEN=>TSTEN,

CLR_CNT=>CLR_CNT,LOAD=>LOAD);

U1:CNT10 PORT MAP(CLK=>FSIN,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (3 DOWNTO 0),CARRY_OUT=>CARRY1);

U2:CNT10 PORT MAP(CLK=>CARRY1,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (7 DOWNTO 4),CARRY_OUT=>CARRY2);

U3:CNT10 PORT MAP(CLK=>CARRY2,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (11 DOWNTO 8),CARRY_OUT=>CARRY3);

U4:CNT10 PORT MAP(CLK=>CARRY3,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (15 DOWNTO 12),CARRY_OUT=>CARRY4);

U5:CNT10 PORT MAP(CLK=>CARRY4,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (19 DOWNTO 16),CARRY_OUT=>CARRY5);

U6:CNT10 PORT MAP(CLK=>CARRY5,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (23 DOWNTO 20),CARRY_OUT=>CARRY6);

U7:CNT10 PORT MAP(CLK=>CARRY6,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (27 DOWNTO 24),CARRY_OUT=>CARRY7);

U8:CNT10 PORT MAP(CLK=>CARRY7,CLR=>CLR_CNT,ENA=>TSTEN,

CQ=>DIN (31 DOWNTO 28),CARRY_OUT=>CARRY8);

U9:REG32B PORT MAP(

LOAD=>LOAD,DIN=>DIN(31 DOWNTO 0),DOUT(31 DOWNTO 0)=>DOUT);

U10:HC4511  PORT MAP(

datain=>DOUT(3 DOWNTO 0),a=>a0,b=>b0,c=>c0,d=>d0,e=>e0,f=>f0,g=>g0);

U11:HC4511  PORT MAP(

datain=>DOUT(7 DOWNTO 4),a=>a1,b=>b1,c=>c1,d=>d1,e=>e1,f=>f1,g=>g1);

U12:HC4511  PORT MAP(

datain=>DOUT(11 DOWNTO 8),a=>a2,b=>b2,c=>c2,d=>d2,e=>e2,f=>f2,g=>g2);

U13:HC4511  PORT MAP(

datain=>DOUT(15 DOWNTO 12),a=>a3,b=>b3,c=>c3,d=>d3,e=>e3,f=>f3,g=>g3);

U14:HC4511  PORT MAP(

datain=>DOUT(19 DOWNTO 16),a=>a4,b=>b4,c=>c4,d=>d4,e=>e4,f=>f4,g=>g4);

U15:HC4511  PORT MAP(

datain=>DOUT (23 DOWNTO 20),a=>a5,b=>b5,c=>c5,d=>d5,e=>e5,f=>f5,g=>g5);

U16:HC4511  PORT MAP(

datain=>DOUT(27 DOWNTO 24),a=>a6,b=>b6,c=>c6,d=>d6,e=>e6,f=>f6,g=>g6);

U17:HC4511  PORT MAP(

datain=>DOUT(31 DOWNTO 28),a=>a7,b=>b7,c=>c7,d=>d7,e=>e7,f=>f7,g=>g7);

END ART;

      6)仿真图如下:

文档

基于VHDL数字频率计的课程设计

频率计设计报告题目:专业:班级:姓名:学号:指导教师:2011年12月21日武汉工程大学制一:内容摘要本次设计的频率计是一个8位十进制数字频率计,它由1个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、8个HC4511译码器,一个32位锁存器REG32B组成。测频信号产生的信号作为使能信号来控制计数器和寄存器,八位十进制的计数器从左到右分别为个、十、百、、、、,32寄存器存放最终的频率读数,然后通过译码器译码输出,连接到数码管。二:关键字频率计、TESTCTL、CNT
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top