FPGA入门实验教程 适合初学者
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
艾米电子工作室—让开发变得更简单
FPGA 入门系列实验教程——点亮LED
1. 实验任务
点亮发光二极管。通过这个实验,熟悉并掌握CPLD/FPGA 开发软件Quartus
II 的使用方法和开发流程以及Verilog HDL的编程方法。
2. 实验环境
硬件实验环境为艾米电子工作室型号EP2C5T144 开发套件。
软件实验环境为Quartus II 8.1 开发软件。
3. 实验原理
FPGA 器件同单片机一样,为用户提供了许多灵活的独立的输入/输出I/O 口
(单元)。FPGA 每个I/O 口可以配置为输入、输出、双向、集电极开路和三态门等各种组态。作为输出口时,FPGA 的I/O 口可以吸收最大为24mA 的电流,
可以直接驱动发光二极管LED 等器件。图1. 1 为8 个发光二极管硬件原理图,
本原理图对应艾米电子工作室型号为EP2C5T144 FPGA 开发板及接口板。通过
原理图可知如果要点亮这八个LED,所以只要正确分配并锁定引脚后,在相应
的引脚上输出相应高电平“1”,就可实现点亮该发光二极管的功能。本工作室开
发板均采用输出“1”点亮LED 的模式,以后就不再另作说明。
图1. 1 发光二极管LED 硬件原理图
艾米电子工作室—让开发变得更简单
FPGA 入门系列实验教程——LED 闪烁灯
1. 实验任务
让实验板上的8 个LED 周期性的闪烁。通过这个实验,熟悉并掌握采用计数
与判断的方式来实现分频的Verilog HDL 的编程方法以及Quartus II 软件的使
用方法和开发流程。
2. 实验环境
硬件实验环境为艾米电子工作室型号EP2C8Q208 增强版开发套件。
软件实验环境为Quartus II 8.1 开发软件。
3. 实验原理
艾米电子工作室开发套件板载50MHz 的时钟源,假如我们直接把它输入到发光二极管LED,由于人眼的延迟性,我们将无法看到LED 闪烁,认为
它一直亮着。如果我们期望看到闪烁灯,就需要将时钟源的频率降低后再输
出。本实验采用计数与判段的方式来实现降低时钟源的频率。计数电路可用计数器实现,每来一个时钟脉冲CLK,计数器就加1,而每当判断出计数器达到某个数值时,把输出状态求反,就使得8 个LED 的亮灭反转一次,即:周期性的输出高电平“1”和低电平“0”。这样设计相当于把50MHz 的时钟源分频后输出。如果最终要使得LED 1S 闪烁一次,即输出1Hz 的时钟脉冲,让计数器计到25000000 便可以让LED 亮0.5 秒、灭0.5 秒。
4. 实验程序
module led1 (clk ,led); // 模块名及端口参数
input clk; // 输入端口定义
output [7:0]led; // 输出端口定义
reg [7:0]led; // 输出端口定义为寄存器型
reg [25:0] buffer; // 中间变量buffer 定义为寄存器型
always@(posedge clk)
begin // 顺序语句,到end 止
buffer<=buffer+1; // 计数器buffer 按位加1
if(buffer==26'd2*******) //判别buffer 中的数值为25000000 时,
//做输出处理
begin
led<=~led; // led[0]-led[7]反转一次。
buffer<=0;
end
艾米电子工作室—让开发变得更简单
FPGA 入门系列实验教程——LED 流水灯
1. 实验任务
让实验板上的8 个LED 实现流水灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的Verilog HDL 的编程方法以及移位运算符的使用。
2. 实验环境
硬件实验环境为艾米电子工作室型号EP2C8Q208C8 增强版开发套件。
软件实验环境为Quartus II 8.1 开发软件。
3. 实验原理
流水灯,顾名思义就是让LED 象水一样的点亮。如果把流水做慢动作播放,可以想象到其实就是移动,即:把水块不断地向同一方向移动,而原来的水块保持不动,就形成了流水。同样,如果使得最左边的灯先亮;然后,通过移位,在其右侧的灯,由左向右依次点亮,而已经亮的灯又不灭,便形成了向右的流水灯。初始状态时,8 个灯都不亮。每来一个时钟脉冲CLK,计数器就加1。每当判断
出计数器中的数值达到25000000 时,就会点亮一个灯,并进行移位。FPGA 输出
的数据就应该首先是10000000,隔 1 秒钟变成11000000……一直变化到
11111111,这样,依次点亮所有的灯,就形成了流水灯。而当8 个灯都点亮时,
需要一个操作使得所有的灯恢复为初始状态,即:灯都不亮。然后,再一次流水
即可。如果是右移位,就出现向右流水的现象;反之,向左流水。
4. 实验程序
module ledwater(clk,led); // 模块名及端口参数
output [7:0] led; // 输出端口定义
input clk; // 输入端口定义,50M 时钟
reg[8:0] led_out; // 变量led_out 定义为寄存器型
reg[8:0] led_out1; // 变量led_out1 定义为寄存器型
reg[25:0]buffer; // 中间变量buffer 定义为寄存器型
always@(posedge clk)
begin
buffer=buffer+1;
if (buffer==26'd2*******) // 判别buffer 数值为25000000 时,做输出处理
begin
led_out=led_out<<1; // led 向左移位,空闲位自动添0 补位
if(led_out==9'b000000000)
led_out=9'b111111111;
艾米电子工作室—让开发变得更简单
FPGA 入门系列实验教程——LED 跑马灯
1. 实验任务
让实验板上的8 个LED 实现跑马灯的功能。通过这个实验,进一步掌握采用
计数与判断的方式来实现分频的Verilog HDL 的编程方法以及移位运算符的
使用。
2. 实验环境
硬件实验环境为艾米电子工作室型号EP2C8Q208C8 增强版开发套件。
软件实验环境为Quartus II 8.1 开发软件。
3. 实验原理
从LED[0]到LED[7]依次点亮,第二个灯点亮时第一个熄灭,每个灯交换的
时间为0.5S;看上去的效果就象一个亮点从LED[0] 跑向LED[7],然后重复此循
环,故命名跑马灯。初始状态时,LED[0]亮,其余熄灭。每来一个时钟脉冲CLK,
计数器就加1。每当判断出计数器中的数值达到25000000时,就会点亮LED[1],