北航电气实验FPGA实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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";

相关文档
最新文档