您的当前位置:首页正文

实验二 计数器

2023-11-23 来源:钮旅网


实验二 计数器

一、 实验目的

1、 设计一个带使能输入及同步清0的增1计数器,仿真波形图见图20-1,实验源程序名是counter1.vhd;

2、 设计一个带使能输入及同步清0的增1/减1的8位计数器,仿真波形图见图20-2A和20-2B,实验源程序名是up-down.vhd。

二、 实验内容

图20-1 计数器2波形图

图20-2A 加减控制计数器波形图

在用VHDL语言描述一个计数器时,如果使用了程序包ieee.std_logic_unsigned,则在描述计数器时就可以使用其中的函数“+”(递增计数)和“-”(递减计数)。假定设计对象是增1计数器并且计数器被说明为向量,则当所有位均为‘1’时,计数器的下一状态将自动变成‘0’。举例来说,假定计数器的值到达“111”是将停止,则在增1之前必须测试计数器的值。

图20-2B 加减控制计数器波形图

如果计数器被说明为整数类型,则必须有上限值测试。否则,在计数顺值等于7,并且要执行增1操作时,模拟器将指出此时有错误发生。

下面的例子是一个3位增1/减1计数器:当输入信号UP等于1 时计数器增1;当输入信号UP等于0时计数器减1。

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_unsigned.all;

Entity up_down is

Port(clk,rst,en,up: in std_logic;

Sum: out std_logic_vector(2 downto 0);

Cout: out std_logic);

End;

Architecture a of up_down is

Signal count: std_logic_vector(2 downto 0);

Begin

Process(clk,rst)

Begin

If rst=’0’ then

Count<=(others=>’0’);

Elsif rising_edge(clk) then

If en=’1’ then

Case up is

When ‘1’ => count<=count+1;

When others =>count<=count-1;

End case;

End if;

End if;

End process;

Sum<=count;

Cout <=’1’ when en=’1’ and ((up=’1’ and count=7) or (up=’0’ and count=0)) else ‘0’;

End;

参考以上实例完成实验目的中所要求的3个计数器的设计。

三、 实验连线

实验1输入信号有clk(时钟信号)、clr(复位信号)、en(使能控制输入信号),clk用CPLD/FPGA适配器板子上的时钟信号,接数字信号源的CLK5,频率调节到1Hz左右,clr、en接拨码开关,工作时clr为低电平,en为高电平;输出信号有Q0~Q3,接LED灯。

实验2输入信号有clk(时钟信号)、rst(复位信号)、en(使能控制输入信号)、up(加减控制输入信号),clk用CPLD/FPGA适配器板子上的时钟信号,接数字信号源的CLK5,频率调节到1Hz左右,rst、en、up接拨码开关,工作时rst和en为高电平,up为高电平时增计数,为低电平时减计数;输出信号有SUM0~SUM2(代表输出数据)和COUT(代表进位或借位),都接LED灯。

在做实验时,请注意仿真波形图中各个输入信号的有效电平。

因篇幅问题不能全部显示,请点此查看更多更全内容