EDA技术实验报告.docx
《EDA技术实验报告.docx》由会员分享,可在线阅读,更多相关《EDA技术实验报告.docx(36页珍藏版)》请在冰点文库上搜索。
EDA技术实验报告
实验一利用原理图输入法设计4位全加器
一、实验目的:
掌握利用原理图输入法设计简单组合电路的方法,掌握MAX+plusII的层次化设计方法。
通过一个4位全加器的设计,熟悉用EDA软件进行电路设计的详细流程。
二、实验原理:
一个4位全加器可以由4个一位全加器构成,全加器的进位以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的低位进位输入信号cin相接。
1位全加器f-adder由2个半加器h-adder和一个或门按照下列电路来实现。
半加器h-adder由与门、同或门和非门构成。
四位加法器由4个全加器构成
三、实验内容:
1.熟悉QuartusII软件界面,掌握利用原理图进行电路模块设计的方法。
QuartusII设计流程见教材第五章:
QuartusII应用向导。
2.设计1位全加器原理图
(1)生成一个新的图形文件(file->new->graphiceditor)
(2)按照给定的原理图输入逻辑门(symbol->entersymbol)
(3)根据原理图连接所有逻辑门的端口,并添加输入/输出端口
(4)为管脚和节点命名:
在管脚上的PIN_NAME处双击鼠标左键,然后输入名字;
选中需命名的线,然后输入名字。
(5)创建缺省(Default)符号:
在File菜单中选择CreateSymbolFilesforCurrentFile项,即可创建一个设计的符号,该符号可被高层设计调用。
3.利用层次化原理图方法设计4位全加器
(1)生成新的空白原理图,作为4位全加器设计输入
(2)利用已经生成的1位全加器的缺省符号作为电路单元,设计4位全加器的原理图.
4.新建波形文件(file->new->OtherFiles->VectorWaveformFile),保存后进行仿真(Processing->StartSimulation),对4位全加器进行时序仿真。
给出波形图,并分析仿真结果是否正确。
1位半加器:
原理图:
仿真波形:
1位全加器:
原理图:
仿真波形:
4位全加器:
原理图:
仿真波形:
4位全加器仿真结果正确:
例:
0011(A)+0111(B)+0(CI)结果为1010(S),进位CO为0。
5.思考如何在原理图中输入一个总线,并与其他总线连接?
先选中细线,然后右击,选”busline”,总线是以粗线条表示。
与其他总线连接:
例如一根8位的总线bus1[7..0]欲与另三根分别为1、3、4个位宽的连线相接,则它们的标号可分别表示为bus1[0],bus1[3..1],bus1[7..4]。
实验二简单组合电路的设计
一、实验目的:
熟悉QuartusIIVHDL文本设计流程全过程。
学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
二、实验原理
VHDL硬件描述语言是一种可以从多个层次上对数字逻辑电路进行建模的国际标准(IEEE),本次实验是用VHDL设计一个简单的数字组合逻辑电路,并结合QuartusII环境和实验电路进行硬件测试。
三、实验内容:
1)根据实验一中一位全加器的电路原理图,改用VHDL语言文本输入方法,设计一位全加器,要求采用结构化的描述方法。
设计完成后,利用QuartusII集成环境进行时序分析、仿真,记录仿真波形和时序分析数据。
2)用VHDL语言设计一个四选一数据选择器电路。
要求先设计一个二选一数据选择器mux21,然后利用元件例化语句设计四选一数据选择器mux41,同样请给出时序分析数据和仿真结果。
3)硬件测试(选用器件EPF10K10Pin84)
管脚锁定:
1)一位全加器aPIO23(I/O19)30SW1
bPIO24(I/O20)35SW2
ciPIO25(I/O21)36SW3
sPIO21(I/O16)27LED10
coPIO19(I/O8)29LED12
2)四选一数据选择器a1PIO2330SW1
a0PIO2435SW2
d3PIO2738SW5
d2PIO2839SW6
d1PIO2947SW7
d0PIO3042SW8
yout29LED12
四、思考题
比较原理图输入法和文本输入法的优缺点。
实验结果:
一位全加器的VHDL描述:
半加器的VHDL描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYh_adderIS
PORT(a,b:
INSTD_LOGIC;
co,so:
OUTSTD_LOGIC);
ENDENTITYh_adder;
ARCHITECTUREfh1OFh_adderIS
BEGIN
so<=NOT(aXOR(NOTb));co<=aANDb;
ENDARCHITECTUREfh1;
或门的VHDL描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYor2aIS
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDENTITYor2a;
ARCHITECTUREoneOFor2aIS
BEGIN
c<=aORb;
ENDARCHITECTUREone;
一位全加器的VHDL描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYf_adderIS
PORT(ain,bin,cin:
INSTD_LOGIC;
cout,sum:
outSTD_LOGIC);
ENDENTITYf_adder;
ARCHITECTUREfd1OFf_adderIS
COMPONENTh_adder
PORT(a,b:
INSTD_LOGIC;
co,so:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALd,e,f:
STD_LOGIC;
BEGIN
u1:
h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);
u2:
h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);
u3:
or2aPORTMAP(a=>d,b=>f,c=>cout);
ENDARCHITECTUREfd1;
仿真波形:
硬件测试结果及分析:
ainPIN_233SW1
binPIN_234SW2
cinPIN_235SW3
coutPIN_1LED1
sumPIN_2LED2
SW1
SW2
SW3
LED1
LED2
0
0
0
暗
暗
0
0
1
暗
亮
0
1
0
暗
亮
0
1
1
亮
暗
1
0
0
暗
亮
1
0
1
亮
暗
1
1
0
亮
暗
1
1
1
亮
亮
得结果正确。
四选一数据选择器的VHDL描述:
二选一数据选择器的VHDL描述:
ENTITYmux21aIS
PORT(a,b:
INBIT;s:
INBIT;y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREoneOFmux21aIS
BEGIN
y<=aWHENs='0'ELSEb;
ENDARCHITECTUREone;
四选一数据选择器的VHDL描述:
libraryieee;
useieee.std_logic_1164.all;
entitymux41ais
port(d0,d1,d2,d3,a0,a1:
instd_logic;
yout:
outstd_logic);
endentitymux41a;
architecturefd1ofmux41ais
componentmux21a
port(a,b,s:
instd_logic;
y:
outstd_logic);
endcomponent;
signale,f:
std_logic;
begin
u1:
mux21aportmap(a=>d0,b=>d2,s=>a1,y=>e);
u2:
mux21aportmap(a=>d1,b=>d3,s=>a1,y=>f);
u3:
mux21aportmap(a=>e,b=>f,s=>a0,y=>yout);
endarchitecturefd1;
仿真波形:
硬件测试结果及分析:
a1PIN_233SW1
a0PIN_234SW2
d0PIN_235SW3
d1PIN_236SW4
d2PIN_237SW5
d3PIN_238SW6
youtPIN_1LED1
SW1
SW2
SW3
SW4
SW5
SW6
LED1
0
0
1
0
0
0
亮
0
1
0
1
0
0
亮
1
0
0
1
0
0
暗
1
1
0
0
0
1
亮
此结果正确。
回答问题:
原理图输入法的优点:
1.设计者进行电子线路设计不需要增加新的相关知识;
2.设计过程形象直观;
3.由于设计方式接近于底层电路布局,因此易于控制逻辑资源的耗用。
原理图输入法的缺点:
1.图形文件兼容性差;
2.随着电路设计规模的扩大,原理图输入描述方式必然引起一系列难以克服的困难,如电路功能原理的易读性下降,错误排查困难,整体调整和结构升级困难等;
3.由于图形文件的不兼容性,性能优秀的电路模块的移植和再利用十分困难;
4.由于在原理图中已确定了设计系统的基本电路结构和元件,留给综合器和适配器的优化选择的空间已十分有限,因此难以实现用户所希望的面积,速度以及不同风格的综合优化;
5.在设计中,由于必须直接面对硬件模块的选用,因此行为模型的建立将无从谈起,从而无法实现真实意义上的自顶向下的设计方案。
但是HDL文本输入的设计方法,基本上克服了用原理图输入法存在的所有弊端,所以HDL输入设计仍然是最基本、最有效和通用的输入方法。
实验三简单时序电路的设计
一、实验目的:
熟悉QuartusII的VHDL文本设计过程,学习简单时序电路的设计、仿真和硬件测试。
二、实验原理
时序逻辑电路是现代复杂数字电路的重要组成部分,往往占到整个设计的90%以上。
触发器是时序电路的基本单元,本实验中将涉及到边沿触发和电平触发两种电路结构,其中边沿触发是实际电路实现的主要方式。
三、实验内容
1)设计一个上升沿触发的D触发器
输入:
D
输出:
Q
触发时钟:
CLK
2)设计同步/异步清零D触发器
触发器有两种清零方式:
同步——当触发沿到来时,若清零信号有效,则实现清零;异步——任何时候清零信号一旦有效,触发器马上清零,而不论触发沿是否到来。
在以上设计的D触发器基础上,加入清零端rst,分别实现同步和异步清零方式。
3)设计一个高电平有效的锁存器
输入:
D
输出:
Q
触发:
E
电平触发的锁存器与沿触发的触发器不同之处在于当触发端处于有效电平时,输出等于输出,随输入变化;触发端无效时输出保持不变。
4)在QuartusII环境下对以上设计的模块进行编译,记录时序分析数据和仿真波形,并在实验电路上进行硬件测试。
管脚锁定:
DPIO2330SW1
CLKCLK143频率源(35SW2)
QPIO1929LED12
四、问题
1)在本次实验中你使用的VHDL描述方式是和实验二中一样的结构化描述还是行为级描述?
这两种方式描述的编译出来的仿真结果是否相同?
2)请在试验报告中分析和比较1)和3)的仿真和实测结果,说明两者之间的异同点。
实验结果:
上升沿触发的D触发器的VHDL描述:
libraryieee;
useieee.std_logic_1164.all;
entitydis
port(CLK:
instd_logic;D:
instd_logic;Q:
outstd_logic);
end;
architecturebhvofdis
signalq1:
std_logic;
begin
process(CLK,q1)
begin
ifCLK'eventandCLK='1'
thenq1<=D;
endif;
endprocess;
Q<=q1;
endbhv;
仿真波形:
硬件测试结果及分析:
CLKPIN_233SW1
DPIN_234SW2
QPIN_1LED1
若SW2为1,当按下SW1时,LED1亮,此时若让SW2为0,再按下SW1,则LED1灭。
可知:
当CLK上升沿到来时,输出Q就是D值。
故结果正确。
设计同步/异步清零D触发器的VHDL描述:
同步清零D触发器的VHDL描述:
libraryieee;
useieee.std_logic_1164.all;
entityDTis
port(clk,rst:
instd_logic;
D:
instd_logic;
Q:
outstd_logic);
end;
architectureoneofDTis
signalQ1:
std_logic;
begin
process(clk,rst,Q1)
begin
ifclk'eventandclk='1'then
ifrst='0'thenQ1<=D;
elseQ1<='0';
endif;
endif;
endprocess;
Q<=Q1;
endone;
仿真波形:
硬件测试结果及分析:
CLKPIN_233SW1
DPIN_234SW2
rstPIN_235SW3
QPIN_1LED1
若SW3为1,只有在按下SW1时,输出才复位。
结果正确。
异步清零D触发器的VHDL描述:
libraryieee;
useieee.std_logic_1164.all;
entityDYis
port(CLK:
instd_logic;D,RST:
instd_logic;Q:
outstd_logic);
end;
architecturebhvofDYis
signalq1:
std_logic;
begin
process(CLK,q1)
begin
ifRST='1'
thenq1<='0';
elsifCLK'eventandCLK='1'
thenq1<=D;
endif;
endprocess;
Q<=q1;
endbhv;
仿真波形:
硬件测试结果及分析:
CLKPIN_233SW1
DPIN_234SW2
RSTPIN_235SW3
QPIN_1LED1
一旦当SW3为1时,输出就复位。
结果正确。
高电平有效的锁存器的VHDL描述:
libraryieee;
useieee.std_logic_1164.all;
entitySD1is
port(d,clk:
instd_logic;
q:
outstd_logic);
endentitySD1;
architectureoneofSD1is
begin
process(clk,d)
begin
ifclk='1'
thenq<=d;
endif;
endprocess;
endarchitectureone;
仿真波形:
硬件测试结果及分析:
clkPIN_233SW1
dPIN_234SW2
qPIN_1LED1
仅当clk为1时,输出q才随输入d变化。
验证结果正确。
回答问题:
1),本次实验中采用的VHDL描述方式是行为级描述。
2),1)和3)仿真和实测结果
相同点是:
两者均能在CLK高电平上升沿到达时输出等于输入,且在CLK处于低电平时输出保持低电平之前的一个高电平时的输出状态;
不同点是:
前者直到下一个CLK高电平到达前均保持相同输出,而后者在CLK保持高电平期间,若输入D发生变化,则输出Q也随之变化。
实验四设计一个异步清零和同步时钟使能的4位加法计数器
一、实验目的:
学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验原理
本试验中所要设计的计数器,由4位带异步清零的加法计数器和一个4位锁存器组成。
其中,rst是异步清零信号,高电平有效;clk是计数时钟,同时也是锁存信号;ENA为计数器输出使能控制。
当ENA为‘1’时,加法计数器的输出值加载于锁存器的数据端,;当ENA为‘0’时锁存器输出为高阻态。
当计数器输出“1111”时,进位信号COUT为“1”。
三、实验内容
1)画出该计数器的原理框图。
2)用VHDL语言完成上述计数器的行为级设计。
可以采用分层描述的方式,分别设计计数器和输出锁存器模块,然后将两个模块组合成一个顶层模块。
注意锁存器输出高阻时的描述的方式。
3)用QuartusII对上述设计进行编译、综合、仿真,给出其所有信号的仿真波形和时序分析数据。
4)通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
引脚锁定:
clk:
clk143clk1
rst:
PIO2435SW2
ena:
PIO2330SW1
outy(3)PIO1929LED12
outy
(2)PIO2028LED11
outy
(1)PIO2127LED10
outy(0)PIO2225LED9
coutPIO1223LED7
2、思考题:
如果需要设计带并行预置初始值的计数器,用VHDL应如何描述?
实验结果:
计数器的原理框图:
计数器的VHDL描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT4IS
PORT(RST,CLK,ENA:
INSTD_LOGIC;
COUT:
OUTSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCNT4;
ARCHITECTUREbehvOFCNT4IS
BEGIN
PROCESS(RST,ENA,CLK)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI<15THENCQI:
=CQI+1;
ELSECQI:
=(OTHERS=>'0');
ENDIF;
ENDIF;
ENDIF;
IFCQI=15THENCOUT<='1';
ELSECOUT<='0';
ENDIF;
OUTY<=CQI;
ENDPROCESS;
ENDbehv;
仿真波形:
硬件测试结果及分析:
CLKPIN_233
ENAPIN_234
RSTPIN_235
COUTPIN_1
OUTY[0]PIN_2
OUTY[1]PIN_3
OUTY[2]PIN_4
OUTY[3]PIN_6
当ENA=1且RST=0时计数器开始计数,当ENA=0时停止计数。
若RST=1则计数器清零。
当计数器输出OUTY=1111时,进位信号COUT=1。
结果正确。
回答问题:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT4AIS
PORT(CLK:
INSTD_LOGIC;
RST:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT4A;
ARCHITECTUREbehavOFCNT4AIS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P_REG:
PROCESS(CLK,RST,ENA)
BEGIN
IFRST='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THENCQI<=CQI+1;
ENDIF;
ENDIF;
OUTY<=CQI;
ENDPROCESSP_REG;
COUT<=CQI(0)ANDCQI
(1)ANDCQI
(2)ANDCQI(3);
ENDbehav;
实验五七段数码显示译码器设计
一、实验目的:
学习7段数码显示译码器设计,学习VHDL的多层次设计方法。
二、实验原理:
七段数码管由8个(a,b,c,d,e,f,g,dp)按照一定位置排列的发光二极管构成,通常采取共阴极或者共阳极的设计,将8个二极管的同一极接在一起,通过分别控制另外的8个电极的电平,使二极管导通(发光)或截止(不发光)。
七段数码显示译码器的功能就是根据需要显示的字符,输出能够控制七段数码管显示出该字符的编码。
三、实验内容:
1)用VHDL设计7段数码管显示译码电路,并在VHDL描述的测试平台下对译码器进行功能仿真,给出仿真的波形。
2)数码管显示电路设计
利用以上设计的译码器模块,设计一个可以在8个数码管上同时显示字符的电路。
快速轮流点亮8个数码管,这样就可以实现同时显示8个字符的效果(尽管实际上同一时间只有一个数码管被点亮)。
要实现以上功能,就必须按照一定时钟节拍,轮流使译码器输出所需要字符的编码;同时控制数码管的公共电极电平,轮流点亮数码管(可以使用上个实验设计的计数器,加实验板上的74ls138来实现)。
3)用QuartusII对2)中的设计进行编译、综合、仿真,给出其所有信号的仿真波形和时序分析数据。
4)通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
管脚锁定:
*clk: