EDA技术与VHDL实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术与HDL 实验指导书
吉林大学珠海学院
二零一一年制定
目录
实验一:实验环境和平台的建立 (1)
实验二:组合逻辑电路设计 (12)
实验三:多层次设计 (14)
实验四:时序逻辑电路设计(一) (18)
实验五:时序逻辑电路设计(二) (20)
实验六:分频器的设计 (22)
实验七:通用移位寄存器的设计 (23)
实验八:数码管扫描显示的设计 (24)
实验九:正弦信号发生器的设计 (26)
实验十:序列检测器的设计 (36)
实验一:实验环境和平台的建立
一、实验目的:
熟悉Quartus II的VHDL文本设计流程,学习8-3编码器的设计、仿真。
二、实验内容:
用VHDL编写8-3编码器的VHDL代码并仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 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 Y1 Y0
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1 1
0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1
表1-1 8-3编码器真值表
图1-1 8-3编码器管脚图
五、实验步骤
1、打开Quartus II 6.0软件,选择File | New Project Wizard新建一个工程,
在对话框中第一行选择工程路径,并为该工程新建一个文件夹,本例更改路径为D:\test\vhdl\exp1。
工程路径最后为D:\test\vhdl\exp1;第二行输入工程名bm8_3;第三行是工程顶层设计文件名,该顶层设计文件名一定要与设计文件中模块名一致,可以与工程名不同,但一般都和工程名一致,(注意:在Quartus II中区分大小写)这里输入bm8_3;如图1-2所示。
图1-2 在Quartus II里面新建工程(1)
2、单击“Next”,此对话框是向工程中添加设计文件的。
现在还没有写设计文件,
所以没有文件可以添加;直接单击“Next”,进入器件选择对话框。
在Family 下拉菜单中选择Cyclone II 系列。
然后在Filters下的Package下拉菜单中选择封装形式FBGA,Pin count下拉菜单中选择管脚数484,Speed grade下拉菜单中选择速度级别8;然后在Available devices中选择EP2C20F484C8器件。
如图1-3所示。
图1-3 在Quartus II里面新建工程(2)
3、单击“Next”进入选择其他EDA工具对话框,这里都不选,直接单击“Next”
进入工程信息对话框,列出了工程名,模块名和器件名等信息,如图1-4所示
图1-4 在Quartus II里面新建工程(3)
4、最后单击“Finish”完成工程建立。
5、新建设计文件,选择File | New ,在New对话框中选择Device Design Files
下的VHDL File,单击OK,完成新建设计文件。
如图1-5所示。
图1-5 在Quattus II里面新建文件
6、在新建设计文件中输入VHDL程序,如图1-6所示。
图1-6 在Quartus II里面输入代码
本例只有一个设计文件,即为顶层设计文件,它的模块名一定要与顶层设计文件名bm8_3一致,然后保存到工程文件夹exp1下,命名为bm8_3,即为顶层设计文件。
如图1-7所示。
图1-7 保存文件
7、保存后,利用QuartusII进行全程编译,选择工具栏里的Processing -> Start Compilation进行编译,如图1-8所示。
图1-8 全程编译后错的报告信息
8、编译通过后进行时序仿真,选择工具栏里的File | New ,在New对话框中选择Other Files下的Vector Waveform File,单击OK,完成新建仿真波形文件。
如图1-9所示。
图1-9 新建仿真波形文件
9、设置仿真时间区域。
图1-10 设置仿真时间长度10、将工程bm8_3的端口信号节点选入波形编辑器中。
图1-11 打开信号节点查询端口11、将工程bm8_3的端口信号节点选入波形编辑器中。
图1-12 向波形编辑器拖入信号节点
12、编辑输入波形
图1-13 最后设置好的vwf仿真激励波形文件图
13、选择工具栏里的Processing | Start Simulation进行仿真,观察结果。
图1-14 进行仿真
14、在仿真没有问题以后,先利用QuartusII编译一次,然后分配管脚。
分配管脚有两种方法。
一种是选择如图1-15所示的选项,出现如图1-16的对话框,在里面编辑定义管脚。
另外的一种方法是编译qsf文件,在Quartus文件下利用文本编辑器打开bm8_3.qsf文件,可以就直接添加管脚。
如图1-17所示。
图1-15 分配管脚选项(1)
图1-16 分配管脚选项(2)
图1-17 分配管脚选项(3)
注意:在修改bm8_3.qsf文件来分配管脚的时候,使用VHDL编写的模块端口名必须与qsf文件中的管脚名一致,否则,主板上的按键和LED灯就不能连接在我们编写的模块端口上。
我们这里用到的是低8位的拨码开关Bit7-Bit0作为输入,LED2、LED1、LED0作为输出。
我们提供了SOPC1000的实验箱主板和核心板完整的qsf文件,用文本编辑器打开,把相应的管脚分配拷贝到bm8_3.qsf中,并且修改管脚名,与模块的端口名一致。
如图1-18和图1-19所示。
图1-18 修改qsf文件
图1-19 修改后的qsf文件
15、在Assignments|Device 里面打开Device& Pin Options选项,在Unused Pins页里面的选择第一项As input tri-stated。
每次新建的工程编译前必须设置这个选项。
如图1-20。
图1-20 未使用的管脚设置
16、利用QuartusII编译布局,下载开发板进行验证。
17、将开关选择跳线选择至低8位拨动开关,利用低BIT7~BIT0位作为输入,LED2、LED1、LED0作为输出。
18、分析比较实测的结果和仿真时序波形。
实验二:组合逻辑电路设计
一、实验目的:
学习组合逻辑电路,学习译码器的功能与定义,学习VHDL。
二、实验内容:
编写3-8译码器的VHDL 代码并仿真,编译下载验证。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境、AR1000核心板、SOPC-MBoard板、ByteBlaster II 下载电缆。
四、实验原理
译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。
译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。
这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。
另一种是将一种代码转换成另一种代码,所以也称为代码变换器。
3线-8线译码器的真值表见表2-1,管脚图如图2-1所示。
输入输出
G1 G2 G3 A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
x 1 x x x x 1 1 1 1 1 1 1 1
x x 1 x x x 1 1 1 1 1 1 1 1
0 x x x x x 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1 1 1 1 1 0
1 0 0 0 0 1 1 1 1 1 1 1 0 1
1 0 0 0 1 0 1 1 1 1 1 0 1 1
1 0 0 0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 1 1 1 0 1 1 1 1 1
1 0 0 1 1 0 1 0 1 1 1 1 1 1
1 0 0 1 1 1 0 1 1 1 1 1 1 1
表2-1 3-8译码器真值表
图2-1 3-8译码器管脚图
五、实验步骤
1、按照真值表编写3-8译码器VHDL代码。
2、利用仿真软件进行编译仿真,给出电路的时序逻辑波形。
3、将开关选择跳线选择至低3位拨动开关,利用低3位BIT2 、BIT1、BIT0作为A输入,G1、G2、G3分别由BIT5、BIT6、BIT7作为输入。
LED7、LED6、…LED0作为输出。
利用QuartusII编译布局,下载开发板进行验证。
4、分析比较实测的结果和仿真时序波形。
实验三:多层次设计
一、实验目的:
学习加法器的功能与定义,学习VHDL,学习用图形方法设计多层次结构的VHDL设计。
二、实验内容:
编写一个半减器和一个或门的VHDL代码,用图形的方法建立一个全加器并编译,仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
算术运算式数值系统的基本功能,更是计算机中不可缺少的组成单元。
1、半加器
半加法和全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。
一位加法器的真值表见下表;由表3-1中可以看见,这种加法没有考虑低位来的进位,所以称为半加。
半加器就是实现下表中逻辑关系的电路。
被加数A 加数B 和数S 进位C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
表3-1 一位半加器真值表
2、全加器
全加器能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位信号。
根据它的功能,全加器可由半加器和或门组成,其结构图如图3-1所示。
图3-1 全加器结构
五、 实验步骤
1、先建立一个工程,工程名为f_adder.vhd ,在工程中建立两个VHDL 文件,文 件名分别是h_adder.vhd 和or_2a.vhd 。
h_adder.vhd 按半加器真值表进行编写,or_2a.v 完成了或门的功能。
2、分别为h_adder.vhd 和or_2a.vhd 两个文件设置成可调用的元件,选择File | Creat/_update | Creat Symbol Files for Current File ,
图3-2 将Verilog 文件设置成可调用的元件
3、为工程建立顶层文件,选择File | New,新建文件,在对话框里选择Block Diagram/Schematic File ,建立图形文件。
ain cout cout ain bin sum
cin
bin sum
cin
f_adder
or2a
f e
d u3
u2
u1b
a c
co so
B
co so
B
h_adder A h_adder
A
图3-3 建立图形文件
4、在图形文件里,双击鼠标左键,出现Symbol对话框。
选择Libraries | Project|h_adder添加h_adder元件。
图3-4 添加元件
5、用相同的方法添加or2a元件
6、在图形文件里,双击鼠标左键,出现Symbol对话框。
选择Libraries | d:/altera/quartus60/libraries/ | primirives | pin | input 添加输入引脚。
图3-5 添加引脚
7、用相同的方法添加需要的输出引脚。
8、按图3-1连接好个元件和引脚,然后分别在input和output引脚的PIN NAME上双击使其变为黑色,按图3-1修改引脚名。
9、将此文件保存为与工程顶层文件名相同的名字f_adder.bdf做为此工程的顶层文件,并对此文件进行编译。
10、编译好后进行仿真,给出仿真波形,分析是否满足全加器的逻辑。
实验四:时序逻辑电路设计(一)
一、实验目的:
学习时序逻辑电路,学习计数器的原理,学习VHDL。
二、实验内容:
编写一个带预置输入,清零输入,可加/可减计数器的VHDL 代码并仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
计数器是数字系统中用的较多的基本逻辑器件。
它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。
按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
本实验就是设计一个4位二进制加减法计数器,该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。
还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。
其功能表如表4-1所示;管脚定义如图4-1所示。
R CLK load up_down 状态
L x x x 置零
H x L x 置数
H ↑H 0 减法
H ↑H 1 加法
表4-1 4位二进制加减法计数器功能表
图4-1 4位二进制加减法计数器管脚定义
五、实验步骤
1、按照4位二进制加减法计数器的功能表编写VHDL代码。
2、进行编译仿真,给出电路的时序逻辑波形。
实验五:时序逻辑电路设计(二)
一、实验目的:
学习8位频率计的原理及设计。
二、实验内容:
根据频率的定义和频率测量的基本原理,设计一个8位频率计的程序。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
所谓频率就是周期性信号在单位时间(1s)内变化的次数。
若在一定时间间隔T(也称闸门时间)内测得这个周期性信号的重复变化次数为N,则其频率可表示为
f=N/T
由上面的表达式可以看到,若时间间隔T取1s,则f=N,但是这种频率计仅能测出频率大于或者等于1Hz的情况,且频率越高,精度也越高。
实际应用中,频率计的闸门时间是个可变量,当频率小于1Hz时,闸门时间就要适当放大。
本实验中为了简化实验代码,闸门时间固定为1s,闸门信号是一个0.5Hz的方波,在闸门有效(高电平)期间,对输入的脉冲进行计数,在闸门信号的下降沿时刻,锁存当前的计数值,并且清零所有的频率计数器。
频率计的电路框图如图5-1所示。
图 5-1 频率计的电路框图
五、实验步骤
1、首先打开Quartus II软件,新建一个工程,并新建一个VHDL File。
2、按照自己的想法,编写VHDL程序。
3、对自己编写的VHDL程序进行编译并仿真,给出电路的时序逻辑波形。
实验六:分频器的设计
一、实验目的:
学习时序逻辑电路,学习分频的原理,学习VHDL语言。
二、实验内容:
用VHDL设计一个占空比是50%的4分频分频器,通过QuartusII软件对其进行仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
在数字电路中,时钟信号的分频是很常见的电路。
分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。
涟波计数器是计数器的一种,它属于异步设计。
因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。
五、实验步骤
1、按照分频器的功能表编写VHDL代码。
2、利用仿真软件进行编译仿真。
实验七:通用移位寄存器的设计
一、实验目的:
学习时序逻辑电路,学习寄存器的原理,学习VHDL语言。
二、实验内容:
编写一个8位的模式可控的移位寄存器的VHDL 代码并编译,仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
本实验就是设计一个模式可控的移位寄存器,该寄存器可以对8位信号通过MD输入端控制移位输出的模式,其功能表如表7-1所示。
CLK MD 状态
↑001 带进位循环左移
↑010 带进位循环右移
↑011 自循环左移
↑100 自循环右移
↑101 加载待移数据
↑其他保持
表7-1 模式可控移位寄存器功能表
五、实验步骤
1、按照模式可控的移位寄存器的功能表编写VHDL代码。
2、进行编译仿真,给出电路的时序逻辑波形。
实验八:数码管扫描显示的设计
一、实验目的:
学习硬件扫描显示电路的设计。
二、实验内容:
利用扫描的方式设计一个在8个数码管上面显示自己的学号的程序。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境、AR1000核心板、SOPC-MBoard板、ByteBlaster II 下载电缆。
四、实验原理
一般来说,多个数码管的连接并不是把每个数码管都独立的与可编程逻辑器件连接,而是把所有的LED管的输入连在一起。
如图8-1所示。
图8-1 扫描数码管的原理图
这样做的好处有两点:一是节约了器件的IO口;其二是降低了功耗。
每次向LED写数据时,通过片选选通其中一个LED,然后把数据写入该LED管,因此每个时刻只有一个LED管是亮的。
为了能持续看见LED上面的显示内容,必须对LED管进行扫描,即依次并循环地点亮各个LED管。
利用人眼的视觉暂停效应,
在一定的扫描频率下,人眼就会看见好几个LED一起点亮。
每个LED的功耗较大,如果所有的LED一起点亮,其功耗较大。
利用扫描的方式,每个时刻只有LED管是亮的,可以大大的减少功耗。
扫描频率大小合适才能有很好的效果。
如果太小,而每个LED开启的时间大于人眼的视觉暂停时间,那么会产生闪烁现象。
而扫描频率太大,则会造成LED 的频繁开启和关断,大大增加LED功耗(开启和关断的时刻功耗很大)。
一般来说,稍描频率选在50Hz比较合适。
五、实验步骤
1、编写一个1000000分频器的VHDL代码;
2、以分频后的时钟信号做为数码管扫描的时钟信号,编写数码管扫描的程序。
3、进行编译仿真,给出电路的时序逻辑波形。
4、利用QuartusII编译布局,下载开发板进行验证。
分析比较实测的结果和仿真时序波形。
实验九:正弦信号发生器的设计
一、实验目的:
掌握Quartus中LPM_ROM的使用方法与正弦信号发生器的设计方法。
二、实验内容:
设计一个正弦信号发生器。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
正弦信号发生器的结构由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…进入宏模块设计向导。
图 9-2 PLL宏模块的定制(1)图 9-3 PLL宏模块的定制(2)
图 9-4 PLL宏模块的定制(3)图 9-5 PLL宏模块的定制(4)
图 9-6 PLL宏模块的定制(5)
图 9-7 PLL宏模块的定制(6)
3、6位地址发生器模块的设计,在顶层文件中双击鼠标左键,点击MegaWizard Plug-In Manager…进入宏模块设计向导。
图 9-8 计数器宏模块的定制(1)图 9-9 计数器宏模块的定制(2)
图 9-10 计数器宏模块的定制(3)
图 9-11 计数器宏模块的定制(4)
4、进行正弦数据表存储器模块的设计。
定制初始化数据文件,File -> New -> Other Files
图 9-12 正弦数据表存储器模块的设计(1)
5、编辑MIF数据表
图 9-13 MIF数据表的编辑(1)
6、在顶层文件中双击鼠标左键,点击MegaWizard Plug-In Manager…进入宏模块设计向导
图 9-14 LPM_ROM宏模块的定制(1)图 9-15 LPM_ROM宏模块的定制(2)
图 9-16 LPM_ROM宏模块的定制(3)
图 9-17 LPM_ROM宏模块的定制(4)
选择Assignments -> Setting -> Analysis&Synthesis Settings -> Default Parameters 进行如下设置
图 9-18 LPM_ROM宏模块的定制(5)
7、正弦信号发生器各模块的综合与设计,调出已定制好的宏模块进行系统集成。
图 9-19 已定制好的宏模块的系统集成
8、时序仿真。
图 9-20 仿真波形
实验十:序列检测器的设计
一、实验目的:
了解序列检测器的工作原理,掌握VHDL语言状态机的设计方法。
二、实验内容:
用VHDL语言设计一个序列检测器,要求当检测器连续收到一组串行码(1110010)后,输出为1,其他情况输出为0,请通过QuartusII软件对其进行仿真。
三、实验环境
PC 机(Pentium100 以上)、Altera Quartus II 6.0 CPLD/FPGA 集成开发环境。
四、实验原理
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
五、实验步骤
1、首先打开Quartus II软件,新建一个工程,并新建一个VHDL File。
2、按照自己的想法,编写VHDL程序。
3、对自己编写的VHDL程序进行编译并仿真。