eda实验报告.docx
《eda实验报告.docx》由会员分享,可在线阅读,更多相关《eda实验报告.docx(39页珍藏版)》请在冰豆网上搜索。
eda实验报告
中国地质大学(武汉)
eda实验报告
学院:
机电学院
班级:
姓名:
学号:
指导老师:
王巍
实验一3/8译码器和半加器的实现
一.实验目的
1.学习QuartusⅡ的基本操作;
2.熟悉教学实验箱的使用;
3.设计一个3/8译码器和一个半加器;
4.初步掌握VHDL语言和原理图的设计输入,编译,仿真和调试过程;
二.实验说明
1.本次实验要求应用VHDL语言实现一个3/8译码器。
3/8译码器的逻辑功能如下:
本实验要求使用VHDL语言描述3/8译码器,并在实验平台上面实现这个译码器。
描述的时候要注意VHDL语言的结构和语法,并熟悉QuartusⅡ的文本编辑器的使用方法。
尝试使用不同的VHDL语言描述语句实现3/8译码器,并查看其RTL结构区别,理解不同描述方法对综合结果的影响。
将程序下载到实验箱上,分别用按键和LED作为输入和输出对结果进行验证,进一步熟悉所用EDA实验箱系统。
2.采用原理图的方式实现一个半加器。
本实验的具体电路自己通过真值表或布尔方程式得出,建立工程和和块原理图文件,并进行编译和仿真,验证设计的正确性。
本实验的内容比较简单,主要是通过这次实验熟悉实验环境,为以后更好的做实验做准备。
所用器件
EDA实验箱、EP1K10TC100-3器件。
三.实验步骤
按照教学课件《QUARTUSII使用方法》,学习QuartusⅡ软件的使用方法:
1.在WINDOWS界面双击QuartusⅡ图标进入QuartusⅡ环境;
2.单击File菜单下的NewProjectWizard:
Introduction按照向导里面的介绍新建一个工程并把它保存到自己的路径下面。
(注意路径当中不要有中文和空格);
3.单击File菜单下的New,选择VHDLFile(原理图方式时选择BlockDiagram/SchematicFile),后单击OK,就能创建一个后缀名为.vhd(*.bdf)的文本(原理图)文件。
此vhd文件名必须与设计实体名相同。
另外,如果已经有设计文件存在,可以按File菜单里面的Open来选择你的文件;
4.输入完成后检查并保存,编译;
5.改错并重新编译;
6.建立仿真波形文件并进行仿真。
单击File菜单下的New,选择VectorWaveformFile,单击OK,创建一个后缀名为*.vwf的仿真波形文件,按照课件上的方法编辑输入波形,保存,进行仿真,验证仿真结果是否正确;
7.选择器件及分配引脚,重新编译;
8.根据引脚分配在试验箱上进行连线,使用LED进行显示;
9.程序下载,观察实验结果并记录;
四.实验要求
1.用VHDL语言编写3/8译码器(if语句,case语句,布尔方程,以及并行语句中的when···else语句,with···select···when);
2.编写3/8译码器模块的源程序,完成半加器的原理图;
3.在QuartusII平台上仿真;
4.在实验板上面实现这个3/8译码器。
五.总结报告要求
1.实验的思路、方法和步骤;
2.写出VHDL源程序和完成半加器的原理图,代码必须有注释!
3.写出仿真过程,保存波形并作解释;
4.描述在实验板上面观察到的现象。
5.心得体会――本次实验中你的感受;你从实验中获得了哪些收益;本次实验你的成功之处;本次实验中还有待改进的地方;下次实验应该从哪些地方进行改进;怎样提高自己的实验效率和实验水平等等。
六.思考
与传统的数字电路设计相比,基于PLD的现代数字系统设计的优越性在哪些地
方。
七、实际实验操作
1、实验程序
libraryieee;
useieee.std_logic_1164.all;
ENTITYyimaqiIS
PORT(a,b,c:
instd_logic;--输入
y:
outstd_logic_vector(7downto0));--8个输出
endyimaqi;
architecturebehaveofyimaqiis
signalindata:
std_logic_vector(2downto0);--定义中间变量
begin
indata<=c&b&a;
process(indata)
begin
caseindatais
when"000"=>y<="00000001";--输入不同,输出不同,即亮的数码管不同
when"001"=>y<="00000010";
when"010"=>y<="00000100";
when"011"=>y<="00001000";
when"100"=>y<="00010000";
when"101"=>y<="00100000";
when"110"=>y<="01000000";
when"111"=>y<="10000000";
whenothers=>y<="00000000";
endcase;
endprocess;
endbehave;
2、38译码器波形仿真
实验二BCD七段显示译码器实验
预习内容
1、写出七段译码器的工作原理;
2、用VHDL语言进行硬件描述的过程;
3、写出实验步骤;
4、画出实验原理图(或逻辑构造图),写出实验源程序;
一.实验目的
1.了解和熟悉组合逻辑电路的设计方法和特点;
2.掌握LED显示器的工作原理;
3.设计一个BCD七段显示的译码器,并在实验箱上面实现你的译码器。
二.实验说明
LED数码显示器是数字系统实验里面经常使用的一种显示器件,因为它经常显示的是十进制或十六进制的数,所以我们就要对实验里面所用到的二进制数进行译
码,将它们转换成十进制的或是十六进制的数。
LED数码显示器分为共阴和共阳两种,本实验使用的是共阴的连接,高电平有效。
输入信号为D0,D1,D2,D3,相应的输出8段为a、b、c、d、e、f、g、Dp。
它们的关系表格如下:
下图为译码器逻辑图,请按图进行连线。
其中A,B,C,D接拨号开关,a,b,c,d,e,f,g,dp和使能端AN(高电平工作)接数码显示接口,管脚映射均为I/O口,映射后,通过拨号开关改变输入二进制码,则输出数码管上显示相应的数值。
在实验中要注意显示器上面每一段LED要和程序里面的对应。
三.实验要求
1、用VHDL语言进行描写;代码必须有注释!
2、进行波形仿真测试;
3、严格按照实验流程进行;
4、管脚映射按芯片要求进行,在数码管上显示译码后的数字;
5、查看资料,描述七段译码器的工作原理;
四.实验报告要求
1.实验的思路、方法和步骤;
2.写出你的BCD七段译码器的源程序;
3.打印你的实验结果。
五.问题与思考:
只要求译出数字0~9和“-”,怎样修改程序?
六、实际实验操作
1、实验程序
Libraryieee;
useieee.std_logic_1164.all;
entitybcdis
port(a:
instd_logic_vector(3downto0);--3输入
y:
outstd_logic_vector(6downto0));--7输出
endbcd;
architecturebehaveofbcdis
begin
process(a)
begin
caseais
when"0000"=>y<="0111111";--0
when"0001"=>y<="0000110";--1
when"0010"=>y<="1011011";--2
when"0011"=>y<="1001111";--3
when"0100"=>y<="1100110";--4
when"0101"=>y<="1101101";--5
when"0110"=>y<="1111101";--6
when"0111"=>y<="0000111";--7
when"1000"=>y<="1111111";--8
when"1001"=>y<="1100111";--9
when"1010"=>y<="1110111";--A
when"1011"=>y<="1111100";--B
when"1100"=>y<="0111001";--C
when"1101"=>y<="1011110";--D
when"1110"=>y<="1111001";--E
when"1111"=>y<="1110001";--F
whenothers=>y<="0000000";
endcase;
endprocess;
endbehave;
2、波形仿真
实验三分频器的设计实现
预习内容
1.分频的原理
2.分频的实现方法
一.实验目的
1.了解和熟悉时序逻辑电路的实现方法和特点;
2.熟悉分频器的功用。
二.实验说明
本实验主要是设计几个分频数值不同的分频器,并在实验板上面观察分频的结果显示。
虽然实验箱频率为多种,而实际使用的时候一个系统最好使用一个时钟,而系统中使用的其他各种频率需要在系统内部用分频器来产生,所以分频器是以后进行各种实验的关键。
三.实验要求
1.设计一个2分频器,观察实验结果;
2.设计一个210分频器,观察实验结果;
3.设计一个211分频器,观察实验结果,并与上面一步的实验结果比较;
4.想一想,你有几种方法实现前面的分频器,比较你想到的方法。
提示:
可以考虑用out_clk=count[10]实现211分频
四.实验报告要求
1.实现思路、方法和步骤;
2.写出三个分频器的源程序,代码必须有注释!
3.打印你的实验结果,并进行分析。
阅读内容:
偶数倍分频:
偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。
如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。
以此循环下去。
这种方法可以实现任意的偶数分频。
奇数倍分频:
奇数倍分频有两种实现方法:
首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。
即是在计数值在邻近的1和2进行了两次翻转。
这样实现的三分频占空比为1/3或者2/3。
如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。
这种方法可以实现任意的奇数分频。
归类为一般的方法为:
对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。
再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。
两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
以5分频为例,图中,COUNT0采用上沿计数,COUNT1采用下沿计数,DIV0和DIV1
是分别是上沿触发器和下沿触发器的输出,计数为0~(n/2-1)时DIV0、DIV1<=‘1'此处为0~1,计数为n/2~(n-1)时DIV0、DIV1<='0'此处为2~4,DIV5_CLK是DIV0和DIV1的或门输出。
在使用该电路时,需要注意:
(1)DIV0和DIV1到DIV5_CLK的约束要严,越快越好。
不然,无法保证1:
1的占空比。
(2)MCLK频率要求较高,尽量不要出现窄脉冲,尤其是在高频电路里。
(3)COUNT1可有可无,视时钟频率高低而定。
频率越高,COUNT1越需要。
另外一种方法:
对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。
得到占空比为50%的奇数倍分频。
小数分频:
首先介绍如何进行n+0.5分频,这种分频需要对输入时钟进行操作。
基本的设计思想:
对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。
从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。
即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。
因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次。
五、实际实验操作
1、实验程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfredivnis
port(
clk_in:
instd_logic;--输入时钟信号
clk_out:
outstd_logic;--2分频
clk_out1:
outstd_logic;--10分频
clk_out2:
outstd_logic);--11分频
endfredivn;
architectureaoffredivnis
signalcountQ:
std_logic_vector(11downto0);
begin
process(clk_in)
begin
if(clk_in'eventandclk_in='1')then
CountQ<=CountQ+1;
endif;
clk_out<=countQ(0);
clk_out1<=countQ(9);
clk_out2<=countQ(10);
endprocess;
enda;
2、波形仿真
二分频:
十分频、十一分频:
实验四动态扫描数码显示器
预习要求:
1、什么是动态扫描显示;
2、怎样实现数码扫描显示;
3、画出原理草图,写出源程序。
一、实验目的
1.学习功能集成的设计方法;
2.设计6位扫描数码显示器,显示“123456”。
二、实验说明
在许多情况下为了节省I/O管脚和内部逻辑资源,常用动态扫描的方法进行显示。
动态扫描显示利用了时分的原理和人的视觉暂留效应。
例如,一个4位动态扫描数码显示器的显示周期可划分为四个阶段:
每个周期只选通一位数据。
在周期1显示第一个数码,周期2显示第二个数码······在扫描4个阶段后,又重新按顺序循环。
如果扫描的速度足够快,人感觉到就好像4个数码管同时显示。
4位扫描数码显示器共有四组BCD码(4位)输入线,8根8段译码输出线和4根位选通线。
扫描工作中,先从四组BCD(什么是BCD码?
)数据中选出一组,通过BCD/七段译码器译码后输出。
与此同时,3/8译码器产生位选通信号,则在此瞬间,显示器再改为显示要输出的数码。
然后再选出下一组数据译码后输出,位选通信号则相应下移一位,将下一数码选通输出。
要求:
输入4路4位数据,输出6位选通信号和8段数码管信号。
可以将所需分为两个模块:
一个模块用来译码,一个模块是计数器(状态机)输出;或者一个模块用作计数器(状态机)选择,一个模块用作译码。
思考:
那种方法比较节省逻辑资源
可以先实现异步清零BCD码24进制计数器,然后用数码管显示两位;(用层次化设计方法实现,计数+显示译码);再设计实现一个BCD码60进制计数器,和24进制计数器结合起来实现四位显示。
设计完成后,存档备用。
后面的数字钟等试验将要用到本试验设计的扫描数码显示器。
预习试验时,编写相应的VHDL源程序,画出功能方块图(重要!
)。
三、实验要求
1.设计输入原程序,并进行编译仿真;
2.通过建立一个顶层电路图实现4位动态数码显示器;
3.利用仿真和编译两种手段调试设计文件;
4.修改电路图实现6位动态数码显示器。
四、总结报告要求
1.实验的思路、方法和步骤;
2.画出功能方块图,标明模块输入/输出信号,连接关系和接口关系;
3.各模块的源程序,代码必须有注释!
4.打印顶层电路图;
5.打印仿真输出结果并进行分析。
五、实际实验操作
1、实验程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYscan_ledIS
PORT(CLK:
INSTD_LOGIC;
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
END;
ARCHITECTUREoneOFscan_ledIS
SIGNALCNT6:
integerrange5DOWNTO0;
BEGIN
P2:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THENCNT6<=CNT6+1;--时钟信号发生移位显示
ENDIF;
ENDPROCESSP2;
P1:
PROCESS(CNT6)---
BEGIN
CASECNT6IS
WHEN0=>BT<="101";y<="1111101";--6—共阴极数码管
WHEN1=>BT<="100";y<="1101101";--5
WHEN2=>BT<="011";y<="1100110";--4
WHEN3=>BT<="010";y<="1001111";--3
WHEN4=>BT<="001";y<="1011011";--2
WHEN5=>BT<="000";y<="0000110";--1
WHENOTHERS=>null;
ENDCASE;
ENDPROCESSP1;
ENDone;
2、波形仿真
基于VHDL的数字钟的设计与分析
绪论
数字钟是一种用数字电路实现时分秒计时的装置,与机械性时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
数字中从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,我们此次设计与制作数字钟就是为了了解数字钟的原理,从而学会制作数字钟,而且通过数字钟的制作进一步了解各种在制作中用到的中小规模集成电路的作用及实现方法。
且由于数字钟包括组合逻辑电路和时序电路,通过它们可以进一步学习与掌握各种组合逻辑电路和时序电路的原理与使用方法。
课题背景
EDA技术的初级培训主要帮助同学们尽快掌握VHDL语言的开发流程和设计方法,以工程实践为例,循序渐进的学习VHDL的集成开发环境,开发流程,以及硬件电路设计等知识。
每次课程都匹配有相关实践训练,每个实践题目都可以通过EDA编程实现编译仿真,再下载到实验箱上进行验证,学生们可以更好的理解并消化课堂知识,工程实践水平会得到迅速提高。
下面我们来具体介绍一下EDA技术的有关内容.
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,是90年代初从CAD(计算机辅助设备),CAM(计算机辅助制造),CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。
EDA技术是以计算机为工具,根据硬件描述语言HDL完成的设计文件,自动的完成逻辑编译,化简,分割,综合及优化,布局布线,仿真以及对特定目标芯片的适配编译和编程下载等工作,典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器,综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲将实现的功能的描述文件。
综合器在工作前,必须给定要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来,也就是说综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换成低级的,可与目标器件CPLD相映射的网表文件。
适配器的功能是将由综合器产生的网表文件配置与指定的目标器件中,产生最终的下载文件。
适配器所选的目标器件(CPLD芯片)必须包含于在综合器中已指定的目标器件系列。
硬件描述语言HDL是相对于一般的计算机软件语言,如C、PASCAL而言的HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能,电力结构和连接方式,设计者可利用HDL程序来描述所希望的电子系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应功能的门级或更底层的结构网表文件或下载文件。
硬件描述语言VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage。
它主要用于描述数字系统的结构,行为,功能和接口。
除了还有很多硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似与一般的高级计算机语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的。
其优点是:
与其它硬件描述语言相比,VHDL具有更强的行为描述能力,从而解决了他成为系统设计领域最佳的硬件描述语言,强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证;VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能和可行性,及时可对设计进行仿真模拟;VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合市场需求的大规模系统高效,高速的完成必须有甚至多个代发组共同并行工作才能实现;对于VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表;VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
系统总体设计
如下图所示的系统方块图.该系统框图由八个模块组成,分别为:
秒、分、时计数