我是靠谱客的博主 微笑大叔,最近开发中收集的这篇文章主要介绍数字电路ppt复习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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复习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部