模111计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实 验 报 告
实验日期: 学 号:
姓 名:
实验名称:
模111计数器
总 分:
一、实验原理
计数器是一种常用的可统计时钟脉冲个数的时序逻辑器件。计数器中的“数”是触发器的状态组合,即编码。计数器循环一次所包含的状态总数就称作模。
计数器应用广泛,适用于计数、分频、运算、定时、脉冲产生等。计数器种类繁多,按级联方式可分为同步计数器和异步计数器;按数字增减方式可分为加法计数器、减法计数器和可逆计数器。按编码方式可分为二进制计数器、十进制计数器等。
二、实验框图
三、实验设计
对于模111计数器的三位数字采用三个模10计数器和设置计数清零的方法,分别控制模111计数器的三位。设置时钟信号clock ,清零端aclr ,时钟信号使能端clk_en ,输入端cin ,计数使能端cnt_en ,进位输出端cout ,数值输出端q (4位二进制表示0-9)。运用语句b(0) and s(0) and g(0),即计数到111时,aclr 清零有效;b(0) and s(0) and (not g(0)),即计数到110时,cout 输出1即成功进位。 (1)模10计数器VHDL (LPM 定制)
LIBRARY ieee;
USE ieee.std_logic_1164.all; LIBRARY lpm;
USE lpm.all; ENTITY cnt10 IS PORT (
aclr : IN STD_LOGIC ;
时钟信号clk 模4计数器
2-3译码器
确定位选
时钟信号clock 模111
计数器
3选1多路选择器
七段译码器
确定段选
cin : IN STD_LOGIC ;
clk_en : IN STD_LOGIC ;
clock : IN STD_LOGIC ;
cnt_en : IN STD_LOGIC ;
cout : OUT STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );
END cnt10;
ARCHITECTURE SYN OF cnt10 IS
SIGNAL sub_wire0 : STD_LOGIC ;
SIGNAL sub_wire1 : STD_LOGIC_VECTOR (3 DOWNTO 0); COMPONENT lpm_counter
GENERIC (
lpm_direction : STRING;
lpm_modulus : NATURAL;
lpm_port_updown : STRING;
lpm_type : STRING;
lpm_width : NATURAL
);
PORT (
cin : IN STD_LOGIC ;
clk_en : IN STD_LOGIC ;
aclr : IN STD_LOGIC ;
clock : IN STD_LOGIC ;
cout : OUT STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
cnt_en : IN STD_LOGIC
);
END COMPONENT;
BEGIN
cout <= sub_wire0;
q <= sub_wire1(3 DOWNTO 0);
lpm_counter_component : lpm_counter
GENERIC MAP (
lpm_direction => "UP",
lpm_modulus => 10,
lpm_port_updown => "PORT_UNUSED",
lpm_type => "LPM_COUNTER",
lpm_width => 4
)
PORT MAP (
cin => cin,
clk_en => clk_en,
aclr => aclr, clock => clock, cnt_en => cnt_en, cout => sub_wire0, q => sub_wire1 ); END SYN;
(2)模111计数器 library ieee;
use ieee.std_logic_1164.all; entity cnt111 is
port(clock,aclr,clk_en,cnt_en,cin:in std_logic; bw,sw,gw:out std_logic_vector(3 downto 0); cout:out std_logic); end cnt111; architecture arch of cnt111 is
component cnt10
port(aclr:in std_logic; cin:in std_logic; clk_en:in std_logic; clock:in std_logic; cnt_en:in std_logic; cout:out std_logic; q:out std_logic_vector (3 downto 0)); end component;
signal aclr1:std_logic; signal c1,c2,c3:std_logic;
signal b,s,g:std_logic_vector(3 downto 0); begin
x1:cnt10 port map(aclr or aclr1,cin,clk_en,clock,cnt_en,c1,gw); x2:cnt10 port map(aclr or aclr1,c1,clk_en,clock,cnt_en,c2,sw); x3:cnt10 port map(aclr or aclr1,c2,clk_en,clock,cnt_en,c3,bw); aclr1<=bw(0) and sw(0) and gw(0);
cout<=bw(0) and sw(0) and (not gw(0));
end arch;
bw 表示计数器百位数值,sw 表示计数器十位数值,gw 表示计数器个位数值,皆为四位二进制 c1控制个位数值的模10计数器的输出,c2控制十位数值的模10计数器的输出,c3控制百位数值的模10计数器的输出 cin 为控制个位数值的模10计数器的输入,其输出c1作为控制十位数值的模10计数器的输入,其输出c2作为控制百位数值的模10计数器的输入 计数至110,
cout 输出1,即进位。 计数至111,实现自动清零功能