VHDL60进制计数器加法器设计实验
发布时间:2024-11-04
发布时间:2024-11-04
VHDL60进制计数器加法器设计实验
实验四、计数器设计实验
1、实验目的
1)学习计数器不同设计方法。
2)学习掌握VHDL中不同输出类型在具体应用时的区别(OUT、INOUT、BUFFER)。
3)学习掌握时序电路仿真方法。
2、实验内容
1)采用VHDL设计方法,设计一个60进制计数器,采用BCD码输出。
2)给出上述设计的仿真结果。
3、实验设备
1)清华同方PⅣ 2.4G\256M60G
2)ISE 6.2i—Windows软件系统
4、实验步骤
1)创建工程
2)VHDL输入
3)检查语法
4)建立测试激励波形进行仿真
5、实验程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT( CLK,EN,CR :IN STD_LOGIC;
VHDL60进制计数器加法器设计实验
LD :IN STD_LOGIC;
D :IN STD_LOGIC_VECTOR(7 DOWNTO 0); CO :OUT STD_LOGIC;
Q :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COUNT;
ARCHITECTURE A OF COUNT IS
SIGNAL QN :STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
CO<='1' WHEN(QN=X"59" AND EN='1')
ELSE'0';
PROCESS(CLK,CR)
BEGIN
IF(CR='0')THEN
QN<=X"00";
ELSE
IF(CLK'EVENT AND CLK='1') THEN
IF (LD='0') THEN
QN<=D;
ELSIF(EN='1') THEN
IF QN(3 DOWNTO 0)=9 THEN
QN(3 DOWNTO 0)<="0000";
IF QN(7 DOWNTO 4)=5 THEN
QN(7 DOWNTO 4)<="0000";
ELSE
QN(7 DOWNTO 4)<= QN(7 DOWNTO 4)+1;
END IF;
ELSE
QN(3 DOWNTO 0)<= QN(3 DOWNTO 0)+1;
END IF ;
END IF;
END IF ;
END IF;
END PROCESS;
Q<=QN;
END A;
6、仿真结果
VHDL60进制计数器加法器设计实验
1)测试激励波形
2)仿真结果
VHDL60进制计数器加法器设计实验
从仿真结果来看输出q从00000000逐渐加1变化到01011001,然后又变回到00000000,由此可以看出上述电路完成了六十进制计数器的功能。
VHDL60进制计数器加法器设计实验
实验七、加法器设计实验
1、实验目的
1)学习了解加法器工作原理。
2)学习用VHDL语言设计全加器的设计方法。
3)学习使用元件例化的方法设计多位加法器。
2、实验原理
两个n位二进制数相加的过程,是从最低有效位开始相加,形成和数并传送进位最后得到结果。最低位只有加数和被加数相加,这种两个一位数相加称为半加;完成加数、被加数、低位的进位数三个一位数相加称为全加。实现半加运算的电路称为半加器,实现全加运算的电路称为全加器。
全加器(Full Adder)的真值表如下表所示,其中Ci是低位进位,Ci+1是向高位的进位。
全 加 器 的 真 值 表
VHDL60进制计数器加法器设计实验
全加器(Full Adder)的逻辑图请参考下图。
全加器的逻辑图
由全加器的真值表可写出 Si、Ci+1 的逻辑表达式:
Si=Ai+Bi+Ci
Ci+1=AiBi+Ci(Ai+Bi)
3、实验内容
1)用VHDL语言设计全加器。
2)用元件例化方法设计一个四位二进制加法器。
4、实验设备
1)清华同方PⅣ 2.4G\256M60G
2)ISE 6.2i—Windows软件系统
5、实验步骤
1)创建工程
2)VHDL输入
3)检查语法
4)建立测试激励波形进行仿真
6、实验程序
VHDL60进制计数器加法器设计实验
1)全加器源程序
library IEEE;
use IEEE.std_logic_1164.all;
entity adder is
port (a : in std_logic;
b : in std_logic;
cin : in std_logic;
sum : out std_logic;
cout : out std_logic);
end adder;
architecture Behavioral of adder is
begin
sum <= (a xor b) xor cin;
cout <= (a and b) or (cin and a) or (cin and b); end Behavioral;
2)四位二进制加法器源程序
library IEEE;
use IEEE.std_logic_1164.all;
entity adderN is
generic(N : integer := 4);
port (a : in std_logic_vector(N downto 1); b : in std_logic_vector(N downto 1); cin : in std_logic;
sum : out std_logic_vector(N downto 1); cout : out std_logic);
end adderN;
architecture structural of adderN is
component adder
port (a : in std_logic;
b : in std_logic;
cin : in std_logic;
sum : out std_logic;
cout : out std_logic);
end component;
signal carry : std_logic_vector(0 to N); begin
carry(0) <= cin;
cout <= carry(N);
-- instantiate a single-bit adder N times gen: for I in 1 to N generate
add: adder port map(
a => a(I),
VHDL60进制计数器加法器设计实验
b => b(I),
cin => carry(I - 1), sum => sum(I),
cout => carry(I)); end generate;
end structural;
7、仿真结果
1)测试激励波形
2)仿真结果
VHDL60进制计数器加法器设计实验
从仿真结果来看,源程序正确的完成了四位二进制加法器的功能。