基于EDA的三位十进制计数器
- 格式:wps
- 大小:555.50 KB
- 文档页数:7
三位十进制计数器
一、设计目的
采用文本输入法设计三位十进制加法计数器。
编写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;