江苏大学京江学院Array JINGJIANG COLLEGE OF J I A N G S U U N I V E R S I T Y 课程实验报告
电子设计自动化实验报告
班级:
学号:
姓名:
实验一半加器和全加器的设计
一、实验目的
1. 进一步熟悉Max+PlusII软件的使用
2. 学习用图形输入方式和VHDL语言输入方式设计数字电路
3. 学习用元件例化语句进行结构化设计
二、实验内容
1. 用图形方式设计一位半加器
2.用VHDL语言设计一位半加器
3.用图形方式设计全加器
4.用元件例化方式设计全加器
三、设计实现
1. 用图形方式设计一位半加器
原理图:
仿真波形:
2.用VHDL语言设计全加器
原理图:
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY or2 IS
PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);
END ENTITY or2;
ARCHITECTURE fu1 OF or2 IS
BEGIN
c<=a OR b;
END ARCHITECTURE fu1;
---半加器描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY half_adder IS
PORT(a,b:IN STD_LOGIC;s,c:OUT STD_LOGIC);
END ENTITY half_adder ;
ARCHITECTURE fu1 OF half_adder IS
BEGIN
s<=a XOR b;
c<=a and b;
END ARCHITECTURE fu1;
--1位二进制全加器顶层设计描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_adder IS
PORT( A,B,Cin :IN STD_LOGIC;sum,cout :OUT STD_LOGIC;);
END ENTITY f_adder IS
COMPONENT h_adder2;
PORT( a,b:IN STD_LOGIC;
c,s :OUT STD_LOGIC);
END COMPONENT;
COMPONENT or2
PORT( a,b :IN STD_LOGIC; c :OUT STD_LOGIC);
END COMPOMENT;
SINGNAL d,e,f : STD_LOGIC;
BEGIN
u1 :h_adder2 PORT MAP( A,B,d,e);
u2 :h_adder2 PORT MAP(d,Cin,f,sum);
u3 : or2 PORT MAP(e,f,cout);
END ARCHTECTURE fd1;
仿真波形:
实验二四选一数据选择器的设计
一、实验目的
1. 进一步熟悉Max+PlusII软件的使用
2. 学习VHDL语言中顺序语句和并行语句的使用
二、实验内容
1. 用if语句实现
2. 用case语句实现
3. 用when…else语句实现
4. 用with…select …when语句实现
三、设计实现
1. if
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41_3 IS
PORT(a,b,c,d:IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END mux41_3;
ARCHITECTURE one OF mux41_3 IS
BEGIN
PROCESS(sel)
BEGIN
IF sel="00" THEN
y<=a;
ELSIF sel="01" THEN
y<=b;
ELSIF sel="10" THEN
y<=c;
ELSE
y<=d;
END IF;
END PROCESS;
END one;
仿真波形:
2. case
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41_4 IS
PORT(a,b,c,d:IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END mux41_4;
ARCHITECTURE one OF mux41_4 IS
BEGIN
PROCESS(sel)
BEGIN
CASE sel IS
WHEN "00"=>y<=a;
WHEN "01"=>y<=b;
WHEN "10"=>y<=c;
WHEN "11"=>y<=d;
WHEN OTHERS=>y<="XX";
END CASE;
END PROCESS;
END one;
3.When else
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT(a,b,c,d:IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END mux41;
ARCHITECTURE one OF mux41 IS
BEGIN
y<=a WHEN sel="00" ELSE
b WHEN sel="01" ELSE
c WHEN sel="10" ELSE
d WHEN sel="11" ELSE
"xxx"WHEN OTHERS;
END one;
4.with select
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mux41_2 IS
PORT(a,b,c,d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END mux41_2;
ARCHITECTURE one OF mux41_2 IS
BEGIN
WITH sel SELECT
y<=a WHEN "00",
b WHEN "01",
c WHEN "10",
d WHEN "11",
"XXXX" WHEN OTHERS;
END one;
实验三可逆计数器的设计
一、实验目的
1. 进一步熟悉Max+PlusII软件的使用
2. 学习简单时序逻辑电路的设计
二、实验内容
1.用VHDL语言设计可逆计数器的设计
三、设计实现
源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY bicnt IS
PORT(dir :IN STD_LOGIC;
clk :IN STD_LOGIC;
q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END bicnt;
ARCHITECTURE one OF bicnt IS
BEGIN
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1')THEN
IF dir='0'THEN q<=q+1;
ELSE q<=q-1;
END IF;
END IF;
END PROCESS;
END one;
仿真波形:。