基于EDA的三位十进制计数器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三位十进制计数器

一、设计目的

采用文本输入法设计三位十进制加法计数器。

编写VHDL源代码,得出正确的仿真波形,并在实验开发系统上进行硬件演示。

二、设计内容

设计一个三位10进制计数器,对计数器相关的理论进行分析、归纳和总结;三位10进制计数器的结构组成及原理分析。程序代码(含注释);给出程序中主要函数或者语句的功能说明和使用说明;给出程序仿真运行结果和图表、以及实验结果分析和总结。

三、计数器设计原理

计数器的输入信号是计数信号(CLK),门控信号是手动清零信号(RESET)、手动允许计数(ENA)。清零信号Rest为1时,保持在清零状态,计数脉冲上升沿无效;允许计数端为0时,为保持状态,这时保持至最后一个计数,计数脉冲上升沿无效;清零信号为0,允许计数信号为1时,计数器上升沿脉冲计数。

计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数字运算等。计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。

三位十进制计数显示器的设计分三步完成。先设计十进制计数电路,再设计显示译码电路,最后建立一个顶层文件将两者连接起来。

四、设计程序代码

1)三位十进制计数程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COU10 IS

PORT(

CLK,RESET,CIN :IN STD_LOGIC;

CO :OUT STD_LOGIC;

BCDAP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDBP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDCP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

);

END COU3;

ARCHITECTURE BEHAVE OF COU3 IS

SIGNAL BCDAN:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL BCDBN:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL BCDCN:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

BCDAP<=BCDAN;

BCDBP<=BCDBN;

BCDCP<=BCDCN;

KK1:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDAN<="0000";

ELSIF(CIN='1')THEN

IF(BCDAN="1001")THEN

BCDAN<="0000";

ELSE

BCDAN<=BCDAN+'1';

END IF;

END IF;

END IF;

END PROCESS KK1;

KK2:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDBN<="0000";

ELSIF(CIN='1') AND (BCDAN="1001")THEN

IF(BCDBN="1001")THEN

BCDBN<="0000";

ELSE

BCDBN<=BCDBN+'1';

END IF;

END IF;

END IF;

END PROCESS KK2;

KK3:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDCN<="0000";

ELSIF(CIN='1') AND (BCDBN="1001") AND (BCDAN="1001")THEN

IF(BCDCN="1001")THEN

BCDCN<="0000";

ELSE

BCDCN<=BCDCN+'1';

END IF;

END IF;

END IF;

END PROCESS KK3;

END BEHAVE;

2)显示译码器程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY YIMAQI IS

PORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END SEG7;

ARCHITECTURE BEHAVE OF SEG7 IS

SIGNAL INDATA:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

INDATA<=II;

PROCESS(INDATA)

BEGIN

CASE INDATA IS

WHEN"0000"=> Y<="0000001";

WHEN"0001"=> Y<="1001111";

WHEN"0010"=> Y<="0010010";

WHEN"0011"=> Y<="0000110";

WHEN"0100"=> Y<="1001100";

WHEN"0101"=> Y<="0100100";

WHEN"0110"=> Y<="0100000";

WHEN"0111"=> Y<="0001111";

WHEN"1000"=> Y<="0000000";

WHEN"1001"=> Y<="0000100";

WHEN"1010"=> Y<="0001000";

WHEN"1011"=> Y<="1100000";

WHEN"1100"=> Y<="0110001";

WHEN"1101"=> Y<="1000010";

WHEN"1110"=> Y<="0110000";

WHEN"1111"=> Y<="0111000";

WHEN OTHERS=>Y<="XXXXXXX";

END CASE;

END PROCESS;

END BEHAVE;

相关文档
最新文档