VHDL实验指导书.docx
《VHDL实验指导书.docx》由会员分享,可在线阅读,更多相关《VHDL实验指导书.docx(20页珍藏版)》请在冰豆网上搜索。
![VHDL实验指导书.docx](https://file1.bdocx.com/fileroot1/2022-12/30/17fc1a90-f2b8-4ce7-a305-5dd3ae0cddd7/17fc1a90-f2b8-4ce7-a305-5dd3ae0cddd71.gif)
VHDL实验指导书
硬件描述语言及应用
实验指导书
河南科技大学
电子信息工程学院
VHDL语言及应用实验指导书
宋潇主编
齐晶晶副主编
电工电子实验教学中心
2010年3月
目录
实验一MAX+PLUSⅡ基本应用练习1
实验二VHDL基本结构设计练习6
实验三基本语句编程练习一8
实验四基本语句编程练习二10
实验五VHDL组合逻辑电路设计12
实验六VHDL时序逻辑电路设计14
实验七VHDL有限状态机设计16
附录各种下载板与主板主要器件连接关系表18
实验一MAX+PLUSⅡ基本应用练习
为了使读者快速学会使用Altera公司的EDA工具软件MAX+PLUSⅡ,下面将以简单组合逻辑的设计为例,讲解如何利用MAX+PLUSⅡ软件进行设计和测试的全过程。
一、实验目的
1、初步了解VHDL语言;
2、了解VHDL语言的编程环境及开发软件MAX+PLUSⅡ的运行;
3、了解开发软件MAX+PLUSⅡ的编译、仿真等。
二、实验环境
本指导书中的VHDL语言均在MAX+PLUSⅡ中进行编译仿真,有需要实验箱的情况下使用SE-5型实验箱,管脚的连接参照附录中《各种下载板与主板主要器件连接关系表》。
三、预习要求
初步掌握VHDL语言的基本结构,熟悉该数据类型与运算操作符,了解MAX+PLUSⅡ的运行过程。
四、实验内容及步骤
简单组合逻辑包括两个输入、三个输出,如下表1-1。
表1-1使用的信号及功能
输入信号名
功能
输出信号名
功能
in1
开关输入
out1
in1
in2
开关输入
out2
非in1
out3
in1与in2
out4
in1或in2
out5
in1异或in2
1、原理图设计
图1-1简单组合逻辑的原理图设计
2、VHDL源程序
(1)创建新目录及启动MAX+PLUSⅡ
a、建立新目录
在创建新项目之前,首先要为该设计(项目)建立一个新目录,如“e:
\example”。
b、启动MAX+PLUSⅡ软件
从“开始”菜单选择“程序”中的MAX+PLUSⅡ项,或双击桌面上“max2win.exe”图标,就进入到MAX+PLUSⅡ软件的集成环境界面。
(2)创建源文件
a、生成一个新的文本文件
选择菜单“File”→“New”或单击工具条中的
图标,出现如图1-2所示的对话框。
图1-2New对话框
选择“TextEditorfile”(文本编辑方式),然后单击“OK”按钮,会出现一个如图1-4所示的无标题文本编辑窗口“Untitled-TextEditor”。
图1-3文本编辑窗口
b、输入简单组合逻辑的源程序exp.vhd
在出现的“Untitled-TextEditor”文本编辑窗口中输入如下简单组合逻辑的VHDL源程序exp.vhd。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYexpIS
PORT(in1,in2:
INSTD_LOGIC;
out1,out2,out3,out4,out5:
OUTSTD_LOGIC);
ENDexp;
ARCHITECTUREart1OFexpIS
BEGIN
out1<=in1;
out2<=NOTin1;
out3<=in1ANDin2;
out4<=in1ORin2;
out5<=in1XORin2;
ENDARCHITECTUREart1;
c、保存文件
输入完毕后,选择菜单“File→“Save”或单击工具条中的
图标,首先在“FileName”栏中输入文件名“exp.vhd”。
(注意文件后缀的选择,在MAX+PLUSⅡ中,文件的后缀决定所使用的语言。
后缀“.vhd”表示VHDL文件,“.tdf”表示AHDL文件,“.v”表示Verilog文件。
)
然后在“Drives”驱动器选择栏中选择刚刚建立的项目路径所在的驱动器“e:
”,在“Directories”路径栏中选择所建立的项目路径“example”,最后在“AutomaticExtension”(自动扩展名)的下拉菜单中选择“.vhd”,再单击“OK”按钮,即把两输入或门的源程序“exp.vhd”保存在目录“e:
\example”中。
d、设定项目及编译
选择菜单“File”→“Project”→“SetProjecttoCurrentFile”,使当前的项目名为exp,即软件自动使项目名与源程序名一致,这时源程序就处于该项目下。
选择菜单“MAX+PLUSⅡ”→“Compiler”出现图1-4对话框。
图1-4编译对话框
点击“Start”,对源文件进行编译。
编译成功后可生成时序模拟文件及器件编程文件。
若有错误,编译器将停止编译,并在下面的信息框中给出错误信息,双击错误信息条,一般可给出错误之处。
(注意:
在改正源程序错误的时候,应该按照错误提示中行数从上到下纠正,每纠正一个,就需要保存编译,再查看出错地方,直到没有错误为止。
这样做的原因是,很多后续错误可能是由于前面某行出错引起的)。
e、项目校验
项目校验包括以下几步:
(a)建立输入波形文件;
(b)编辑输入节点波形,即为输入信号建立输入波形;
(由于在数字电子技术实验中已经学会使用这部分功能,不再作详细介绍,可参照《MAX+PLUSⅡ及VHDL实用教程》。
)
(c)记录输入、输出的波形图。
f、创建元件图形符号
选择菜单“File”→“EditSymbol”会出现如图1-5所示创建的元件符号,从符号中可以看出,该元件有两个输入in1、in2,五个输出out1、out2、out3、out4、out5,正是源程序中所描述的。
图1-5创建的orm2元件图形符号
3、目标器件选择与管脚锁定
本实验中采用SE-5型实验箱,选择FLEX10K器件系列中的EPF10K10LC84-3器件。
管脚锁定将输入锁定到数据开关K1~K10中的任意两个,输出锁定到发光管l1~l10的任意五个,参照附录中《各种下载板与主板主要器件连接关系表》自行锁定管脚,记录管脚锁定情况。
注意:
完成管脚锁定后,需要重新编译使之生效。
重新编译之后,再重新进行项目校验(时序仿真),若正确,可进行下一步:
器件编程/配置。
5、器件编程/配置
通过数据开关及发光管是否点亮验证简单逻辑组合功能的实现情况。
(由于在数字电子技术实验中已经学会使用这部分功能,不再作详细介绍,可参照《MAX+PLUSⅡ及VHDL实用教程》。
)
五、思考题
1、本次实验中采取了先建立源程序文件,再使其成为顶层项目的办法(即使项目名与源程序文件名一致)。
是否可以先建立新项目,再在该项目下建立源文件?
写出操作步骤。
2、写出VHDL源程序在MAX+PLUSⅡ软件环境中的主要操作步骤。
六、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、记录简单逻辑组合的仿真波形图。
3、记录管脚连接及实现情况。
实验二VHDL基本结构设计练习
一、实验目的
1、了解VHDL的基本结构。
2、了解实体、结构体的格式及功能。
3、了解二选一选择电路的VHDL描述。
二、预习要求
1、预习使用VHDL语言描述基本结构。
2、掌握实体、结构体的格式及功能。
3、理解本实验中二选一选择电路的原理和VHDL描述方式。
三、实验内容及步骤
二选一选择器具有一个两位的输入input,选择输入sel,输出y。
当sel=0时,y输出input(0);当sel=1时,y输出input
(1)。
以下两个源程序均是描述二选一选择器的,程序mux2从功能角度来描述,程序mux_2从内部电路结构来描述。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux2IS
PORT(input:
INSTD_LOGIC_VECTOR(1DOWNTO0);
sel:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDENTITYmux2;
ARCHITECTURErtlOFmux2IS
BEGIN
y<=input(0)WHENsel='1'ELSE
input
(1);
ENDrtl;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux_2IS
PORT(input:
INSTD_LOGIC_VECTOR(1DOWNTO0);
sel:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDENTITYmux_2;
ARCHITECTURErtlOFmux_2IS
SIGNALtmp1,tmp2,tmp3:
STD_LOGIC;
BEGIN
tmp1<=input(0)ANDsel;
tmp2<=input
(1)AND(notsel);
tmp3<=tmp1ORtmp2;
y<=tmp3;
ENDrtl;
1、将上述mux2.vhd和mux_2.vhd源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并分别记录输入输出波形图,其中波形输入自行设定。
*2、基于已经实现二选一选择器,试设计一个四选一选择器。
四、思考题
1、写出实体、结构体的格式。
2、根据mux_2.vhd,画出二选一选择器的电路图,包括内部的门级结构和输入输出引脚,并标出内部各导线及输入输出引脚的名称。
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出两个源程序。
3、记录波形仿真图。
*4、记录实验内容2中的波形仿真图和传输延时分析。
实验三基本语句编程练习一
一、实验目的
1、了解VHDL语言中的顺序语句。
2、了解顺序语句中的PROCESS、IF格式及功能。
3、了解优先编码器的原理及VHDL的描述方式。
二、预习要求
1、预习VHDL语言中的顺序语句。
2、掌握优先编码器的原理结构和用VHDL实现。
3、预习顺序语句中的PROCESS、IF的格式及功能。
三、实验内容及步骤
设计一个8输入的优先编码器,输入分别为a7、a6、a5、a4、a3、a2、a1、a0,输出b(三位),其真值表如表3-1,元件图形符号如图3-1。
表3-18输入的优先编码器真值表
输入
输出
a7
a6
a5
a4
a3
A2
a1
a0
b2
b1
b0
1
×
×
×
×
×
×
×
1
1
1
0
1
×
×
×
×
×
×
1
1
0
0
0
1
×
×
×
×
×
1
0
1
0
0
0
1
×
×
×
×
1
0
0
0
0
0
0
1
×
×
×
0
1
1
0
0
0
0
0
1
×
×
0
1
0
0
0
0
0
0
0
1
×
0
0
1
0
0
0
0
0
0
0
1
0
0
0
图3-18输入的优先编码器元件图形符号
根据以上真值表和元件图形符号设计一个优先编码器,要求分别使用IF…ELSIF…ENDIF语句和IF…ENDIF语句两种方式实现,注意其中a0~a7的顺序。
如果改变顺序,是否仍然能够实现功能。
1、用VHDL语言设计上述优先编码器。
2、将已设计好的两个源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
3、分别改变两个源程序中a0~a7的顺序,再进行仿真,观察其结果是否改变。
四、思考题
1、写出顺序语句中的PROCESS、IF的格式
2、两种实现方法中a0~a7的顺序分别是什么?
代表了什么原理?
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出两个源程序。
3、记录波形仿真图。
实验四基本语句编程练习二
一、实验目的
1、了解VHDL语言中的并行语句。
2、了解并行语句中的ARCHITECTURE内部PROCESS之间的并行以及PROCESS内部的顺序。
3、了解BCD码六十进制同步计数器的原理及VHDL的描述方式。
二、预习要求
1、预习VHDL语言中并行语句的格式及功能
2、预习PROCESS进程之间的同步。
3、根据实验内容设计两进程的BCD码六十进制同步计数器。
三、实验内容及步骤
设计一个BCD码六十进制同步计数器,个位显示0~9,使用进程p1,十位显示0~5,使用进程p2,两个进程PROCESS的敏感信号均为clk,个位十位均用4位二进制数表示。
个位每计到9,十位就自动计一个数。
十位计到5,个位计到9,整个计数器就清零,并输出一个进位信号。
该器件具有的端口及功能如下:
clk:
输入时钟
clr:
同步清零
oc:
六十进制的进位输出
y0:
四位,计数个位
y1:
四位,计数十位
BCD码六十进制同步计数器的元件图形符号如图4-1所示。
图4-1BCD码六十进制同步计数器的元件图形符号
1、将上述源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
2、进行传输延时分析并记录之。
3、将该设计进行目标器件选择、管脚锁定、器件编程/配置。
验证是否实现六十计数。
记录管脚锁定情况。
参考附录中《各种下载板与主板主要器件连接关系表》。
*4、如果将十位计数进程的敏感信号改为个位计数的进位信号,那么编写该源程序,在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
四、思考题
1、在两个进程之间是如何配合工作的?
哪些语句完成了这个功能?
2、如果改为异步清零,在源程序中怎么改?
3、画出源程序的流程图。
*4、画出实验内容(四)的流程图。
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出源程序。
3、记录波形仿真图分析。
4、记录管脚锁定情况。
*5、写出实验内容(四)的源程序,并记录仿真波形。
实验五VHDL组合逻辑电路设计
一、实验目的
1、了解VHDL组合逻辑电路设计。
2、掌握一位全加器的VHDL实现方法。
3、学习使用COMPONENT语句实现组合逻辑电路。
二、预习要求
1、预习如何使用VHDL语言设计组合逻辑电路。
2、掌握一位全加器的原理及结构。
3、预习COMPONENT语句的格式及功能。
4、根据实验原理写出一位全加器的VHDL源程序。
三、实验内容及步骤
一位全加器的真值表5-1,ain、bin是一位的加数与被加数,cin是低位向本位的进位,cout是本位向更高位的进位,sum是本位和。
一位全加器如图5-2所示的f_adder、它由半加器、或门实现系统,图5-1是半加器h_adder的电路结构图,使用VHDL分别写出h_adder.vhd和f_adder.vhd的源程序实现一位全加器。
表5-1一位全加器真值表
ain
bin
cin
cout
sum
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
图5-1半加器h_adder
图5-2一位全加器f_adder
1、将上述源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
2、将该设计进行目标器件选择、管脚锁定、器件编程/配置。
验证是否实现一位全加其功能。
记录管脚锁定情况。
参考附录中《各种下载板与主板主要器件连接关系表》。
*3、根据表5-1写出输入输出之间的逻辑表达式,通过该逻辑表达式重新编写VHDL代码,并编译仿真。
四、思考题
1、根据表5-1写出输入输出之间的逻辑表达式。
2、通过该逻辑表达式编写一位全加器的VHDL代码。
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出半加器和一位全加器两个源程序。
3、记录波形仿真图。
4、记录管脚锁定情况。
实验六VHDL时序逻辑电路设计
一、实验目的
1、了解VHDL时序逻辑电路设计。
2、掌握四位移位寄存器的VHDL实现方法。
3、了解信号赋值语句生成寄存器的功能。
二、预习要求
1、预习如何使用VHDL设计时序电路。
2、掌握时钟clk设置的方法。
3、根据实验原理使用VHDL语言设计一个四位移位寄存器。
三、实验内容及步骤
图6-1四位移位寄存器
图6-1为四位移位寄存器,串行输入串行输出,由四个D触发器组成。
具有两个输入端(数据输入端d和时钟输入端clk)与一个数据输出端q,在时钟信号的作用下,前级的信号向后级移动。
编写VHDL源程序。
要求:
(1)首先编写D触发器的VHDL代码,然后使用COMPONENT调用D触发器设计四位移位寄存器的VHDL源程序;
(2)观察各D触发器之间的信号连接情况,使用信号赋值语句完成四位移位寄存器的VHDL源程序。
将上述源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
四、思考题
1、根据实验内容
(2),如果将内部连接的信号设置成变量,是否能够实现该四位移位寄存器?
2、如果将输入及输出改为并口,图5-1应该如何改变?
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出实验内容的源程序。
3、记录波形仿真图。
实验七VHDL有限状态机设计
一、实验目的
1、本实验为综合性实验,在了解有限状态机的原理与功能的基础上,巩固前面各章所学的知识,如语言基本结构、顺序语句、数据类型、时序逻辑、组合逻辑描述等。
2、了解序列检测器的原理和设计方法。
3、掌握根据状态转换图设计有限状态机。
二、预习要求
1、预习有限状态机的几种不同风格,并比较它们之间的差别。
2、根据序列检测器的功能,画出状态转换图。
3、根据序列检测器的状态转换图自行设计有限状态机。
三、实验内容及步骤
设计实现一个序列检测器,输入是一个串行位流。
当出现序列“111”时,输出d为‘1’。
这里必须考虑出现长连‘1’的问题,也就是说,如果出现“0111110”,则输出就要保持连续三个时钟周期的‘1’。
图5-1给出了这个状态机的状态转换图,这里由四个状态,命名为:
zero,one,two和three,分别对应检测到的连续‘1’的个数。
图7-1序列检测器状态转换图
2、将已设计好的源程序在MAX+PLUSⅡ环境中运行,包括编译、仿真,通过产生的波形图验证其功能,并记录输入输出波形图,其中波形输入自行设定。
四、思考题
1、分别写出Moore状态机和Mearly状态机的原理和功能,并比较它们之间的差别。
2、若检测到四个或四个以上的连‘1’时,输出d=‘0’,那么状态转换图该如何更改?
五、实验报告要求
1、写出实验题目、实验目的、实验原理、实验仪器、实验内容。
2、写出源程序。
3、记录波形仿真图。
附录各种下载板与主板主要器件连接关系表
P1
序号
主要器件名称
信号名
兼容器件名
兼容信号名
F10K10
1
电源正极
VCC
VCC
2
输出发光管
L16
U12
2864
CS1
25
3
输出发光管
L15
CS2
24
4
输出发光管
L14
WE
23
5
输出发光管
L13
TLC
7528
WR
22
6
输出发光管
L12
DACA/B
21
7
输出发光管
L11
TLC
549
CS
19
8
输出发光管
L10
OUT
18
9
输出发光管
L9
CLK
17
10
数码管
M6
M6A
MS1~MS8
8段显示器信号
a
16
11
M6B
b
11
12
M6C
c
10
13
M6D
d
9
14
数码管
M5
M5A
e
8
15
M5B
f
7
16
M5C
g
6
17
M5D
dp
5
18
数码管
M4
M4A
MS1~MS8
动态扫描控制线
MS8
3
19
M4B
MS7
83
20
M4C
MS6
81
21
M4D
MS5
80
22
数码管
M3
M3A
MS4
79
23
M3B
MS3
78
24
M3C
MS2
73
25
M3D
MS1
72
26
数码管
M2
M2A
VGA
V-SY
71
27
M2B
ADM20E
(RS232)
RXD
70
28
M2C
TXD
69
29
M2D
67
序号
主要器件名称
信号名
兼容器件名
兼容信号名
F10K10
30
数码管
M1
M1A
VGA
RED/JK1
66
31
M1B
GRE/JK2
65
32
M1C
BLU
64
33
M1D
H-SY
62
34
输出发光管
L8
TLC
7528
D7
61
35
输出发光管
L7
D6
60
36
输出发光管
L6
D5
59
37
输出发光管
L5
D4
58
38
输出发光管
L4
D3
54
39
输出发光管
L3
D2
53
40
地端
GND
GND
P2
41
电源正极
VCC
VCC
42
43
44
45
46
47
48
49
50
扬声器
SP
U12
2864
A12
27
51
数据开关
K1
A0
28
52
数据开关
K2
A1
29
53
数据开关
K3
A2
30
54
数据开关
K4
A3
35
55
数据开关
K5
A4
36
56
数据开关
K6
A5
37
57
数据开关
K7
A6
38
58
数据开关
K8
A7
39
59
数据开关
K9
A8
47
60
数据开关
K10
A9
48
6