实验四.docx
《实验四.docx》由会员分享,可在线阅读,更多相关《实验四.docx(11页珍藏版)》请在冰豆网上搜索。
实验四
EDA实验报告
班级:
通工0905班
姓名:
赵鹏
班内序号:
17
实验四:
组合逻辑电路设计
(一)
——三态门、数选器、逻辑运算器
一、实验目的
1.掌握三态门、数选器、逻辑运算器三种组合逻辑电路的设计方法,及其VHDL描述方法。
2.掌握利用CPLD器件开发组合逻辑电路的方法。
二、实验器材
PC、可编程逻辑实验电路板、下载线、USB电源线、双踪示波器、数字万用表、导线若干、
三、实验原理
(1)多数表决器
源代码:
Libraryieee;
Useieee.std_logic_1164.all;
Entitybiaojueis
Port(a:
instd_logic_vector(3downto0);
y:
outstd_logic);
End;
Architecturertlofbiaojueis
Begin
Process(a)
Begin
Caseais
When"0000"=>y<='0';
When"0001"=>y<='0';
When"0010"=>y<='0';
When"0011"=>y<='0';
When"0100"=>y<='0';
When"0101"=>y<='0';
When"0110"=>y<='0';
When"0111"=>y<='1';
When"1000"=>y<='0';
When"1001"=>y<='0';
When"1010"=>y<='0';
When"1011"=>y<='1';
When"1100"=>y<='0';
When"1101"=>y<='1';
When"1110"=>y<='1';
When"1111"=>y<='1';
Whenothers=>y<='Z';
Endcase;
Endprocess;
End;
(2)二位二进制相乘电路
源代码:
libraryieee;
useieee.std_logic_1164.all;
entityxiangchenis
port(A,B,C,D:
instd_logic;
st:
instd_logic;
F:
outstd_logic_vector(3downto0));
end;
architecturebehaviorofxiangchenis
signalg,h,j,k,l,m,z,x,v,n,q,w,e:
std_logic;
begin
process(A,B,C,D,st)
begin
if(st='1')then
g<=AandB;
h<=gandC;
F(3)<=handD;
l<=AandC;
m<=BandD;
z<=notm;
F
(2)<=zandl;
e<=handD;
x<=note;
v<=BandC;
n<=AandD;
q<=vandx;
w<=nandx;
F
(1)<=qorw;
F(0)<=m;
elseF<="ZZZZ";
endif;
endprocess;
end;
(3)二进制全减电路
源代码:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entitye4_2_jian2is
Port(a,b,ci:
instd_logic;
f,co:
outstd_logic);
End;
Architecturerel_1ofe4_2_jian2is
Begin
Process(a,b,ci)
Begin
If(a='0'andb='0'andci='0')then
F<='0';co<='0';
elsif(a='0'andb='0'andci='1')then
F<='1';co<='1';
elsif(a='0'andb='1'andci='0')then
F<='1';co<='1';
elsif(a='0'andb='1'andci='1')then
F<='0';co<='1';
elsif(a='1'andb='0'andci='0')then
F<='1';co<='0';
elsif(a=’1’andb=’0’andci=’1’)then
F<=’0’;co<=’0’;
elsif(a=’1’andb=’1’andci=’0’)then
F<=’0’;co<=’0’;
else
F<=’1’;
Co<=’1’;
Endif;
Endprocess;
End;
四、实验内容
(1)设计一个多数表决器,要求:
①当输入A、B、C、D有三个或三个以上为1时输出为F;输入为其他状态是输出0。
②写出实验内容的真值表及逻辑表达式。
③编写出实验该电路的VHDL程序。
④用MAX+PLUSⅡ进行仿真。
⑤将编写好的程序下载到CPLD芯片里,观察结果。
(2)设计一个二位二进制数相乘电路,要求:
①写出实验内容的真值表。
②编写出实验该电路的VHDL程序。
③用MAX+PLUSⅡ进行仿真。
④将编写好的程序下载到CPLD芯片里,用发光二极管观察结果。
(3)设计一个一位二进制全减器电路,要求:
①输入为被减数、减数和来自低位的借位,输出为两数之差和向高位的借位。
②编写出实验该电路的VHDL程序。
③用MAX+PLUSⅡ进行仿真。
④将编写好的程序下载到CPLD芯片里,观察结果。
五、实验过程与结果
(1)多数表决器
源代码:
Libraryieee;
Useieee.std_logic_1164.all;
Entitybiaojueis
Port(a:
instd_logic_vector(3downto0);
y:
outstd_logic);
End;
Architecturertlofbiaojueis
Begin
Process(a)
Begin
Caseais
When"0000"=>y<='0';
When"0001"=>y<='0';
When"0010"=>y<='0';
When"0011"=>y<='0';
When"0100"=>y<='0';
When"0101"=>y<='0';
When"0110"=>y<='0';
When"0111"=>y<='1';
When"1000"=>y<='0';
When"1001"=>y<='0';
When"1010"=>y<='0';
When"1011"=>y<='1';
When"1100"=>y<='0';
When"1101"=>y<='1';
When"1110"=>y<='1';
When"1111"=>y<='1';
Whenothers=>y<='Z';
Endcase;
Endprocess;
End;
仿真波形:
(2)二位二进制相乘电路
源代码:
libraryieee;
useieee.std_logic_1164.all;
entityxiangchenis
port(A,B,C,D:
instd_logic;
st:
instd_logic;
F:
outstd_logic_vector(3downto0));
end;
architecturebehaviorofxiangchenis
signalg,h,j,k,l,m,z,x,v,n,q,w,e:
std_logic;
begin
process(A,B,C,D,st)
begin
if(st='1')then
g<=AandB;
h<=gandC;
F(3)<=handD;
l<=AandC;
m<=BandD;
z<=notm;
F
(2)<=zandl;
e<=handD;
x<=note;
v<=BandC;
n<=AandD;
q<=vandx;
w<=nandx;
F
(1)<=qorw;
F(0)<=m;
elseF<="ZZZZ";
endif;
endprocess;
end;
仿真波形:
(3)二进制全减电路
源代码:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entitye4_2_jian2is
Port(a,b,ci:
instd_logic;
f,co:
outstd_logic);
End;
Architecturerel_1ofe4_2_jian2is
Begin
Process(a,b,ci)
Begin
If(a='0'andb='0'andci='0')then
F<='0';co<='0';
elsif(a='0'andb='0'andci='1')then
F<='1';co<='1';
elsif(a='0'andb='1'andci='0')then
F<='1';co<='1';
elsif(a='0'andb='1'andci='1')then
F<='0';co<='1';
elsif(a='1'andb='0'andci='0')then
F<='1';co<='0';
elsif(a=’1’andb=’0’andci=’1’)then
F<=’0’;co<=’0’;
elsif(a=’1’andb=’1’andci=’0’)then
F<=’0’;co<=’0’;
else
F<=’1’;
Co<=’1’;
Endif;
Endprocess;
End;
仿真波形:
六、实验心得体会
通过本次实验,对组合逻辑电路的设计方法有了更进一步的掌握。
本次实验内容较多,设计了一个多数表决器,一个二个2位二进制数相乘电路以及一个一位二进制全减器电路。
实验中遇到的主要问题是if语句的使用,if语句与elseif语句的区别是必须要清楚的,其中连续使用if语句,将对变量进行连续的判断,即使上一个if语句已判断为真,而elseif语句只在上一个elseif或者if语句判断为假后才开始判断,否则不执行,理解这一点对于if语句的使用至关重要。