EDA技术 实验指导书
唐浦华
西华大学机械工程学院
二零一六年制定
目 录
实验一:实验环境和平台的建立................................................................................ 1 实验二:译码器设计.................................................................................................... 2 实验三:码制变换译码器设计.................................................................................... 5 实验四:四位加法器设计............................................................................................ 7 实验五:时序逻辑电路设计........................................................................................ 9 实验六:分频器的设计.............................................................................................. 10 实验七:通用移位寄存器的设计.............................................................................. 11 实验八:数码管扫描显示的设计.............................................................................. 12 实验九:正弦信号发生器的设计.............................................................................. 14 实验十:序列检测器的设计...................................................................................... 24
实验一:实验环境和平台的建立
一、 实验目的:
熟悉Quartus II的VHDL文本设计流程,学习8-3编码器的设计、仿真。 二、 实验内容:
用VHDL编写8-3编码器的VHDL代码并仿真。 三、 实验环境
PC 机(Pentium100 以上)、Altera KAX+plus II 10.2 CPLD/FPGA 集成开环境。
四、 实验原理
在数字系统中,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律排列,例如8421码、格雷码等,使每组代码具有一特定的含义(代表某个数字或是控制信号)称为编码。具有编码功能的逻辑电路称为编码器。编码器有若干个输入,在某一时刻只有一个输入被转换为二进制码。例如8线-3线编码器和10线-4线编码器分别有8输入、3位输出和10位输入、4位输出。 8线-3线编码器的真值表见表1-1,管脚图如图1-1所示。
输入
A7 A6 A5 A4 A3 A2 A1 A0 Y2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1
表1-1 8-3编码器真值表
输出
Y1 Y0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1
图1-1 8-3编码器管脚图
五、 实验步骤 参见课件。
1
实验二:译码器设计
一、 实验目的:
学习译码器的功能与定义,学习VHDL。 二、 实验内容:
编写3-8译码器的VHDL 代码并编译仿真。 三、 实验环境
同实验一。 四、 实验原理
译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。
译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。另一种是将一种代码转换成另一种代码,所以也称为代码变换器。
3线-8线译码器的真值表见表2-1,管脚图如图2-1所示。
表2-1 3-8译码器真值表
输入
x x 0 1 1 1 1 1 1 1 1
1 x x 0 0 0 0 0 0 0 0
x 1 x 0 0 0 0 0 0 0 0
x x x 0 0 0 0 1 1 1 1
x x x 0 0 1 1 0 0 1 1
x x x 0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1 1 1 0
输出
1 1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0 1 1 1
1 1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
G1 G2 G3 A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
2
图2-1 3-8译码器管脚图
五、 实验步骤
1、按照真值表编写3-8译码器VHDL代码。
2、利用仿真软件进行编译仿真,给出电路的时序逻辑波形。3、分析仿真时序波形。
3
实验三:码制变换译码器设计
一、实验目的:
学习码制变换译码器的功能与定义,学习VHDL。 二、实验内容:
编写二–十进制译码器的VHDL 代码并编译仿真。 三、实验环境
同实验一。 四、实验原理
译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。
译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。另一种是将一种代码转换成另一种代码,所以也称为代码变换器。
二–十进制译码器的真值表见教材表7.19,管脚图参见教材图7.52所示。 五、实验步骤
1、按照真值表编写二–十进制译码器VHDL代码。
2、利用仿真软件进行编译仿真,给出电路的时序逻辑波形。 3、分析仿真时序波形。
4
实验四:四位加法器设计
一、 实验目的:
学习加法器的功能与定义,学习VHDL,学习用元件例化方法设计多层次结构的VHDL设计。 二、 实验内容:
编写一个一位全加器和一个四位全加器的VHDL代码,用用元件例化方法建立一个四位全加器并编译,仿真。 三、 实验环境
同实验一。 四、 实验原理
算术运算式数值系统的基本功能,更是计算机中不可缺少的组成单元。 1、全加器
全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。一位加法器的真值表见下表;由表3-1中可以看见,这种加法考虑低位来的进位,所以称为全加。一位全加器就是实现下表中逻辑关系的电路。
表3-1 一位半加器真值表
被加数A 0 0 1 1 0 0 1 1
2、四位全加器
加数B 0 1 0 1 0 1 0 1
低位进位Ci 和数S
0 0 0 0 1 1 1 1
进位Co 0 0 0 1 0 1 1 1
0 1 1 0 1 0 0 1
按照串行进位方式,采用四个一位全加器可以四位加法器。
5
五、 实验步骤
1、按照真值表编写一位全加器VHDL代码,并采用元件例化语句编写四位加法器VHDL代码。
2、利用仿真软件进行编译仿真,给出电路的时序逻辑波形。 3、分析仿真时序波形。
6
实验五:时序逻辑电路设计(一)
一、 实验目的:
学习时序逻辑电路,学习计数器的原理,学习VHDL。 二、 实验内容:
编写一个带预置输入,清零输入,可加/可减计数器的VHDL 代码并仿真。 三、 实验环境
同实验一。 四、 实验原理
计数器是数字系统中用的较多的基本逻辑器件。它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
本实验就是设计一个4位二进制加减法计数器,该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。其功能表如表4-1所示;管脚定义如图4-1所示。
R L H H H
CLK x x ↑ ↑
load up_down x L H H
x x 0 1
状态 置零 置数 减法 加法
表4-1 4位二进制加减法计数器功能表
图4-1 4位二进制加减法计数器管脚定义
五、 实验步骤
7
1、按照4位二进制加减法计数器的功能表编写VHDL代码。 2、进行编译仿真,给出电路的时序逻辑波形。
8
实验五:时序逻辑电路设计(二)
一、 实验目的:
学习8位频率计的原理及设计。 二、 实验内容:
根据频率的定义和频率测量的基本原理,设计一个8位频率计的程序。 三、 实验环境
同实验一。 四、 实验原理
所谓频率就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T(也称闸门时间)内测得这个周期性信号的重复变化次数为N,则其频率可表示为
f=N/T
由上面的表达式可以看到,若时间间隔T取1s,则f=N,但是这种频率计仅能测出频率大于或者等于1Hz的情况,且频率越高,精度也越高。实际应用中,频率计的闸门时间是个可变量,当频率小于1Hz时,闸门时间就要适当放大。
本实验中为了简化实验代码,闸门时间固定为1s,闸门信号是一个0.5Hz的方波,在闸门有效(高电平)期间,对输入的脉冲进行计数,在闸门信号的下降沿时刻,锁存当前的计数值,并且清零所有的频率计数器。
频率计的电路框图如图5-1所示。
图 5-1 频率计的电路框图 五、 实验步骤
1、首先打开ModelSim软件,新建一个工程,并新建一个VHDL File。 2、按照自己的想法,编写VHDL程序。
3、对自己编写的VHDL程序进行编译并仿真,给出电路的时序逻辑波形。
9
实验六:分频器的设计
一、 实验目的:
学习时序逻辑电路,学习分频的原理,学习VHDL语言。 二、 实验内容:
用VHDL设计一个占空比是50%的4分频分频器,通过ModelSim软件对其进行仿真。 三、 实验环境
同实验一。 四、 实验原理
在数字电路中,时钟信号的分频是很常见的电路。分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。涟波计数器是计数器的一种,它属于异步设计。因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。 五、 实验步骤
1、按照分频器的功能表编写VHDL代码。 2、利用仿真软件进行编译仿真。
10
实验七:通用移位寄存器的设计
一、 实验目的:
学习时序逻辑电路,学习寄存器的原理,学习VHDL语言。 二、 实验内容:
编写一个8位的模式可控的移位寄存器的VHDL 代码并编译,仿真。 三、 实验环境
同实验一。 四、 实验原理
本实验就是设计一个模式可控的移位寄存器,该寄存器可以对8位信号通过MD输入端控制移位输出的模式,其功能表如表7-1所示。
CLK ↑ ↑ ↑ ↑ ↑ ↑
MD 001 010 011 100 101 其他
状态 带进位循环左移 带进位循环右移 自循环左移 自循环右移 加载待移数据
保持
表7-1 模式可控移位寄存器功能表
五、 实验步骤
1、按照模式可控的移位寄存器的功能表编写VHDL代码。 2、进行编译仿真,给出电路的时序逻辑波形。
11
实验八:数码管扫描显示的设计
一、 实验目的:
学习硬件扫描显示电路的设计。 二、 实验内容:
利用扫描的方式设计一个在8个数码管上面显示自己的学号的程序。 三、 实验环境
同实验一。 四、 实验原理
一般来说,多个数码管的连接并不是把每个数码管都独立的与可编程逻辑器件连接,而是把所有的LED管的输入连在一起。如图8-1所示。
图8-1 扫描数码管的原理图
这样做的好处有两点:一是节约了器件的IO口;其二是降低了功耗。每次向LED写数据时,通过片选选通其中一个LED,然后把数据写入该LED管,因此每个时刻只有一个LED管是亮的。为了能持续看见LED上面的显示内容,必须对LED管进行扫描,即依次并循环地点亮各个LED管。利用人眼的视觉暂停效应,在一定的扫描频率下,人眼就会看见好几个LED一起点亮。每个LED的功耗较大,如果所有的LED一起点亮,其功耗较大。利用扫描的方式,每个时刻只有LED管是亮的,可以大大的减少功耗。
12
扫描频率大小合适才能有很好的效果。如果太小,而每个LED开启的时间大于人眼的视觉暂停时间,那么会产生闪烁现象。而扫描频率太大,则会造成LED的频繁开启和关断,大大增加LED功耗(开启和关断的时刻功耗很大)。一般来说,稍描频率选在50Hz比较合适。 五、 实验步骤
1、编写一个1000000分频器的VHDL代码;
2、以分频后的时钟信号做为数码管扫描的时钟信号,编写数码管扫描的程序。 3、利用ModelSim进行编译仿真,给出电路的时序逻辑波形。
13
实验九:正弦信号发生器的设计
一、 实验目的:
掌握Quartus中LPM_ROM的使用方法与正弦信号发生器的设计方法。 二、 实验内容:
设计一个正弦信号发生器。 三、 实验环境
同实验一。 四、 实验原理
正弦信号发生器的结构由4个部分组成: 地址发生器 正弦信号rom 顶层设计文件 8位D/A
整体结构的框图如图9-1所示:
图 9-1 正弦信号发生器结构框图
顶层文件在FPGA中实现,包含两个部分:ROM的地址信号发生器,由6位计数器担当;一个正弦数据ROM,由LPM_ROM模块构成。 五、 实验步骤
1、新建工程signa_gen.qpf,建立顶层文件signa_gen.bdf。
2、PLL宏模块的定制,在顶层文件中双击鼠标左键,点击MegaWizard Plug-In Manager…进入宏模块设计向导。
14
图 9-2 PLL宏模块的定制(1)
图 9-3 PLL宏模块的定制(2)
15
图 9-4 PLL宏模块的定制(3)
图 9-5 PLL宏模块的定制(4)
16
图 9-6 PLL宏模块的定制(5)
图 9-7 PLL宏模块的定制(6)
3、6位地址发生器模块的设计,在顶层文件中双击鼠标左键,点击MegaWizard Plug-In Manager…进入宏模块设计向导。
17
图 9-8 计数器宏模块的定制(1)
图 9-9 计数器宏模块的定制(2)
18
图 9-10 计数器宏模块的定制(3)
图 9-11 计数器宏模块的定制(4)
4、进行正弦数据表存储器模块的设计。定制初始化数据文件,File -> New -> Other Files
19
图 9-12 正弦数据表存储器模块的设计(1)
5、编辑MIF数据表
图 9-13 MIF数据表的编辑(1)
6、在顶层文件中双击鼠标左键,点击MegaWizard Plug-In Manager…进入宏模块设计向导
20
图 9-14 LPM_ROM宏模块的定制(1)
图 9-15 LPM_ROM宏模块的定制(2)
21
图 9-16 LPM_ROM宏模块的定制(3)
图 9-17 LPM_ROM宏模块的定制(4)
选择Assignments -> Setting -> Analysis&Synthesis Settings -> Default Parameters 进行如下设置
22
图 9-18 LPM_ROM宏模块的定制(5)
7、 正弦信号发生器各模块的综合与设计,调出已定制好的宏模块进行系统集成。
图 9-19 已定制好的宏模块的系统集成
8、时序仿真。
图 9-20 仿真波形
23
实验十:序列检测器的设计
一、 实验目的:
了解序列检测器的工作原理,掌握VHDL语言状态机的设计方法。 二、 实验内容:
用VHDL语言设计一个序列检测器,要求当检测器连续收到一组串行码(1110010)后,输出为1,其他情况输出为0,请通过利用ModelSim编译软件对其进行仿真。 三、 实验环境
同实验一。 四、 实验原理
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。 五、 实验步骤
1、首先打开利用ModelSim编译软件,新建一个工程,并新建一个VHDL File。 2、按照自己的想法,编写VHDL程序。 3、对自己编写的VHDL程序进行编译并仿真。
24
因篇幅问题不能全部显示,请点此查看更多更全内容