EDA实验报告1.docx
《EDA实验报告1.docx》由会员分享,可在线阅读,更多相关《EDA实验报告1.docx(15页珍藏版)》请在冰点文库上搜索。
![EDA实验报告1.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/48e0a70a-50be-4e97-9981-2741b285696a/48e0a70a-50be-4e97-9981-2741b285696a1.gif)
EDA实验报告1
实验一QuartusII9.1软件的使用
一、实验目的
一、通过实现书上的例子,掌握QUARTUSII9.1软件的使用;
二、编程实现3-8译码电路以掌握VHDL组合逻辑的设计以及QUARTUSII9.1软件的使用。
;
二、实验流程
1、认真阅读《数字系统自动化设计教程》一书中,从120页到131页的操作指南;
2、将124页的程序,输入到QUARTUSII9.1的文本编辑环境中去;
(注意:
程序第11行
signalqout:
intergerrange0to16;应改为
signalqout:
std_logic_vector(3downto0);
程序第21行
elseif(qout="1001")then应改为
elsif(qout="1001")then
3、验证最后仿真的得到的波形图是否和图5-31时序仿真的波形图是否一致;
功能图如下:
在预置信号无效,使能信号有效的情况下,当时钟的上升沿到来时,可以画出状态转换图如下:
在VHDL文件输入完毕后,进行部分编译和全编译,在编译成功后进行功能仿真和时序仿真。
程序编译通过,编译报告如下图所示。
在编译成功后,进行功能仿真和时序仿真。
功能仿真设置:
功能仿真结果:
实验结果分析:
通过功能仿真得到的时序图与课本所给的并无差异,说明本例确实能够实现模十计数器,并且通过模十计数器的输出驱动7段译码器,可以显示相应的输出。
时序仿真设置:
时序仿真结果:
实验结果分析:
通过时序仿真得到的波形图和功能仿真得到的波形图,形状和特点并无二致,只是由于在时序仿真中,考虑了电路的延时,所以有些地方会出现毛刺。
但是模十计数器的基本功能并未受到影响。
4、根据三-八译码器真值表完成VHDL程序的设计并仿真。
输入
输出
D2
D1
D0
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
表13-8译码器真值表
根据3-8线译码器的真值表可以写出相应的VHDL语言的程序实现。
编程思路如下:
仿照上例,编写3-8译码器。
根据真值表,设置三个输入信号和8个输出信号,不含使能端。
根据输入信号的不同取值设置相应的输出信号,即可实现3-8译码器的功能。
在编译通过后,进行功能仿真和时序仿真,检验实验结果是否符合要求。
三-八译码器功能仿真注意事项:
因为需要考察电路输入的所有状态,因此需要输入分别有000、001、010、011、100、101、110、111八个状态,在仿真通道文件中
选择d
界面旁边的赋值选项此时高亮显示表示可用,选中C,在弹出的对话框中进行设置。
设置完成后,进行仿真。
编译成功,编译报告如下图所示:
功能仿真结果:
实验结果分析:
通过以上的功能分析得到的波形图,可以看出输出信号随着输入信号的变化做相应变化。
输入信号的值是几,输出信号中第几位就输出为高,其余为低。
实现了3-8译码器的功能,且输出为高有效。
时序仿真结果:
实验结果分析:
通过以上的时序仿真,可以看出该程序实现了3-8译码器的功能。
输出信号根据输入信号的值的大小相应位为高,其余位为低。
只是相比于功能仿真,由于电路的延时作用,时序仿真得到的波形图会有毛刺出现。
5.实验注意事项:
关于7段译码器的说明:
在实验1中使用了一个7段译码器,其由7个发光二极管构成,二极管的负极接到对应引脚,正极接高电平构成共阳极的7段数码管。
如下如所示:
显示0时,a,b,c,d,e,f管脚接低电平,g管脚接高电平点亮的二极管会显示数字0。
如图所示:
三、实验代码
附实验代码:
模十计数器代码如下:
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitycount10is
port(clk,load,en:
instd_logic;
data_in:
instd_logic_vector(3downto0);
seg:
outstd_logic_vector(6downto0));
endcount10;
architecturebehaofcount10is
signalqout:
std_logic_vector(3downto0);
signalq_temp:
std_logic_vector(3downto0);
begin
process(clk,load)
begin
if(load='1')then
q_temp<=data_in;
elsif(clk'eventandclk='1')then
if(en='0')then
qout<=qout;
elsif(qout="1001")then
qout<="0000";
else
qout<=qout+1;
endif;
q_temp<=qout;
endif;
endprocess;
process(q_temp)
begin
caseq_tempis
when"0000"=>seg<="1000000";
when"0001"=>seg<="1111001";
when"0010"=>seg<="0100100";
when"0011"=>seg<="0110000";
when"0100"=>seg<="0011001";
when"0101"=>seg<="0010010";
when"0110"=>seg<="0000010";
when"0111"=>seg<="1111000";
when"1000"=>seg<="0000000";
when"1001"=>seg<="0010000";
whenothers=>seg<="0001000";
endcase;
endprocess;
endbeha;
3-8线译码器的程序如下:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
ENTITYcount38IS
PORT(d:
INSTD_LOGIC_vector(2downto0);
q:
outstd_logic_vector(7downto0)
);
ENDcount38;
ARCHITECTUREdec_behavofcount38is
signalsel:
std_logic_vector(2downto0);
begin
sel<=d;
withselselect
q<="00000001"when"000",
"00000010"when"001",
"00000100"when"010",
"00001000"when"011",
"00010000"when"100",
"00100000"when"101",
"01000000"when"110",
"10000000"when"111",
"ZZZZZZZZ"whenothers;
enddec_behav;
四、实验心得体会
这是第一次接触QuartusII软件,虽然上过了有关的理论课,但是在真正使用之前还是觉得很陌生。
但是本次实验的开始,老师让大家验证课本上的例子。
按照课本一步一步的操作,让我很快对这个软件熟悉了起来,掌握了该软件的基本操作步骤。
而且,首先针对课本上的例子进行功能仿真和时序仿真,通过实例,我对功能仿真和时序仿真有了非常直观的认识,通过仿真可以验证程序是否实现了要求的特定功能。
在验证完课本上的例子之后,又自己写了一个比较简单的3-8线译码器的程序,并对它进行仿真。
通过对第一个实例的学习,我可以仿照第一个实例写出3-8译码器的程序,并且进行功能仿真和时序仿真。
总之,通过本次实验老师设置的两个循序渐进的目标,我掌握了QuartusII软件的使用方法,并且可以利用VHDL语言写一些简单的程序。
通过本次实验,我深深地体会到软件仿真的方便,在今后的学习和实验中,我会不断学习有关知识,提高自己的专业知识和学习能力,利用软件简化自己的任务。