EDA实验总结报告Word文档下载推荐.docx
《EDA实验总结报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EDA实验总结报告Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
useieee.std_Logic_1164.all;
ENTITYmux4IS
PORT(
a0,a1,a2,a3:
INSTD_LOGIC;
s:
INSTD_LOGIC_VECTOR(1DOWNTO0);
y:
OUTSTD_LOGIC);
ENDmux4;
ARCHITECTUREarchmuxOFmux4IS
BEGIN
y<
=a0WHENs="
00"
else--当s=00时,y=a0
a1WHENs="
01"
else--当s=01时,y=a1
a2WHENs="
10"
else--当s=10时,y=a2
a3;
--当s取其它值时,y=a2
ENDarchmux;
五、运行结果
六.实验总结
真值表分析:
当js=0时,a1,a0取00,01,10,11时,分别可取d0,d1,d2,d3.
实验二血型配对器的设计
1、进一步熟悉QuartusII软件的使用。
2、掌握简单组合逻辑电路的设计方法与功能仿真技巧。
3、进一步学习QuartusII中基于原理图设计的流程。
人类有O、A、B、AB4种基本血型,输血者与受血者的血型必须符合图示原则。
设计一血型配对电路,用以检测输血者与受血者之间的血型关系是否符合,如果符合,输出为1,否则为0。
已知:
AB血型是万能受血者,O血型是万能献血者!
如果要输血给O型血,那么可以的血型是O型!
如果要输血给A型血,那么可以的血型是A,O型!
如果要输血给B型血,那么可以的血型是B,O型!
如果要输血给AB型血,那么可以的血型是A,B,AB,O型!
1、用VHDL语言编写程序实现血型配对器的功能
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYVxuexingIS
PORT(
P,Q,R,S:
F:
OUTSTD_LOGIC
);
ENDVxuexing;
ARCHITECTUREAOFVxuexingIS
BEGIN
F<
=((NOTP)AND(NOTQ))OR(RANDS)OR((NOTP)ANDS)OR((NOTQ)ANDR);
ENDA;
2、对所编写的电路进行编译及正确的仿真。
实验分析
真值表
P,Q表示输血者的血型;
R,S,表示受血者的血型。
当两者符合血型配合原则时,F=1,否则为0.
四、运行结果
五、实验总结
本实验给出了四种不同的血型编码,PQ(1,1),RS(1,1)表示AB型血,P,Q(1,0),RS(1,0)表示B型血,PQ(0,1),RS(0,1)表示A型血,PQ(0,0),RS(0,0)表示O型血。
根据真值表,并根据实验的原理图,画出电路图并进行连接。
实验三简单数字钟的设计
1、了解数字钟的工作原理。
2、进一步学习QuartusII中基于VHDL设计的流程。
3、掌握VHDL编写中的一些小技巧。
4、掌握简单时序逻辑电路的设计方法与功能仿真技巧。
简单数字钟应该具有显示时-分-秒的功能。
首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转
1、用原理图的方式编写一个12/24进制的计数器,并创建为SYMBOL文件。
2、用VHDL的方式编写一个60进制的计数器,并创建为SYMBOL文件。
3、创建顶层文件。
调用已编写的SYMBOL文件,设计简单的数字钟电路。
二十四进制VHDL
ENTITYCNT24ISPORT(
CP,EN,Rd,LD:
D:
INSTD_LOGIC_VECTOR(5DOWNTO0);
Co:
OUTSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDCNT24;
ARCHITECTURESTROFCNT24IS
SIGNALQN:
STD_LOGIC_VECTOR(5DOWNTO0);
Co<
='
1'
WHEN(QN="
010111"
ANDEN='
)
ELSE'
0'
;
PROCESS(CP,RD)
BEGIN
IF(Rd='
)THEN
QN<
="
000000"
ELSIF(CP'
EVENTANDCP='
IF(LD='
QN<
=D;
ELSIF(EN='
=QN+1;
ENDIF;
ENDPROCESS;
Q<
=QN;
ENDSTR;
六十进制VHDL
ENTITYjsq60IS
PORT(en,rd,cp:
qh:
bufferSTD_LOGIC_VECTOR(3DOWNTO0);
ql:
Co:
OUTSTD_LOGIC);
ENDjsq60;
ARCHITECTUREbOFjsq60IS
Co<
='
when(qh="
0101"
andql="
1001"
anden='
)else'
PROCESS(cp,rd)
IF(rd='
qh<
="
0000"
ql<
ELSIF(cp'
EVENTANDcp='
IF(en='
IF(ql=9)THEN
ql<
IF(qh=5)THEN
qh<
ELSEqh<
=qh+1;
endif;
else
=ql+1;
ENDPROCESS;
ENDb;
原理图
24进制
60进制
时钟仿真结果
此设计问题可分为主控电路,计数器模块和扫描显示三大部分,计数器在之前的学习中已经非常熟悉,只要掌握60,12进制的技术规律,用同步或异步计数器都可以实现。
二扫描电路我们学过两种驱动方式:
BCD码驱动方式和直接驱动方式。
实验四简单交通灯的设计
1、了解交通灯的亮灭规律。
2、了解交通灯控制器的工作原理。
3、进一步熟悉VHDL语言编程,了解实际设计中的优化方案。
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车子如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。
要完成本实验,首先必须了解交通路灯的亮灭规律。
依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。
其交通灯的亮灭规律为:
初始态是两个路口的红灯全亮,之后东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,重复上述过程。
1、用VHDL的方式编写一个简单的交通控制灯电路
程序:
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytrafficis
port(clk,enb:
instd_logic;
ared,agreen,ayellow,bred,bgreen,byellow:
bufferstd_logic;
acounth,acountl,bcounth,bcountl:
bufferstd_logic_vector(3downto0));
endtraffic;
architectureoneoftrafficis
begin
process(clk,enb)
variablelightstatus:
std_logic_vector(5downto0);
begin
if(clk'
eventandclk='
)then
lightstatus:
=ared&
agreen&
ayellow&
bred&
bgreen&
byellow;
if((acounth="
andacountl="
)or(bcounth="
andbcountl="
))then
Caselightstatusis
When"
010100"
=>
lightstatus:
001100"
acountl<
acounth<
bcountl<
bcounth<
if(enb='
100010"
0011"
0010"
0100"
endif;
when"
100001"
whenothers=>
endcase;
else
if(acountl="
=acounth-1;
=acountl-1;
if(bcountl="
=bcounth-1;
=bcountl-1;
ared<
=lightstatus(5);
agreen<
=lightstatus(4);
ayellow<
=lightstatus(3);
bred<
=lightstatus
(2);
bgreen<
=lightstatus
(1);
byellow<
=lightstatus(0);
endprocess;
endone;
分析:
这里a代表东西方向,b代表南北方向,acounth是表示东西方向五进制计数acountl是东西方向六进制计数,bcounth则表示南北方向五进制,bounthl则是南北方向六进制计数
东西方向为0时,东西方向红灯亮(ared=1)
东西方向在1~4之间,东西方向绿灯亮(即agreen=1)南北方向的红灯亮起(即bred=1)
此设计问题可分为主控电路,译码驱动电路和扫描显示部分。
但是,这远远不能满足实际生活的需要,还应设置倒计时秒数,因此可在此电路基础上外加一个定时模块。
实验五流水灯的设计
1、了解流水灯的工作原理。
要完成本实验,首先必须了解流水灯的原理。
所谓的流水灯实际上就是由多个LED发光二极管构成的电路,当发光二极管可以依次点亮时,即能呈现流水的效果。
实验内容
1、设计能带8个LED发光管发光,并按照要求轮流发光,产生流水灯的流动效果。
2、应具有两种以上不同风格的流动闪亮效果。
比如依次点亮或者依次熄灭。
(选作)
3、有起动、停止控制键。
4、有流动闪亮效果选择设置键。
5、对所编写的电路进行编译及正确的仿真。
三、实验程序
ENTITYyiweijicun1IS
PORT(CP,R,DSR,DSL:
S:
STD_LOGIC_VECTOR(2DOWNTO0);
D:
STD_LOGIC_VECTOR(7DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDyiweijicun1;
ARCHITECTUREyiweijicun_archOFyiweijicun1IS
SIGNALIQ:
STD_LOGIC_VECTOR(7DOWNTO0);
PROCESS(CP,R,IQ)
IF(R='
)THENIQ<
=(OTHERS=>
'
ELSIF(CP'
EVENTANDCP='
)THEN
CASECONV_INTEGER(S)IS
WHEN0=>
NULL;
WHEN1=>
IQ<
WHEN2=>
=DSR&
IQ(7DOWNTO1);
WHEN3=>
=IQ(6DOWNTO0)&
DSL;
WHEN4=>
=IQ(0)&
WHEN5=>
IQ(7);
WHEN6=>
=IQ(7)&
WHEN7=>
=IQ(6DOWNTO0)&
IQ(0);
WHENOTHERS=>
NULL;
ENDCASE;
ENDIF;
=IQ;
ENDyiweijicun_arch;
结果分析:
d[0]~d[7]为八个输入端,s[0]和s[1]控制流水灯得输出,s=1保持,s=2实现左移功能,s=3实现右移功能,因为延迟的原因,在s=2时,需要经过一段时间才能实现循环右移的功能,流水灯的实现其实是运用了8位移位寄存器,它只是运用了其中的保持左移与右移的功能,8LO位移位寄存器还有循环右移,循环左移,算数右移,算数左移等功能。
了解了移位寄存器的功能和原理
通过这次实验,加深了VHDL语言的运用能力,更进一步了解了8位移位寄存器的功能。
实验六乘法器的设计
1、了解乘法器的工作原理。
2、了解复杂时序电路的设计流程。
具体设计原理参见教材188页。
1、设计一个能进行两个十进制数相乘的乘法器,乘数和被乘数均小于100。
(可以参考教材231页的VHDL代码来设计)
libraryIEEE;
useIEEE.std_logic_1164.all;
entityone_bit_adderis
port(
A:
inSTD_LOGIC;
B:
C_in:
S:
outSTD_LOGIC;
C_out:
outSTD_LOGIC
endone_bit_adder;
architectureone_bit_adderofone_bit_adderis
S<
=AxorBxorC_in;
C_out<
=(AandB)or(C_inand(AxorB));
entitysichenis
inSTD_LOGIC_VECTOR(3downto0);
data_out:
outSTD_LOGIC_VECTOR(6downto0)
endsichen;
architecturemulti_archofsichenis
signalA_MULT_B0:
STD_LOGIC_VECTOR(2downto0);
signalA_MULT_B1:
signalA_MULT_B2:
signalS_TEMP1:
STD_LOGIC_VECTOR(1downto0);
signalS_TEMP2:
signalC_TEMP:
STD_LOGIC_VECTOR(6downto0);
signalC0_out_B0,C1_out_B0,C2_out_B0:
STD_LOGIC;
signalC0_out_B1,C1_out_B1,C2_out_B1:
signalZERO:
componentone_bit_adder
endcomponent;
U_0_0:
one_bit_adderportmap(A=>
A_MULT_B0
(1),B=>
A_MULT_B1(0),C_in=>
ZERO,S=>
C_TEMP
(1),C_out=>
C0_out_B0);
U_0_1:
A_MULT_B0
(2),B=>
A_MULT_B1
(1),C_in=>
C0_out_B0,S=>
S_TEMP1(0),C_out=>
C1_out_B0);
U_0_2:
ZERO,B=>
A_MULT_B1
(2),C_in=>
C1_out_B0,S=>
S_TEMP1
(1),C_out=>
C2_out_B0);
U_1_0:
A_MULT_B2(0),B=>
S_TEMP1(0),C_in=>
C_TEMP
(2),C_out=>
C0_out_B1);
U_1_1:
A_MULT_B2
(1),B=>
S_TEMP1
(1),C_in=>
C0_out_B1,S=>
S_TEMP2(0),C_out=>
C1_out_B1);
U_1_2:
A_MULT_B2
(2),B=>
C2_out_B0,C_in=>
C1_out_B1,S=>
S_TEMP2
(1),C_out=>
C2_out_B1);
A_MULT_B0(0)<
=A(0)andB(0);
A_MULT_B0
(1)<
=A
(1)andB(0);
A_MULT_B0
(2)<
=A
(2)andB(0);
A_MULT_B1(0)<
=A(0)andB
(1);
A_MULT_B1
(1)<
=A
(1)andB
(1);
A_MULT_B1
(2)