视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
EDA计数器实验报告
2025-09-24 07:09:19 责编:小OO
文档
EDA计数器实验报告

一、实验目的:

1、深刻理解VHDL语言元件例化的方法。

2、掌握计数器的设计原理以及设计方法。

3、结合以前学过的数码管扫描知识完成计数器显示学号后三位。

二、实验原理:

计数器是可以统计时钟脉冲次数的时序器件,为了使计数器可以显示学号后三位,采用级联的形式来设计计数器,如十进制的计数器与六进制的计数器级联即构成了六十进制计数器。使用3个带Carry-in和Carry-out模10的计数器的计数输出分别作为计数器个位、十位、百位的输出,设计模108计数器。

    实验内容:

本次实验要求设计一个模为自己学号后 3 位的计数器(模108)。各个零部件可以用LPM来定制,而顶层则要使用VHDL语言以元件例化的方法来实现。

1、VHDL语言的部分代码:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity exp_cnt108 is 

port(clk0,clk,clrn,En:in std_logic;

     b,s,g:out std_logic_vector(3 downto 0);

     c:out std_logic;

     cc:out std_logic;

     sb,ss,sg:out std_logic;

     ga,gb,gc,gd,ge,gf,gg:out std_logic);

end exp_cnt108;

architecture rtl of exp_cnt108 is

component count4

port(clk:in std_logic;

     q:out std_logic_vector(1 downto 0));

end component;

component decoder2_3

port(data:in std_logic_vector(1 downto 0);

     eq0,eq1,eq2:out std_logic);

end component;

component mux4_3_1

port(    data0x        : IN STD_LOGIC_VECTOR (3 DOWNTO 0);

        data1x        : IN STD_LOGIC_VECTOR (3 DOWNTO 0);

        data2x        : IN STD_LOGIC_VECTOR (3 DOWNTO 0);

        sel        : IN STD_LOGIC_VECTOR (1 DOWNTO 0);

        result        : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

end component;

component my7449

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

     a,b,c,d,e,f,g:out std_logic);

end component;

component exp_cnt10

port(Clk,clrn,En,cin:in std_logic;

     cq:out std_logic_vector(3 downto 0);

     cout:out std_logic);

end component;

signal clr,cin:std_logic;

signal q:std_logic_vector(1 downto 0);

signal coutb,couts,coutg,cout:std_logic_vector(3 downto 0);

signal c1,c2,c3: std_logic;

signal eq0,eq1,eq2: std_logic;

signal qa,qb,qc,qd,qe,qf,qg: std_logic;

begin

    u0:count4 port map(clk0,q);

    u1:decoder2_3 port map(q,eq0,eq1,eq2);

sb<=eq2;

ss<=eq1;

sg<=eq0;

cin<='1';

    u2:exp_cnt10 port map(clk,clrn or clr,En,cin,coutg,c1);

    u3:exp_cnt10 port map(clk,clrn or clr,En,c1,couts,c2);

    u4:exp_cnt10 port map(clk,clrn or clr,En,c2 and c1,coutb,c3);

b<=coutb;

s<=couts;

g<=coutg;

cc<=c1;

c<=c2;

clr<=coutb(0) and coutg(3);

    u5:mux4_3_1 port map(coutg,couts,coutb,q,cout);

    u6:my7449 port map(cout,qa,qb,qc,qd,qe,qf,qg);

ga<=qa;

gb<=qb;

gc<=qc;

gd<=qd;

ge<=qe;

gf<=qf;

gg<=qg;

end rtl;    

三、波形仿真及下载验证:

如图所示: 

波形仿真:

仿真参数设置:

Entime:45us       Grid size:100ns       clk:clock→period:10ns

波形说明:

clrn为0,En为0时,保持;

clrn为0,En为1时,计数;

clrn为1时,清零;

由仿真图知,计数到107后从0开始计数。

其中b为输出数据的百位,s为输出数据的十位,g为输出数据的个位,c为模108计数器的进位输出。

结论:

仿真结果与预期一致,正确。

下载验证:

管脚锁定:

clk0: 55     clk:125     En:83     clrn:82       sb、ss、sg:135,133,132

qa,qb,qc,qd,qe,qf,qg:136,137,138,140,141,142,143

下载结果:

当按下83后,数码管显示数字从000开始数,数到108后清零重新计数。

五、     思考题

1、说明任意进制的设计方法。

要是用数码管显示的话,所模的数字有几个数位就用几个模10计数器,利用几个计数器的输出端口的中几个输出端口制定与、非的关系表示出所模数字,构成另一清零端。

不用数码管显示的话,可以直接使用VHDL代码写,将实验内容中模10计数器的代码中的9改成所模数字就可以了。

2、列举 LPM 参数可定制的计数器类型。

1.模任意数字计数器;

2.加法计数减法计数

3.具有计数使能,时钟信号使能、同/异步清零/置位、保持功能

3、如何利用 generic 设计用户参数化计数器?

generic 类属参量是元件实体说明的可选项,放在端口说明前面,为元件实体和外部环境通信的静态信息提供通道。含 generic 的实体可参数化设置元件规模或特性,如端口大小、元件数目、定时特性等。

4、分频器的占空比的设计关键:

在于计数器进位输出电平反转的时机。

5、偶数次分频器与技术次分频器的 VHDL 设计方法主要区别:

偶数次分频器通过计数值来控制输出时钟的高电平或低电平的时间;

奇数次分频器采用加法计数器设计,需要对时钟上升沿和下降沿分别计数,根据两个计 数值控制输出时钟的电平;

6、如何设计 0.5 次分频器?

分频系数为 N - 0.5 的实现可以采用 1 个模 N的减法计数器、1 个异或门、1 个二分频器。

六、     实验心得:

通过此次试验,我对计数器和VHDL语言有了进一步的了解,由于编程不太好,这次代码请教了不少同学,以后一定要加强这方面的学习。下载本文

显示全文
专题