一、 实验项目
彩灯控制实验:利用开发实验平台上的8 个LED 实现常见彩灯实验。
二、 实验目的
1、学习QuatusII开发软件的基本操作。 2、熟悉教学实验板的使用。
3、初步掌握VHDL语言的设计、输入、编译、仿真和调试过程。 4、掌握USB-BLASTER下载工具的安装、以及程序下载方法。
三、 实验内容
1、首先编译下载给定的VHDL硬件描述语言编写的彩灯控制示例程序,仔
细观察在实验板上的现象。
2、用VHDL语言编辑彩灯控制程序,通过按键控制开发实验平台上的8个
LED灯的点亮顺序: (1) (2) (3) (4) (5) (6) (7) (8)
按键可选择核心板上的按键,或EDA主板上矩阵键盘作为按键,或DKA系列按键;
通过一个按键控制8个LED灯从左向右依次循环点亮; 通过一个按键控制8个LED灯从右向左依次循环点亮; 通过一个按键控制8个LED灯从中间向两边依次循环点亮; 通过一个按键控制8个LED灯从两边向中间依次循环点亮; 通过一个按键控制8个LED灯全部点亮; 通过一个按键控制8个LED灯全部熄灭。 以上共使用了六个按键控制六种点亮方式
3、扩展内容:能够设置8个LED灯的点亮频率(通过时钟、分频器实现)。 4、使用三个按键控制LED点亮的六种方式。
5、在QuatusII平台上进行波形仿真,保存一组通过按键控制8个LED灯从
中间向两边依次循环点亮的仿真波形图。 6、描述在实验板上观察到的现象。
四、 实验仪器
计算机、USB-BLASTER下载线、数字系统实验箱、5V稳压电源。
五、 实验原理
1、EDA主板上8个LED灯的电路连接如图1所示。8个LED采用74LS244进行隔离驱动,当FPGA对应I/O口为高电平时,相应的LED灯点亮;为低电平时,灯熄灭。
2、表1是对应的FPGA映射管脚表,即编译通过后,进行器件管脚分配时必
1
须按照相应的管脚号进行分配,否则就无法进行硬件验证测试。
图1 8个LED灯的电路连接图
表1 LED灯对应的FPGA映射管脚表 器件名 LED-0 LED-1 LED-2 LED-3 LED-4 LED-5 LED-6 LED-7
3、FPGA时钟连接电路及管脚分配分别如图2和表2所示。LED灯的循环点亮频率根据所选择时钟信号确定,或者选择某个固定时钟,然后通过分频器来改变循环点亮频率。
网络名 SD0 SD1 SD2 SD3 SD4 SD5 SD6 SD7 FPGA映射管脚 165 166 167 168 169 170 173 174 2
图2 时钟电路连接图
表2 时钟管脚映射表
器件名 CLK1 CLK2 CLK3 网络名 FPGA映射管脚 CLK1 CLK2 CLK3 152 29 28 4、核心板上的四个按键电路连接及管脚映射表如图3所示。按下键相应的I/O口为低电平,未按下为高电平。
图3 核心板上的四个按键电路连接及管脚映射表
3
5、EDA主板上4 x 4矩阵键盘电路连接电路图及管脚映射表如图4所示。
器件名key0key1key2key3Keys0/LCD网络名key0key1key2key3Keys0/LCDFPGA映射管脚134135136137138139器件名Keys/ADKeys/U11QK0/REST2网络名Keys/ADKeys/U11QK0/REST2FPGA映射管脚140141QK1QK2QK3QK1QK2QK3Keys/USBKeys/USB图4 EDA主板上4 x 4矩阵键盘电路连接电路图及管脚映射表
6、EDA主板上DKA系列按键电路连接图及管脚映射表如图5所示。
4
器件名 网络名 FPGA映射管脚 DKA0 DKA1 DKA2 DKA3 DKA4 DKA5 DKA6 DKA7 DKA0 156 DKA1 158 DKA2 159 DKA3 160 DKA4 161 DKA5 162 DKA6 163 DKA7 1
根据功能要求,可将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 Key0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 2 5
图5 EDA主板上DKA系列按键电路连接图及管脚映射表
灭 0 亮 1
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 Key从 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 Key左 1 0 0 0 0 0 0 0 3 到 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 Key右 0 0 0 0 0 0 0 1 4 到 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 Key中0 0 0 1 1 0 0 0 5 间 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 Key两1 0 0 0 0 0 0 1 6 边 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 6
亮 0 0
0 0 1 0 0 1 0 1 1 0 0 0 0 0 六、 实验步骤
1、安装USB-BLASTER编程工具(安装步骤见-文档最后-USB_BLASTER驱动程序的安装);
一 、建立工程项目:
2、在WINDOWS界面双击QuatusII图标 ,进入QuatusII开发环境; 3、选择“File=>New Project Wizard” 或Create a New Project ,
4、点击Next>,弹出如下New Project Wizard对话框,填写Directory, Name, Top-Level Entity等项目。其中第一、第二、第三个文本框分别是工程项目目录、项目名称和项目顶层设计实体的名称弹出
5、设置好存储位置和项目名称后点击Next>,弹出出现添加工程文件的对话框;
在上述对话框中,我们可以导入已经存在的*.vhd、*.vhdl或*.verilogwen文件(注:导入的文件名称需和项目名称一致),若原来己有文件,可选择相应文件。 若需要导入已存在文件到当前项目中,则按照以下步骤操作;若无需导入文件则直接点击Next> , 跳过步骤(5)、(6)、(7),执行步骤(8)
6、点击上图中红色框选中的按钮,弹出如下窗口,选择要导入的文件, 7、点击 “打开”,如下所示File name: 显示需要导入文件的位置:
8、点击 Add,将选中的文件添加到项目中,,
9、点击Next>,如下选择FPGA器件对话框,在Family下拉框中,根据需要选择一种型号的FPGA,比如CycloneII系列FPGA。然后在“Available devices:”中根据需要的FPGA型号选择FPGA型号
10、 选择器件类型-型号后,点击Next>,如下图,弹出其他EDA工具的对话框,由于我们使用Quartus Ⅱ的集成环境进行开发,因此不要作任何改动。 11、 单击Next进入工程的信息总概对话框,
12、 单击Finish按钮就建立了一个空的工程项目,
二 、编辑设计文件:
7
13、 执行“File=>New”弹出新建文件对话框,Quartus Ⅱ支持6种设计输入法文件(Design Files): “ AHDL File ”,是AHDL文本文件; “Block Diagram/Schematic File ”,是流程图和原理图文件,简称原理图文件;“EDIF File ”,是网表文件;“ SOPC Builder System ”,是可编程片上系统的编辑系统; “ Verilog HDL File ”,是Verilog HDL文本文件; “ VHDL File ”,是VHDL文本文件。这里我们使用VHDL语言,因此选择VHDL File。
14、 单击OK后,即建立一个空的原理图文件,在Quartus窗口的右方看到该文件(Vhdl.vhd),:
15、 执行File=> Save as命令,把它另存为文件名是“ light”(自己命名)的VHDL文件,文件后缀为.vhd。使该文件添加到刚建立的工程目录中去。点击 保存 ,则将当前的VHDL 文件保存至当前工程中,Quartus窗口的右方看到该文件名为 light.vhd,用VHDL语言编辑彩灯控制程序,控制开发实验平台上的8个LED灯的点亮顺序,将代码写入该文件,
16、 选择“Processing=》Start Compilation”或通过点击快捷菜单按钮开始编译
17、 编译结束后,会出现如下图所示的对话框,对话框会显示编译的错误和
,
警告的情况。若有错误,则可先双击编译器界面下方出现的第一个错误提示,可使第一个错误处改变颜色。检查纠正,第一个错误后保存再编译,如果还有错误,重复以上操作,直至最后通过。最后通过时应没有错误提示但可有警告提示,。
18、 在QuatusII平台上进行波形仿真。单击Files菜单下的New,选择Verification/Debugging Files下的Vector Waveform File后单击OK就能创建一个后缀名为.vwf的文本文件,绘制相应的输入波形文件,根据输入波形仿真输出波形;
19、 点击ok,出现波形文件编辑器,
20、 在上图鼠标所在处(红色框)单击鼠标右键选择Insert Node or Bus„命令
21、 出现的对话框,单击Node Finder„按键。
8
22、 在出现的对话框中单击List按键选择需要的输入输出引脚,单击选中的按键,选中需要的输入输出引脚。
23、 然后,单击两次确定按钮,
24、 设置仿真时间
执行Edit=>End Time命令,弹出如下设置时间对话框,设置总时间为1.0us:
执行Edit=>Grid Size命令,设置时间单位为10 ns,
设置界面:
25、 设置输入信号波形
单击工具箱中缩放工具按钮,将鼠标移到编辑区内,单击鼠标,调整波形区横向比例(左键放大,右键缩小), 单击工具箱中的选择按钮,然后在要设置波形的区域上按下鼠标左键并拖动鼠标,选择要设置的区域,
(1) 单击工具箱中高电平设置按钮,将该区域设置为高电平,如图所示。 (2) 用相似的方法设置其他区域的波形,如图所示,注意波形与真值表相
对应。
26、 选择“processing-》generate functional simulation netlist”,弹出如下保存对话框:(文件名需要与对应的.vhd文件名一致)
9
27、 点击 是 ,弹出如下对话框,保存路径与工程路径一致,文件名为light:
28、 点击 保存,将该波形文件保存,保存成功,弹出如下对话框:
29、 再选择“processing=》Start simulation”,进行仿真,仿真成功弹出如下对话框。
10
30、 仿真结果如图,认真核对
输入输出波形,可检查设计的功能正确与否。 31、 单击Assignments下的device选择器件;
11
32、 单击Assignments下的pins进行管脚分配;
33、 单击Processing下面的Compiler tool编译程序;
34、 单击Tools下面的Programmer,
12
35、 单击Hardware Stup,在HardwareSettings选项卡下的Currently selected hardware选择USB-BLASTER下载工具,后点击close。
36、 单击Add File ,选择后缀为.sof的文件,点击打开。
37、 点击start,将程序下载到FPGA芯片中,仔细观察实验板上的现象,测试验证程序。
七、 实验结果
定义时钟,分频
if(clkin'event and clkin='1')then if(data=2) then data<=0;
13
clk2<=not clk2; else
data<=data+1; end if; end if;
分频比设为3,当按键为0000 0001(第二个实验为000)时,8个灯从左往右逐个亮起。当按键为00 0010(第二个实验为001)时,8个灯从右往左逐个亮起。当按键为00 0100(第二个实验为010)时,8个灯从中间向两边逐个亮起。当按键为00 1000(第二个实验为011)时,8个灯从两边向中间逐个亮起。当按键为01 0000(第二个实验为100)时,8个灯全亮。当按键为10 0000(第二个实验为101)时,8个灯全不亮。
八、 源程序
(Verilog 或者VHDL 编写的实验源程序) --******************************************** LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--******************************************** ENTITY light is
--********************************************* ARCHITECTURE behv OF light IS
constant len : integer:=7; signal banner : STD_LOGIC:='0'; signal clk,clk2:
STD_LOGIC;
PORT(
clk1 );
: IN STD_LOGIC;
light: buffer std_logic_vector(7 downto 0)
END light;
14
BEGIN clk<=(clk1 and banner) or (clk2 and not banner); process(clk1) begin if clk1'event and clk1='1' then clk2<=not clk2;
end if; end process; process (clk) variable flag: bit_vector(2 downto 0):=\"000\"; begin
if clk'event and clk='1' then if flag=\"000\" then light<='1' & light(len downto 1); if light(1)='1' then
flag:=\"001\"; end if;
elsif flag=\"001\" then
light<=light (len-1 downto 0) & '0'; if light(6)='0' then
flag:=\"010\"; end if;
elsif flag=\"010\" then
light(len downto 4) <=light (len-1 downto 4)&'1'; light(len-4 downto 0) <='1'& light(len-4 downto 1); if light(1)='1' then
flag:=\"011\"; end if;
elsif flag=\"011\" then
light(len downto 4) <='0'& light(len downto 5); light(len-4 downto 0) <= light(len-5 downto 0)&'0'; if light(2)='0' then
flag:=\"100\";
end if;
15
elsif flag=\"100\" then
light(len downto 4)<='1'&light(len downto 5); light(len-4 downto 0) <='1'& light(len-4 downto 1); if light(1)='1' then
flag:=\"101\"; end if;
light<=\"00000000\"; flag:=\"110\"; banner<=not banner; flag:=\"000\"; end if;
elsif flag=\"101\" then
elsif flag=\"110\" then
end if;
end process;
end behv;
九、 数据分析
把时钟1分频为时钟2,把时钟2设为时钟,检测按键数值,当按键为0000 0001(第二个实验为000)时,8个灯从左往右逐个亮起。 当按键为00 0010(第二个实验为001)时,8个灯从右往左逐个亮起。当按键为00 0100(第二个实验为010)时,8个灯从中间向两边逐个亮起。当按键为00 1000(第二个实验为011)时,8个灯从两边向中间逐个亮起。当按键为01 0000(第二个实验为100)时,8个灯全亮。当按键为10 0000(第二个实验为101)时,8个灯全不亮。
出现的问题:一开始设定的时候仪器选择错误,后来经过助教的指正改了过来;录入程序后发现灯一直不亮,询问助教老师,告诉我们是仪器的问题;分频的时候对于分频的位置出了分歧,再讨论解决。
参考文献 十、 实验体会
实验本身因为有步骤遵循还是很容易做的,程序大部分还是可以猜测出来时什么意思,用来干嘛的,但是在改动方面还是不好掌控,比如说添加分频比的位置,还有改动按键时
variable flag: bit_vector(2 downto 0):=\"000\"
16
就不知道“7”改不改成“2”会对结果产生的影响。
实验前准备:
1、首先将FPGA核心板与EDA底板连接好。注意:J6对应底板上面的J6
位置,J7对应底板上的J7位置,不要插错位置。 2、将电源插到底板上面的电源接口J9的位置。
3、选好的实验用LCD插到正确的位置上,EDA上有LCD1602和LCD128,
液晶的PIN1对应液晶接口的1脚。
4、核心板上选择跳线J20。位置标记了EXT_SEL,默认是短接,这时候LCD、
A/D才能正常挂到总线上面。
5、板上外设选择跳线,J23旁边MCU_DISABLE,将该跳线短接,MCU将
与总线脱离。
6、FMQ选择跳线J13。标记FMQ ON。若要使用底板上的FMQ,则短接。 7、总线上拉电阻PR2,插上该排阻,可将总线(SD0~SD7)上拉到5VCMOS
电平状态,这样系统将会适应5V系统的工作模式。平时是插上,因FPGA和CPLD的I/O可以承受5V电平标准。
8、步进电机接口。J11插上,步进电机就会通电。默认是断开。
9、系统时钟源的选择跳线。板上有CLK1、CLK2、CLK3三个系统时钟源,
旁边标记有时钟源的频率,可根据需要选择不同的频率。
17
USB BLASTER驱动程序的安装
1.将USB连接线一端(方形)连接到USB-Blaster的USB接口,另一端(扁平)连接到插入计算机USB接口。在桌面的任务栏上将出现下图所示画面, 指示检测到Altera USB-Blaster。
2. 稍等片 出现“找到新的硬件向导” 3. 选择“是,仅这一次”,点下一步继续。
4. 选择“从列表或指定位置安装”,点下一步继续。
5. 选中“在搜索中包括这个位置”,点浏览按钮找到驱动程序的位置。驱动程序就位于QuartusII安装目录的drivers/usb-blasater子目录下。本图中QuartusII安装在d:\\altera\\quartus50目录下。 6. 点击“仍然继续”
7. 点击“完成”结束驱动的安装。如果您此时进入到设备管理器,您将看到在通用串行总线控制器列表中,出现了ALTERA USB-Blaster。 8. 在QuartusII下,Hardware Setup将能看到USB-Blaster,端口是USB-0。
18
本节课实验要求:
(1) 实现六个按键控制LED的六种点亮
000001 ------ 8个LED灯从左向右依次循环点亮; 000010 ------8个LED灯从右向左依次循环点亮; 000100 ------8个LED灯从中间向两边依次循环点亮; 001000 ------8个LED灯从两边向中间依次循环点亮; 010000 ------8个LED灯全部点亮; 100000 ------8个LED灯全部熄灭。
(2) 实现使用三个按键控制LED的六种点亮方式
三个按键共有8种状态(000,001,010,011,100,101,110,111),可任选其中六种实现控制,如下: 001 ------ 8个LED灯从左向右依次循环点亮; 010 ------8个LED灯从右向左依次循环点亮; 011 ------8个LED灯从中间向两边依次循环点亮; 100 ------8个LED灯从两边向中间依次循环点亮; 101 ------8个LED灯全部点亮; 110 ------8个LED灯全部熄灭。
19
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务