资源描述
EDA实验报告
班级:
姓名:
学号:
指导老师:雷波
实验一 3-8译码器的实现
1.1 3-8译码器的文本描述
代码如下:
library ieee;
use ieee.std_logic_1164.all;
entity program1 is
port (A,B,C:in std_logic;
D0,D1,D2,D3,D4,D5,D6,D7:out std_logic);
end entity program1;
architecture one of program1 is
signal abc :std_logic_vector(2 downto 0);
signal D :std_logic_vector(7 downto 0);
begin
abc <= A&B&C;
process(abc)
begin
case abc is
when "000"=>D<="10000000";
when "100"=>D<="01000000";
when "010"=>D<="00100000";
when "110"=>D<="00010000";
when "001"=>D<="00001000";
when "101"=>D<="00000100";
when "011"=>D<="00000010";
when "111"=>D<="00000001";
when others => null;
end case;
end process;
D0<=D(7);D1<=D(6);D2<=D(5);D3<=D(4);
D4<=D(3);D5<=D(2);D6<=D(1);D7<=D(0);
end architecture one;
1.2 真值表
表1-2 3-8译码器真值表
A B C
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0
0 0 0 0 0 0 0 1
1 0 0
0 0 0 0 0 0 1 0
0 1 0
0 0 0 0 0 1 0 0
1 1 0
0 0 0 0 1 0 0 0
0 0 1
0 0 0 1 0 0 0 0
1 0 1
0 0 1 0 0 0 0 0
0 1 1
0 1 0 0 0 0 0 0
1 1 1
1 0 0 0 0 0 0 0
1.3 仿真结果
图1.3 仿真波形图
实验二 扫描电路设计
2.1 原理图
图2.1 原理图
2.2 片选模块仿真(图2.1中模块1)
2.1.1 文本代码
library ieee;
use ieee.std_logic_1164.all;
entity program2 is
port (A,B,C:in std_logic;
D0,D1,D2,D3,D4,D5,D6,D7:out std_logic);
end entity program2 ;
architecture one of program2 is
signal abc :std_logic_vector(2 downto 0);
signal D :std_logic_vector(7 downto 0);
begin
abc <= A&B&C;
process(abc)
begin
case abc is
when "000"=>D<="11111110";
when "100"=>D<="11111101";
when "010"=>D<="11111011";
when "110"=>D<="11110111";
when "001"=>D<="11101111";
when "101"=>D<="11011111";
when "011"=>D<="10111111";
when "111"=>D<="01111111";
when others => null;
end case;
end process;
D0<=D(7);D1<=D(6);D2<=D(5);D3<=D(4);D4<=D(3);D5<=D(2);D6<=D(1);
D7<=D(0);
end architecture one;
2.2.2 原理图
图2.2.2 片选模块原理图
2.2.3 仿真结果
图2.2.3 仿真结果图
2.3段选模块仿真(图2.1中模块2)
2.3.1 文本代码
library ieee;
use ieee.std_logic_1164.all;
entity LED7S IS
port (A:in std_logic_vector(3 downto 0);
LED7S:out std_logic_vector(7 downto 0));
end;
architecture one of LED7S IS
begin
process(A)
begin
case A is
when "0000" => LED7S <="01000000";
when "0001" => LED7S <="01111001";
when "0010" => LED7S <="00100100";
when "0011" => LED7S <="00110000";
when "0100" => LED7S <="00011001";
when "0101" => LED7S <="00010010";
when "0110" => LED7S <="00000010";
when "0111" => LED7S <="01111000";
when "1000" => LED7S <="00000000";
when "1001" => LED7S <="00010000";
when "1010" => LED7S <="00001000";
when "1011" => LED7S <="00000011";
when "1100" => LED7S <="01000110";
when "1101" => LED7S <="00100001";
when "1110" => LED7S <="00000110";
when "1111" => LED7S <="00001110";
when others => NULL;
end case;
end process;
end;
2.3.2 仿真结果
图2.3.2 段选模块仿真结果图
2.4 分频模块仿真(图2.1中模块3)
2.4.1 文本代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_UNSIGNED.all;
entity DVF IS
port (CLK:in std_logic;
FOUT:out std_logic);
end;
architecture one of DVF IS
signal FULL:std_logic;
begin
P_REG: process(CLK)
variable CNT8:integer range 1 to 2;
begin
if CLK'event and CLK='1' then
if CNT8=2 then
CNT8:=1;
FULL<='1';
else CNT8:=CNT8+1;
FULL<='0';
end if;
end if;
end process P_REG;
P_DIV: process(FULL)
variable CNT2:std_logic;
begin
if FULL'event and FULL='1' then
CNT2:=NOT CNT2;
if CNT2='1'then FOUT<='1';
else FOUT<='0';
end if;
end if;
end process P_DIV;
end;
2.4.2 仿真分析
参数分析:根据程序2.4.1我们可以知道,控制实现分频的是变量CNT8的最大值,设其值为n(n=1,2,3...),通过改变n的值即得到2n分频,下面的波形图为分别取n=2,n=3,n=5时的输出波形。
(1) 图2.4.2-1为n=2时的仿真结果
图2.4.2-1 n=2的仿真波形
(2) 图2.4.2-2为n=3时的仿真结果
图2.4.2-2 n=3的仿真波形
(3) 图2.4.2-3为n=5时的仿真结果
图2.4.2-3 n=5的仿真波形
实验三 全减器的实现
3.1 一位二进制全减器
3.1.1 原理简介
如图3.1.1,全减器可实现二进制数a与b的计算,输出以差值Dout和借位Cout表示。
图3.1.1 全减器电路符号
3.1.2 全减器真值表
表3.1.2 全减器真值表
输入
输出
a
b
ci
Dout
Cout
0
0
0
0
0
0
0
1
1
1
0
1
0
1
1
0
1
1
0
1
1
0
0
1
0
1
0
1
0
0
1
1
0
0
0
1
1
1
1
1
3.2 文本文件调用图形文件并用例化语句实现全减器
3.2.1 利用半减器实现全减器原理图
如图3.2.1是利用两个半减器和一个或门实现的一位二进制全减器原理图:
图3.2.1 全减器实现原理图
3.2.2 半减器h_suber
(1)半减器h_suber真值表
如下,表3.2.2为半减器真值表:
表3.2.2 半减器h_suber真值表
输入
输出
a
b
so
co
0
0
0
0
0
1
1
1
1
0
1
0
1
1
0
0
(2)半减器h_suber图形实现
如下,图3.2.2-1为半减器原理图:
图3.2.2-1 半减器h_suber原理图
(3)半减器h_suber仿真结果
如下,图3.2.2-2为半减器仿真结果图:
图3.2.2-2 半减器h_suber仿真结果
将仿真结果与真值表3.2.2对比,结果为正确。
3.2.3 或门or2a
(1)或门or2a真值表
如下,表3.2.3为或门or2a真值表:
表3.2.3 或门or2a真值表
输入
输出
a
b
c
0
0
0
0
1
1
1
0
1
1
1
1
(2)或门or2a图形实现
如下,图3.2.3-1为或门or2a原理图:
图3.2.2-1 或门or2a原理图
(3)仿真结果
如下,图3.2.2-2为或门or2a仿真结果图:
图3.2.2-2 或门or2a仿真结果
将仿真结果与真值表3.2.3对比,结果为正确。
3.2.4 全减器f_suber
(1)例化语句调用图形文件
程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity f_suber IS
port(ain,bin,cin: in std_logic;
dout,cout: out std_logic);
end entity f_suber;
architecture one of f_suber IS
COMPONENT h_suber --调用半减器声明语句
port(a,b: in std_logic;
co,so: out std_logic);
end COMPONENT;
COMPONENT or2a --调用或门声明语句
port(a,b: in std_logic;
c: out std_logic);
end COMPONENT;
SIGNAL d,e,f: std_logic; --定义三个信号作为内部连接线
begin
u1:h_suber port MAP(a=>ain,b=>bin,co=>d,so=>e); --例化语句
u2:h_suber port MAP(a=>e,b=>cin,co=>f,so=>dout); --例化语句
u3:or2a port MAP(a=>f,b=>d,c=>cout); --例化语句
end architecture one;
(2)工程文件配置
如下,图3.2.4-1为工程文件配置:
图3.2.4-1 工程文件配置
(3)仿真结果
如下,图3.2.4-2全减器f_suber仿真结果图
图3.2.4-2 全减器f_suber仿真结果
将仿真结果与真值表3.1.2对比,结果为正确。
3.3 文本文件调用文本文件并用例化语句实现全减器
3.3.1 半减器h_suber的文本实现
(1)根据表3.2.2半减器h_suber真值表可编写代码如下:
library ieee;
use ieee.std_logic_1164.all;
entity h_suber is
port(a,b:in std_logic;
co,so:out std_logic);
end entity h_suber;
architecture one of h_suber is
signal ab:std_logic_vector(1 downto 0);
begin
ab<=a&b;
process(ab)
begin
case ab is
when "00"=> so<='0';co<='0';
when "01"=> so<='1';co<='1';
when "10"=> so<='1';co<='0';
when "11"=> so<='0';co<='0';
when others=>NULL;
end case;
end process;
end architecture one;
(2)半减器h_suber仿真结果
运行3.3.1中的程序得到仿真结果如下:
图3.3.1 半减器h_suber仿真结果
将仿真结果与真值表3.2.2对比,结果为正确。
3.3.2 或门or2a的文本实现
(1)根据表3.2.3或门or2a真值表可编写代码如下:
library ieee;
use ieee.std_logic_1164.all;
entity or2a is
port(a,b:in std_logic;
c:out std_logic);
end entity or2a;
architecture one of or2a is
signal ab:std_logic_vector(1 downto 0);
begin
ab<=a&b;
process(ab)
begin
case ab is
when "00"=> c<='0';
when "01"=> c<='1';
when "10"=> c<='1';
when "11"=> c<='1';
when others=>NULL;
end case;
end process;
end architecture one;
(2)运行3.3.2中的程序得到或门or2a仿真结果如下:
图3.3.2 或门or2a仿真结果
将仿真结果与真值表3.2.3对比,结果为正确。
3.3.3 全减器f_suber
(1)文本文件调用文本文件
程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity f_suber IS
port(ain,bin,cin: in std_logic;
dout,cout: out std_logic);
end entity f_suber;
architecture one of f_suber IS
COMPONENT h_suber
port(a,b: in std_logic;
co,so: out std_logic);
end COMPONENT;
COMPONENT or2a
port(a,b: in std_logic;
c: out std_logic);
end COMPONENT;
SIGNAL d,e,f: std_logic;
begin
u1:h_suber port MAP(a=>ain,b=>bin,co=>d,so=>e);
u2:h_suber port MAP(a=>e,b=>cin,co=>f,so=>dout);
u3:or2a port MAP(a=>f,b=>d,c=>cout);
end architecture one;
(2)工程文件配置
如下,图3.3.3-1为工程文件配置:
图3.3.3-1 工程文件配置
(3)仿真结果
如下,图3.3.3-2为全减器f_suber仿真结果图
图3.3.3-2 全减器f_suber仿真结果
将仿真结果与真值表3.1.2对比,结果为正确。
3.4 图形文件调用图形文件实现全减器
3.4.1 半减器h_suber的图形实现
半减器h_suber的图形实现已经在3.2.2(2)中建立了文件,只需在此工程中添加该文件,并在全减器原理图中调用半减器文件即可;
3.4.2 或门or2a的图形实现
或门or2a的图形实现已经在3.2.3(2)中建立了文件,只需在此工程中添加该文件,并在全减器原理图中调用半减器文件即可;
3.4.3 全减器f_suber原理图
(1)全减器f_suber原理图已在图3.2.1中表示出来。
(2)工程文件配置
如下,图3.4.3-1为工程文件配置:
图3.4.3-1 工程文件配置
(3)仿真结果
如下,图3.4.3-2为全减器f_suber仿真结果图
图3.4.3-2 全减器f_suber仿真结果
将仿真结果与真值表3.1.2对比,结果为正确。
展开阅读全文