概述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNTMOD12 IS
PORT(
CLK,EN,CLR:IN STD_LOGIC;
QA,QB,QC,QD:OUT STD_LOGIC
);
END CNTMOD12;
ARCHITECTURE RTL OF CNTMOD12 IS
SIGNAL CNT:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
QD<=CNT(3);
QC<=CNT(2);
QB<=CNT(1);
QA<=CNT(0);
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN CNT<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='0' THEN CNT<=CNT;
ELSE
IF CNT="1011" THEN CNT<="0000";
ELSE CNT<=CNT+'1';
END IF;
END IF;
END IF;
END PROCESS;
END RTL;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY BICNT IS
PORT(
CLK,UPDN,CLR:IN STD_LOGIC;
QA,QB,QC,QD,QE,QF:OUT STD_LOGIC
);
END BICNT;
ARCHITECTURE RTL OF BICNT IS
SIGNAL CNT:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
QA<=CNT(0);
QB<=CNT(1);
QC<=CNT(2);
QD<=CNT(3);
QE<=CNT(4);
QF<=CNT(5);
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN CNT<="000000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF UPDN='1' THEN
IF CNT="111111" THEN CNT<="000000";
ELSE CNT<=CNT+'1';
END IF;
ELSE
IF CNT="000000" THEN CNT<="111111";
ELSE CNT<=CNT-'1';
END IF;
END IF;
END IF;
END PROCESS;
END RTL;
我第一次写的代码如上所示,我判断了边界值,但实际上我们观察题目可知,即使不对边界值进行判断也对结果没有影响,因为这是6位数,到达边界后会自动变成“000000”或“111111”,和上面的那一题不一样,上面那一题是四位数,而且1011并没有到达1111,所以必须进行判断。
故修改后的代码为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY BICNT IS
PORT(
CLK,UPDN,CLR:IN STD_LOGIC;
QA,QB,QC,QD,QE,QF:OUT STD_LOGIC
);
END BICNT;
ARCHITECTURE RTL OF BICNT IS
SIGNAL CNT:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
QA<=CNT(0);
QB<=CNT(1);
QC<=CNT(2);
QD<=CNT(3);
QE<=CNT(4);
QF<=CNT(5);
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN CNT<="000000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF UPDN='1' THEN CNT<=CNT+'1';
ELSE CNT<=CNT-'1';
END IF;
END IF;
END PROCESS;
END RTL;
最后
以上就是微笑大叔为你收集整理的数字电路ppt复习的全部内容,希望文章能够帮你解决数字电路ppt复习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复