模可变计数器设计
以环保为题的作文-怀铁一中
实验二 模可变计数器设计
一、
实验目的
(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,要用三个静态
数码管,因此mm
m要设计成一个std_logic_vector(11 downto
0)共12位,来对应
三个数码管的输出。
(6)因为std_logic_vector(11 downto 0)这是二进制的加法,因此不
能直接显
示,否则就出现错误了,因此涉及到了二进制转换为十进制。当低八位为
100110
10,前四位与后四位分别加6,即01100110;若低四位出现1010,要加6,
即0110,
进行调整。
(7)计数器的加一和调整是逻辑上是不同条件的相与,因此用到if语句。
四
、实验器材
PC机,试验箱,quartus软件
五、实验程序
library ieee;
use _logic_;
use
_logic_;
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:=
---给limit赋值,为m=0时为22,
else limit:=
---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
elsif mmm(3 downto 0)=
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→Progra
mmer,在Mode栏选择JTAG,选中打勾
下载文件右侧第一个小框。单击Hardware
Setup,双击ByteBlasterMV→close。
(7)
单击Start,当Progress显示100%以及在底部显示“Configuration
Succeeded”时,即可以在试验箱上进行操作了。
七、硬件测试
<
br>下载到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语句只能用在进程中,否则是错的。
(4)利用std_logic_vector可以简化,使表达更直观,更方便。
九、实验心得
实验二
模可变计数器设计
一、
实验目的
(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,要用三个静态
数码管,因此mm
m要设计成一个std_logic_vector(11 downto
0)共12位,来对应
三个数码管的输出。
(6)因为std_logic_vector(11 downto 0)这是二进制的加法,因此不
能直接显
示,否则就出现错误了,因此涉及到了二进制转换为十进制。当低八位为
100110
10,前四位与后四位分别加6,即01100110;若低四位出现1010,要加6,
即0110,
进行调整。
(7)计数器的加一和调整是逻辑上是不同条件的相与,因此用到if语句。
四
、实验器材
PC机,试验箱,quartus软件
五、实验程序
library ieee;
use _logic_;
use
_logic_;
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:=
---给limit赋值,为m=0时为22,
else limit:=
---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
elsif mmm(3 downto 0)=
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→Progra
mmer,在Mode栏选择JTAG,选中打勾
下载文件右侧第一个小框。单击Hardware
Setup,双击ByteBlasterMV→close。
(7)
单击Start,当Progress显示100%以及在底部显示“Configuration
Succeeded”时,即可以在试验箱上进行操作了。
七、硬件测试
<
br>下载到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语句只能用在进程中,否则是错的。
(4)利用std_logic_vector可以简化,使表达更直观,更方便。
九、实验心得