模可变计数器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二模可变计数器设计
一、实验目的
(1) 掌握关于简单数字电路的设计和静态数码管的设计。
(2)熟悉VHDL中进程语句的使用。
(3)掌握数码管的显示。
二、实验内容与要求
(1)设计设置一位控制位M,要求M=0:模23计数;M=1:模109计数。
(2)计数结果用静态数码管显示,显示BCD码。
(3)给出此项设计的仿真波形。
三、设计原理
(1)计数器能够计数的前提就是在使能端有效时,因此设计了en作为输入信号。
(2)计数器应该还要有异步清零端,因此设计了rst作为一个输入信号。另外因为这是模可变的计数器,因此还需要m作为一个输入信号控制计数的模(3)计数器的基本工作原理是在CP:时钟脉冲输入端,每个上升沿到来时,计一个数,即自身加一,因此设计了计数的变量mmm
(4)若是X模,则应该在小于X时计数,一旦记到X时,应该输出一个进位,因此需要设计一个变量limit作为参量,只有在小于limit时才可以计数,否则就应该清零。又由于在模切换时,要求只要小于22或108就可以计数,因此limit要赋予不同的值(由m控制),且在是否执行加一前进行判断。
(5)因为一个静态数码管需要四位输出,最大计数是108,要用三个静态数码管,因此mmm要设计成一个std_logic_vector(11 downto 0)共12位,来对应三个数码管的输出。
(6)因为std_logic_vector(11 downto 0)这是二进制的加法,因此不能直接显示,否则就出现错误了,因此涉及到了二进制转换为十进制。当低八位为10011010,前四位与后四位分别加6,即01100110;若低四位出现1010,要加6,即0110,进行调整。
(7)计数器的加一和调整是逻辑上是不同条件的相与,因此用到if语句。
四、实验器材
PC机,试验箱,quartus软件
五、实验程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count is
port(clk,rst,en,m:in std_logic;
m1,m2,m3:out std_logic_vector(3 downto 0);
cout:out std_logic);
end count;
architecture behav of count is
begin
process(clk,rst,en,m)
variable limit:std_logic_vector(11 downto 0); ---limit用来控制是否小于22或108
variable mmm:std_logic_vector(11 downto 0);--mmm用来计数
begin
if m='0' then limit:="000000100010"; ---给limit赋值,为m=0时为22,else limit:="000100001000"; ---m=1时为108
end if;
if rst='1' then mmm:=(others=>'0'); ----异步清零
elsif clk'event and clk='1' then ----判断时钟上升沿
if en='1' then ----判断使能端
if mmm if mmm(7 downto 0)="10011010"then mmm:=mmm+"000001100110"; elsif mmm(3 downto 0)="1010"then mmm:=mmm+"000000000110"; end if; ---进行加六调整 else mmm:=(others=>'0'); end if; end if; end if; if mmm=limit then cout<='1'; ---计数值到达模值时输出 else cout<='0'; end if; m1(3 downto 0)<=mmm(3 downto 0); m2(3 downto 0)<=mmm(7 downto 4); m3(3 downto 0)<=mmm(11 downto 8); ---数码管输出显示 end process; end; 六、实验步骤 (1)建立工作库文件夹,输入设计项目原理图或VHDL代码并存盘。 (2)将设计项目设置成Project,选目标器件并编译。 (3).建立仿真波形文件,进行波形仿真。 (4)引脚锁定,包装元件。 (1)分配管脚后在进行编译一次。 (6)配制文件下载:选择Tool→Programmer,在Mode栏选择JTAG,选中打勾下载文件右侧第一个小框。单击Hardware Setup,双击ByteBlasterMV→close。 (7)单击Start,当Progress显示100%以及在底部显示“Configuration Succeeded”时,即可以在试验箱上进行操作了。 七、硬件测试 下载到EDA实验箱上测试,按下相应的按键,实验中我选择的是53是使能端,当不按下时,不可计数,按下时即为“1”时才可以计数;当按下55,即rst 键,清零正确,当此键为0时才可计数;当m为0(不按54键)时为模23计数,且计数到23时清零(重新计数)且LED1亮;当m为1(即按下)时为模109计数,且计数到109时清零(重新计数)且LED1亮;在计数时切换m值时,在小于22或108时都可以计数,从而验证实验正确。 八、实验小结 (1)这个程序需要用到if语句的嵌套,以此必须理清各层的关系。 (2)二进制与十进制需要转换才正确。 (3)if语句只能用在进程中,否则是错的。