川大数字信息实验FPGA彩灯实验报告.docx
- 文档编号:3463074
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:14
- 大小:840.15KB
川大数字信息实验FPGA彩灯实验报告.docx
《川大数字信息实验FPGA彩灯实验报告.docx》由会员分享,可在线阅读,更多相关《川大数字信息实验FPGA彩灯实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
川大数字信息实验FPGA彩灯实验报告
数字信息技术实验报告
实验名称:
彩灯实验
实验时间:
班级:
实验人:
一、实验项目
彩灯控制实验:
利用开发实验平台上的8个LED实现常见彩灯实验。
二、实验目的
1、学习QuatusII开发软件的基本操作。
2、熟悉教学实验板的使用。
3、初步掌握VHDL语言的设计、输入、编译、仿真和调试过程。
4、掌握USB-BLASTER下载工具的安装、以及程序下载方法。
三、实验内容
1、首先编译下载给定的VHDL硬件描述语言编写的彩灯控制示例程序,仔细观察在实验板上的现象。
2、用VHDL语言编辑彩灯控制程序,通过按键控制开发实验平台上的8个LED灯的点亮顺序:
(1)按键可选择核心板上的按键,或EDA主板上矩阵键盘作为按键,或DKA系列按键;
(2)通过一个按键控制8个LED灯从左向右依次循环点亮;
(3)通过一个按键控制8个LED灯从右向左依次循环点亮;
(4)通过一个按键控制8个LED灯从中间向两边依次循环点亮;
(5)通过一个按键控制8个LED灯从两边向中间依次循环点亮;
(6)通过一个按键控制8个LED灯全部点亮;
(7)通过一个按键控制8个LED灯全部熄灭。
3、扩展内容:
能够设置8个LED灯的点亮频率(通过时钟、分频器实现)。
4、在QuatusII平台上进行波形仿真,保存一组通过按键控制8个LED灯从中间向两边依次循环点亮的仿真波形图。
5、描述在实验板上观察到的现象。
四、实验仪器
计算机、USB-BLASTER下载线、数字系统实验箱、5V稳压电源。
五、实验原理
1、EDA主板上8个LED灯的电路连接如图1所示。
8个LED采用74LS244进行隔离驱动,当FPGA对应I/O口为高电平时,相应的LED灯点亮;为低电平时,灯熄灭。
2、表1是对应的FPGA映射管脚表,即编译通过后,进行器件管脚分配时必须按照相应的管脚号进行分配,否则就无法进行硬件验证测试。
图18个LED灯的电路连接图
表1LED灯对应的FPGA映射管脚表
器件名
网络名
FPGA映射管脚
LED-0
SD0
165
LED-1
SD1
166
LED-2
SD2
167
LED-3
SD3
168
LED-4
SD4
169
LED-5
SD5
170
LED-6
SD6
173
LED-7
SD7
174
3、FPGA时钟连接电路及管脚分配分别如图2和表2所示。
LED灯的循环点亮频率根据所选择时钟信号确定,或者选择某个固定时钟,然后通过分频器来改变循环点亮频率。
图2时钟电路连接图
表2时钟管脚映射表
器件名
网络名
FPGA映射管脚
CLK1
CLK1
152
CLK2
CLK2
29
CLK3
CLK3
28
4、
核心板上的四个按键电路连接及管脚映射表如图3所示。
按下键相应的I/O口为低电平,未按下为高电平。
图3核心板上的四个按键电路连接及管脚映射表
5、EDA主板上4x4矩阵键盘电路连接电路图及管脚映射表如图4所示。
图4EDA主板上4x4矩阵键盘电路连接电路图及管脚映射表
6、EDA主板上DKA系列按键电路连接图及管脚映射表如图5所示。
器件名
网络名
FPGA映射管脚
DKA0
DKA0
156
DKA1
DKA1
158
DKA2
DKA2
159
DKA3
DKA3
160
DKA4
DKA4
161
DKA5
DKA5
162
DKA6
DKA6
163
DKA7
DKA7
164
图5EDA主板上DKA系列按键电路连接图及管脚映射表
根据功能要求,可将8路彩灯控制器的输出按花形循环要求列成表格,其中。
Q7-Q0是控制器输出的8路彩灯的控制信号,高电平时彩灯亮。
当按下不同的按键时,LED的控制信号不同。
按下Key1,8个LED同时为低电平,即全灭,按下Key2,8个LED控制信号同时为高电平,即全亮;按下Key3,8个LED的控制信号按照时钟信号或分频器依次赋值为
1000000-01000000-00100000-00010000-00001000-00000100-00000010-00000001。
通过调整时钟或分频器可调整LED的点亮速度。
同理,按照上述方法分别按下Key4,Key5,Key6,实现不同的点亮方式。
全灭
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key1
0
0
0
0
0
0
0
0
全亮
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key2
1
1
1
1
1
1
1
1
从
左
到
右
点
亮
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key3
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
从
右
到
左
点
亮
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key4
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
从
中间
到
两边
点
亮
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key5
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
0
0
1
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
0
1
0
0
1
0
0
0
1
0
0
0
0
1
0
1
0
0
0
0
0
0
1
从
两边
到
中间
点
亮
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Key6
1
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
0
1
1
0
0
0
六、实验步骤
一、建立工程项目:
1、
安装USB-BLASTER编程工具(安装步骤见-文档最后-USB_BLASTER驱动程序的安装);
2、在WINDOWS界面双击QuatusII图标,进入QuatusII开发环境;
3、选择“File=>NewProjectWizard”或CreateaNewProject,出现向导对话框;
4、点击Next>,弹出如下NewProjectWizard对话框,填写Directory,Name,Top-LevelEntity等项目。
其中第一、第二、第三个文本框分别是工程项目目录、项目名称和项目顶层设计实体的名称弹出如下窗口;
5、设置好存储位置和项目名称后点击Next>,弹出出现添加工程文件的对话框;
在上述对话框中,我们可以导入已经存在的*.vhd、*.vhdl或*.verilogwen文件(注:
导入的文件名称需和项目名称一致),若原来己有文件,可选择相应文件。
若需要导入已存在文件到当前项目中,则按照以下步骤操作;若无需导入文件则直接点击Next>,跳过步骤(5)、(6)、(7),执行步骤(8)
6、点击上图中红色框选中的按钮,弹出如下窗口,选择要导入的文件,如下选中light.vhd
7、点击“打开”,如下所示Filename:
显示需要导入文件的位置:
8、点击Add,将选中的文件添加到项目中,如下所示,
9、点击Next>,如下选择FPGA器件对话框,在Family下拉框中,根据需要选择一种型号的FPGA,比如CycloneII系列FPGA。
然后在“Availabledevices:
”中根据需要的FPGA型号选择FPGA型号;
10、选择器件类型-型号后,点击Next>,如下图,弹出其他EDA工具的对话框,由于我们使用QuartusⅡ的集成环境进行开发,因此不要作任何改动。
11、单击Next进入工程的信息总概对话框;
12、单击Finish按钮就建立了一个空的工程项目;
二、编辑设计文件:
13、执行“File=>New”弹出新建文件对话框,QuartusⅡ支持6种设计输入法文件(DesignFiles):
“AHDLFile”,是AHDL文本文件;“BlockDiagram/SchematicFile”,是流程图和原理图文件,简称原理图文件;“EDIFFile”,是网表文件;“SOPCBuilderSystem”,是可编程片上系统的编辑系统;“VerilogHDLFile”,是VerilogHDL文本文件;“VHDLFile”,是VHDL文本文件。
这里我们使用VHDL语言,因此选择VHDLFile。
14、单击OK后,即建立一个空的原理图文件,在Quartus窗口的右方看到该文件(Vhdl.vhd),如下图:
15、执行File=>Saveas命令,把它另存为文件名是“light”(自己命名)的VHDL文件,文件后缀为.vhd。
使该文件添加到刚建立的工程目录中去。
16、点击保存,则将当前的VHDL文件保存至当前工程中,Quartus窗口的右方看到该文件名为light.vhd,用VHDL语言编辑彩灯控制程序,控制开发实验平台上的8个LED灯的点亮顺序,将代码写入该文件,如下图:
17、选择“Processing=》Start Compilation”或通过点击快捷菜单按钮
,开始编译;
18、编译结束后,会出现如下图所示的对话框,对话框会显示编译的错误和警告的情况。
若有错误,则可先双击编译器界面下方出现的第一个错误提示,可使第一个错误处改变颜色。
检查纠正,第一个错误后保存再编译,如果还有错误,重复以上操作,直至最后通过。
最后通过时应没有错误提示但可有警告提示。
19、在QuatusII平台上进行波形仿真。
单击Files菜单下的New,选择Verification/DebuggingFiles下的VectorWaveformFile后单击OK就能创建一个后缀名为.vwf的文本文件,绘制相应的输入波形文件,根据输入波形仿真输出波形;
20、点击ok,出现波形文件编辑器
21、在上图鼠标所在处(红色框)单击鼠标右键,出现下图所示菜单,选择InsertNodeorBus…命令
22、出现如图所示的对话框,单击NodeFinder…按键。
23、
在出现的对话框中单击List按键选择需要的输入输出引脚,如图所示
24、如图2-52所示,单击选中的按键,选中需要的输入输出引脚。
25、然后,单击两次确定按钮,出现如图所示的画面。
26、设置仿真时间
执行Edit=>EndTime命令
弹出如下设置时间对话框,设置总时间为1.0us:
执行Edit=>GridSize命令,设置时间单位为10ns
27、设置输入信号波形
单击工具箱中缩放工具按钮,将鼠标移到编辑区内,单击鼠标,调整波形区横向比例(左键放大,右键缩小),单击工具箱中的选择按钮,然后在要设置波形的区域上按下鼠标左键并拖动鼠标,选择要设置的区域。
(1)单击工具箱中高电平设置按钮,将该区域设置为高电平,如图所示。
(2)用相似的方法设置其他区域的波形,如图所示,注意波形与真值表相对应。
28、选择“processing-》generate functional simulation netlist”,弹出如下保存对话框:
(文件名需要与对应的.vhd文件名一致)
29、点击是,弹出如下对话框,保存路径与工程路径一致,文件名为light:
30、点击保存,将该波形文件保存,保存成功,弹出如下对话框:
31、再选择“processing=》Start simulation”,进行仿真,仿真成功弹出如下对话框。
仿真结果如图,认真核对输入输出波形,可检查设计的功能正确与否。
32、单击Assignments下的device选择器件;
33、单击Assignments下的pins进行管脚分配;
34、单击Processing下面的Compilertool编译程序;
35、单击Tools下面的Programmer,
36、单击HardwareStup,在HardwareSettings选项卡下的Currentlyselectedhardware选择USB-BLASTER下载工具,后点击close。
37、单击AddFile,选择后缀为.sof的文件,点击打开。
38、点击start,将程序下载到FPGA芯片中,仔细观察实验板上的现象,测试验证程序。
七、实验结果
1.工程建立及测试文件的生成:
根据要求建立工程light,添加相应的文件,编译,分配芯片的引脚,分析和综合。
生成可用于硬件测试的文件light.sof。
2.程序烧写:
根据要求安装好下载工具USBBLASTER的驱动,给器件上电。
在Programmer界面中选择相应的下载工具即USBBLASTER,选中相应的文件light.sof(默认选择)start下载。
3.硬件测试:
根据提供的程序可以实现功能:
6位按键控制6种不同状态的流水灯
修改源程序以实现3位按键控制6种不同状态的流水灯,具体修改步骤如下:
1.端口定义部分:
key:
instd_logic_vector(5downto0)修改位3位的标准逻辑向量类型即:
key:
instd_logic_vector(2downto0);
2.修改行为描述(architecture的process部分):
原程序为6位key的6种二进制编码,对应于3位flag的6种二进制编码,控制8位light的6种状态。
因此,最简单的修改方法即是将6位key的6种二进制编码改为3位key的6种二进制编码(3位二进制可实现8种编码)。
此外,原程序中对key5优先译码可删除不用。
这里选用的六种编码分别是:
001、010、011、100、101、000。
3.重新编译,删除多余分配的key的引脚。
分析综合,下载测试。
八、源程序
--********************************************
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
--********************************************
ENTITYlightis
PORT(
clk1:
INSTD_LOGIC;
light:
bufferstd_logic_vector(7downto0)
key:
instd_logic_vector(5downto0)--修改为std_logic_vector(2downto0)
);
ENDlight;
--*********************************************
ARCHITECTUREbehvOFlightIS
constantlen:
integer:
=7;
signalbanner:
STD_LOGIC:
='0';
signalclk,clk2:
STD_LOGIC;
BEGIN
clk<=clk1;
process(clk)
ifclk'eventandclk='1'then
ifkey="000001"the--修改为”001”
ifflag="000"then
light<='1'&light(lendownto1);
iflight
(1)='1'then
flag:
="001";
endif;
elsifflag="001"then
light<=light(len-1downto0)&'0';
iflight(6)='0'then
flag:
="000";
endif;
endif;
elsifkey="000010"then--修改为“010”
ifflag="000"then
light<=light(len-1downto0)&'1';
iflight(6)='1'then
flag:
="001";
endif;
elsifflag="001"then
light<='0'&light(lendownto1);
iflight
(1)='0'then
flag:
="000";
endif;
endif;
elsifkey="000100"then—修改为“011”
ifflag="000"then
light(lendownto4)<=light(len-1downto4)&'1';
light(len-4downto0)<='1'&light(len-4downto1);
iflight(0)='1'then
flag:
="001";
endif;
elsifflag="001"then
light(lendownto4)<='0'&light(lendownto5);
light(len-4downto0)<=light(len-5downto0)&'0';
iflight
(2)='0'then
flag:
="000";
endif;
endif;
elsifkey="001000"then—修改为“100”
ifflag="000"then
light(lendownto4)<='1'&light(lendownto5);
light(len-4downto0)<=light(len-5downto0)&'1';
iflight(3)='1'then
flag:
="001";
endif;
elsifflag="001"then
light(lendownto4)<=light(len-1downto4)&'0';
light(len-4downto0)<='0'&light(len-4downto1);
iflight
(1)='0'then
flag:
="000";
endif;
endif;
elsifkey="010000"then—修改为“101”
light<="11111111";
flag:
="000";
elsifkey(5)='1'then
light<="00000000";
flag:
="000";--删除改key(5)优先译码
elsifkey="000000"then—修改为“000”
light<="00000000";
flag:
="000";
endif;
endif;
endprocess;
endbehv;
九、数据分析
修改原程序实现新功能具体思路:
1.端口定义部分:
key:
instd_logic_vector(5downto0)修改位3位的标准逻辑向量类型即:
key:
instd_logic_vector(2downto0);
2.修改行为描述(architecture的process部分):
原程序为6位key的6种二进制编码,对应于3位flag的6种二进制编码,控制8位light的6种状态。
因此,最简单的修改方法即是将6位key的6种二进制编码改为3位key的6种二进制编码(3位二进制可实现8种编码)。
此外,原程序中对key5优先译码可删除不用。
这里选用的六种编码分别是:
001、010、011、100、101、000。
一十、实验体会
通过本次实验,熟悉了QuartusII软件对FPGA的设计工作流程。
将6位key控制8位流水灯的六种状态改为3为KEY来控制,通过这一过程更加加深了VHDL语言设计FPGA的方法。
本次实验较为成功,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 信息 实验 FPGA 彩灯 报告