北航电气实验FPGA实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京航空航天大学电气实验报告
FPGA实验
张天
130325班
学号:13031220
一.实验目的
略
二.实验要求
略
三.实验设备
略
四.实验内容
略
五.实验实例
1.实例6-1
思考题1:输出信号q3q2q1绑定接口电路的七段数码管或米字型数码管或LED点
阵显示?
答:
思考题2:怎样修改成4位二进制减法计数器,具有清零,启动控制功能等?
答:
思考题3:把计数器修改成2位或更多位十进制计数功能,再用七段数码管进行显示等?
答:
2.实例6-2
思考题:一位半加器电路采用VHDL语言实验
答:
library ieee;
use ieee.std_logic_1164.all;
use iee.std_logic_unsigned.all;
entity halfadd is
port (a,b;in std_logic
sum,carry; out std_logic)
end entity halfadd;
architecture halfadd is
begin
sum<=a and(not b)+b and (not a);
carry<= a and b;
end architecture halfadd;
六.实验过程
我们组做的是一个利用led点阵规律亮灭变化形成字体,并且字体产生变化,形成“自动化❤”的样子,实现图片如下图:
1.实验分析:
实验设计思路:
本实验的设计思路是利用led灯的
辉光效应,利用逐行扫描,在高频情况下就会显示所有行的亮灯,进而形成汉字,并且有时钟计数程序,当时钟数字达到规定值(本实验为111111111b)时,跳转到下一个状态,显示第二个憨子。每个汉字的颜色由led灯决定,改led矩阵有红绿两种led灯,因此有红绿橙三种颜色显示。
2.实现过程
对设计思路的实现并非一帆风顺,最初编写的时候遇到了一些问题。首先,定义输入输出角是个繁琐的事情(需要定义40+次,每次必须手动),另外,在程序编写过程中,也出现了一些逻辑错误,对于错误,我们仔细逐条语句分析,最终解决了错误,解决过程中也加深了对FPGA的语言逻辑及硬件结构的理解。
七.FPGA使用心得
在学习FPGA过程中,我获得了很多收获。首先,由于有单片机的基础,上手过程并不是十分复杂,对于输入输出的理解我没有遇到太多阻碍。这次学习也验证了我具有短时间内掌握一款新型的芯片的能力。学习过程中最大的困难就是VDHL语言的编写。我们以前有c语言的基础,不过学习这种新的语言还是花出了不少时间与精力,现在可以说基本掌握的VDHL的基本写法和思路,能运
用到需要的程序中来。另外,调试的过程能极强地加大对程序的理解及逻辑的构建,在调试中,逐渐明白了以前不懂的东西,对FPGA的工作原理的理解更加透彻了。
不了解的人可能会把FPGA当做一种单片机,但其实,相比于单片机,FPGA 是有很多优势的。其无固定的硬件结构使其具有远超单片机的灵活性,另外,它的编程方法可以同步进行多个process 使其能同步处理多个进程,因此,它的
运算效率大大提高,在当今社会,有很大的利用价值。
八.电气实验总结
略
附:程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity led is
port(clk:in std_logic;
rst:in std_logic;
com:out std_logic_vector(7 downto 0);
red:out std_logic_vector(7 downto 0);
green:out std_logic_vector(7 downto 0));
end;
architecture led of led is
constant s0:std_logic_vector(1 downto 0):="00";
constant s1:std_logic_vector(1 downto 0):="01";
constant s2:std_logic_vector(1 downto 0):="10";
constant s3:std_logic_vector(1 downto 0):="11";
signal present:std_logic_vector(1 downto 0);
signal com1:std_logic_vector(7 downto 0);
signal red1:std_logic_vector(7 downto 0);
signal green1:std_logic_vector(7 downto 0);
signal count:std_logic_vector(9 downto 0);
signal zi:std_logic_vector(2 downto 0);
begin
process(rst,clk)
begin
if(rst='0')then--――系统初始化
present<=s0;
com1<=(others=>'0');
elsif(clk'event and clk='1')then
case present is
when s0=>if(com1="00000000")then
com1<="11111111";
red1<="11111111";
green1<="11111111";
zi<="000";
present<=s0;
else if(count="111111111")then
count<=(others=>'0');
present<=s1;
else
case zi is
when "000"=>
com1<="00001000";