研究生FPGA实验项目(LED显示及秒表计时器设计)
更新时间:2024-04-08 21:49:01 阅读量: 综合文库 文档下载
- 研究生学fpga推荐度:
- 相关推荐
FPGA实验项目
实验一、LED译码显示实验
实验目的:1、掌握QuartusII6.0等EDA工具软件的基本使用; 2、熟悉VHDL硬件描述语言编程及其调试方法;
3、学习用FPGA控制LED电路实现显示器设计。
实验内容:
本实验目标是利用FPGA逻辑资源,编程设计实现一个LED显示控制器。实验器材为EDA实验箱,FPGA芯片型号为EPF10K20RC208-4。电路设计采用VHDL硬件描述语言编程实现,开发软件为QuartusII6.0。 7段数码显示译码器基本原理
在数字电路中,常常需要把运算结果用十进制数显示出来,这就要用显示译码器。 现以驱动七段发光二极管的二-十进制译码器为例说明显示译码器的设计原理,如图1.1。
图1.1 7段数码显示译码器的原理示意图
7段显示译码器实际上是一种代码变换器,它是将4位二进制码转换成7位代码,燃亮LED显示器a、b、c、d、e、f、g七段中的对应段,显示出十进制数的字型。
表2.1 7段显示译码器真值表(以共阴极数码管为例)
在EDA实验箱中验证这个项目,可用数据开关表示输入,用LED数码管表示输出。 实验步骤:
1、 创建工程文件
先打开“我的电脑”,在E盘新建名为“fpga_lab1”文件夹。然后,利用QuartusII软件创建工程向导(New Project Wizard)创建一个新的工程。步骤如下:
1)打开QuartusII6.0软件界面,在“文件”菜单下选择“New Project Wizard”,点击“next”后弹出如下对话框
点选第一行右侧的“?”选择工程目录为“F:\\ fpga_lab1”,在第二行输入项目名称:led_display,第三行默认把项目名设为顶层文件名,点击“next”,
该窗口可为项目添加已经编辑好的程序文件,默认为空,点击“next”,
该窗口选择FPGA硬件信息,在Family下拉框内选择“FLEX10K”,在Avaliable devices窗口选择芯片型号为:EPF10K20RC208-4,其它选项默认。点击“next”
该窗口用来添加其它EDA工具软件参与综合、仿真、时序分析等工作,本实验默认不选,点击“next”
该窗口为建立的项目信息,点击“Finish”项目建立完毕。 2、 子模块电路设计(包括各个模块的功能仿真)
1) LED显示译码器设计
程序编写:在“文件”菜单下选择“New”,在弹出的窗口点击“VHDL File”点击“OK”打开vhdl编辑窗口。
编辑输入LED显示译码器程序,编辑完毕后保存,文件名保存为“decorder4_7”
(注:文件名必须与程序中实体名一致)
选中“Add file to current project”选项,添加当前文件到项目。 --文件名为decorder4_7.vhd
--功能:把4位二进制数变为七段LED显示码 library ieee;
use ieee.std_logic_1164.all;
entity decorder4_7 is port (A :IN STD_LOGIC_vector(3 downto 0); Y :OUT STD_LOGIC_vector(6 downto 0)); end decorder4_7;
architecture behave of decorder4_7 is begin process(A) begin case A is when \ when \ when \ when \ when \ when \
when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others => Y<=\ --注意X要大写 end case; end process; end behave;
文件编译:保存文件后,选择“Project”菜单,点击“Set as Top-Level Entity”项,把当前文件设置为顶层实体。
(注:Quartus环境下所有操作(综合、编译、仿真、下载等)都只对顶层实体进行,所以编译任何程序前,必须先设置该选项,把当前要编译的文件设置为顶层实体后,才能对该文件进行编译等操作)
打开“Processing”菜单,点击“Start Compilation”执行完全编译
状态窗口显示编译过程进度信息
编译结束,系统会弹出编译结束窗口,报告错误与警告数,点击“确定”。 编译报告给出所有编译结果信息,包括硬件信息、资源占用率等。
错误修改: 如果程序中有错误,需要根据“Messages”消息栏给出的错误提示修改程序,保存后须再次编译,直至所有错误均改正后,方可执行下一步操作。警告信息可以忽略。
波形仿真:
1. 建立波形图文件
关闭编译报告窗口,在“文件”菜单下选择“New”,选中“other files”标签页,在弹出的窗口点击“Vector Waveform File”点击“OK” 打开波形编辑窗口。
波形图编辑窗口
2. 定义仿真观测的输入输出节点
在波形编辑窗口左侧栏内单击鼠标右键,出现浮动菜单,选择“Insert Note or Bus?”出现“Insert Note or Bus?”对话框,点击“Node Finder?”按键,出现“Node Finder”对话框,如下图所示。
在图中“Filter:”选项下选择管脚类型为“Pins:all”,然后单击List按钮,可在左下侧
区域看到设计项目中的输入输出信号,单击按钮“= 〉”,将这些信号选择到“Selected Nodes”区,表示对这些信号进行观测,单击OK
此时的波形编辑窗口如下图所示。
保存波形文件,文件名为led_display.vwf(注:扩展名默认不填,文件名与项目名同名)
3. 为输入信号赋值
波形编辑器窗口左侧为信号赋值工具条,根据实际要求点选工具按钮对输入信号赋值。 1)为输入信号A赋值:单击A,使其呈蓝色即选中状态,单击为累加信号赋值工具按钮
,弹出Clock对话框,在Radix框中选择数值类型为Hexadecimal(十六进制),其它
值按默认即可,点击OK。
2)设置仿真时间
选择Edit菜单下的End Time?选项,打开End Time对话框,在time框内入输100单位为us。
再次保存波形文件,窗口如下
时序仿真
选择Processing菜单下的Begin Simulation选项,即开始波形仿真。状态窗口会显示出仿真进程,
仿真结束后可以看到仿真结果波形,如下图所示。观察波形可用工具条上的放大缩小按钮放大缩小波形图。
结果分析:图上可以观察到输出端Y有相应的波形输出,输入信号A与输出信号Y存在对应关系,可以用来检验程序正确性。
生成符号文件:
通过波形仿真可以确定程序功能是否正确后,就可以把该程序生成符号文件,以便在后面的程序中调用。具体操作是:打开File文件菜单,选择Creat/Updata菜单项,右侧弹出子菜单再选择Creat Symbol files for Current file把当前文件创建成符号文件。状态窗口有进度信息显示。
生成的符号文件可以在新建原理图窗口调入,进行层次化设计。下图为在打开的原理图界面下双击鼠标左键,即打开器件库窗口(Symbol),自己生成的模块在Project目录下。
器件管脚分配
打开Assignments菜单,选择Pins选项
弹出管脚分频窗口,在Location位置点击下拉按钮选择相应管脚
根据EDA实验箱的资源情况,输入分配到数据开关,输出分配到LED数码管上,管教具体分配如下表所示:
表 decoder4_7的管脚分配
信号名 A0 A1 A2 A3 Y0—Y6 对应器件名 S1(数据开关) S2(数据开关) S3(数据开关) S4(数据开关) L30(数码管) 物理管教号 75 74 73 71 202——208 注意:管脚分配完成一定要再次编译(即运行compiler)才能使管脚信息加入到下载的编程文件中。
编程下载(即硬件验证)
将下载用的十针扁平电缆一端插入计算机并行口,另一端插入EDA实验箱的电缆插口,接通实验箱电源。
打开tools菜单,选择Programmer打开下载窗口。
弹出窗口如图所示,Hardware Setup按钮右侧显示“No Hardware”,即没有可用的下载硬件,需要配置下载电缆设置。
单击Hardware Setup按钮,弹出Hardware Setup对话框,再点击Add Hardware按钮,弹出Add Hardware对话框,在Hardware type下拉菜单中选择ByteBlaster MV or ByteBlasterII选项,在Port选项中为LPT1,点击OK,再点击close,即完成编程电缆的添加。过程如下图所示:
勾选Program/Configure选项,点击Start,把程序下载到FPGA。
此时,FPGA内部已经完成一个LED译码显示电路设计,根据管脚分配表内对应的器件名称,波动开关可观察到LED显示出不同字符信息。
Ok!到目前为止,我们已经在Quartus下实现一个完整的设计项目。在这个设计中,一些工具条和快捷按钮的使用请阅读窗口中的提示,并不断摸索以求熟练掌握,提高设计速度。
实验二、基于LED秒表计时器实验
实验目的:1、掌握QuartusII6.0等EDA工具软件的基本使用; 2、熟悉VHDL硬件描述语言编程及其调试方法;
3、学习用FPGA控制LED电路实现显示器设计。
实验内容:
基于LED显示器可以进行电子表、秒表计时器、出租车计价器、频率计等复杂电路系统设计,本实验以秒表计时器为例,继续介绍Quartus编程环境以及VHDL语言与原理图混合编程应用。仅给出设计思路和必要的程序,请大家参照LED译码器实验的步骤完成。
本秒表计时器用于体育竞赛及各种要求有较精确时的各领域。此计时器是用VHDL语言描述的在FPGA上实现。它具有开关、计时、时钟和显示功能。
计时器的设计功能: (1)精度应大于1/100s
(2)计时器的最长计时时间为1小时, 在一般的短时间计时应用中,1小时应该足够了。为此需要一个6位显示器,显示最长时间为59分59.99秒。
(3)设置复位和启/停开关 复位开关用来使计时器清0。启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。
整体设计方案:
为了便于描述,将整个计时控制芯片分成4个子模块:分频器子模块(fpq),十进制计数器子模块(cnt10),六进制计数器子模块(cnt6),和译码显示子模块(decorder4_7),各模块之间信号连接关系的方框图如下:
程序设计:
各模块程序及生成的符号文件如下: 1、分频器子模块fpq模块设计
--本程序实现由4MHz晶振分频得到100Hz计数脉冲信号 --分频数计算:4000000/100=40000 library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL; entity fpq is
generic(framlenr:integer:=40000); Port (clk:in std_logic; bclk:out std_logic); end fpq;
architecture Behavioral of fpq is begin
process(clk)
variable cnt:integer; begin
if rising_edge(clk) then
if cnt>=framlenr then cnt:=0; bclk<='0'; elsif cnt>=framlenr/2 then cnt:=cnt+1;bclk<='1'; else cnt:=cnt+1; bclk<='0'; end if; end if; end process; end Behavioral; 生成的符号:
2、十进制计数器子模块(cnt10). LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10 IS
PORT (reset,en,clk:IN STD_LOGIC; carry:OUT STD_LOGIC;
q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT10;
ARCHITECTURE rtl OF cnt10 IS
SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC; BEGIN
PROCESS(clk) BEGIN
IF(clk'EVENT AND clk='1')THEN IF(reset='1')THEN qs<=\ ELSIF(en='1') THEN
IF(qs=\ --计数到9 qs<= \ ca<='0';
ELSIF(qs=\计数到8 qs<= qs+1; ca<='1';
ELSE qs<= qs+1; ca<='0'; END IF; END IF; END IF;
END PROCESS; PROCESS(ca) BEGIN q<=qs;
carry<=ca AND en; END PROCESS; END rtl; 生成的符号:
仿真波形:
3、 六进制计数器子模块(cnt6) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt6 IS
PORT (reset,en,clk:IN STD_LOGIC; carry :OUT STD_LOGIC;
q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT6;
ARCHITECTURE rtl OF cnt6 IS
SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC; BEGIN
PROCESS(clk) BEGIN
IF(clk'EVENT AND clk='1')THEN IF(reset='1')THEN qs<=\
ELSIF(en='1')THEN IF(qs=\ qs<= \ ca<='0';
ELSIF(qs=\ qs<= qs+1; ca<='1'; ELSE
qs<=qs+1; ca<='0'; END IF; END IF; END IF;
END PROCESS; PROCESS(ca,en) BEGIN
q<=qs;
carry<=ca AND en; END PROCESS; END rtl; 生成的符号:
仿真波形:
4、译码显示子模块(decorder4_7) 参考实验一 5、顶层文件设计
完整的顶层原理图如图所示:按图完成电路设计,
编译通过正确后,分配器件管脚,如下表格: 信号名 start resetb clk led0[6]—led0[0] led1[6]—led1[0] led2[6]—led2[0] led3[6]—led3[0] led4[6]—led4[0] led5[6]—led5[0] 对应器件名称 S2 S1 M3(石英晶体振荡器) L25(1/100s计数个位输出) L27(1/100s计数十位输出) L29(秒个位输出) L26(秒个位输出) L28(分个位输出) L30(分个位输出) 管脚号 74 75 183 150,157—162 163,164,166—170 172—177,179 180,186,187,189—192 193,195—200 202—208 分配完管脚信息,再次编译使之生效,最后下载程序到FPGA实验箱进行结果验证。
编译通过正确后,分配器件管脚,如下表格: 信号名 start resetb clk led0[6]—led0[0] led1[6]—led1[0] led2[6]—led2[0] led3[6]—led3[0] led4[6]—led4[0] led5[6]—led5[0] 对应器件名称 S2 S1 M3(石英晶体振荡器) L25(1/100s计数个位输出) L27(1/100s计数十位输出) L29(秒个位输出) L26(秒个位输出) L28(分个位输出) L30(分个位输出) 管脚号 74 75 183 150,157—162 163,164,166—170 172—177,179 180,186,187,189—192 193,195—200 202—208 分配完管脚信息,再次编译使之生效,最后下载程序到FPGA实验箱进行结果验证。
正在阅读:
研究生FPGA实验项目(LED显示及秒表计时器设计)04-08
老年糖尿病夜间低血糖的预防及护理论文12-16
经销商培训:Linux操作系统介绍07-25
老人节02-11
开题报告(冯海波)01-10
vmware 使用 - 图文04-12
检修技改管理办法正文11-09
那一次我懂得了爱03-27
JQ900A架桥机台车滑行线改造07-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 秒表
- 计时器
- 研究生
- 实验
- 项目
- 显示
- 设计
- FPGA
- LED