**这是本文档旧的修订版!**

点亮LED

就像软件编程里的“Hello World”,点灯是FPGA学习的第一步,不要小瞧这么一颗小小的灯,点灯的方式可以有多种。在本节,我们通过几个点灯的程序达到以下的目标:

  1. 体验LED的工作原理;
  2. 了解Verilog代码的结构
  3. 体验FPGA设计从创建工程 –》 输入代码 –》 逻辑综合 –》 分配管脚 –》 生成可下载的JED文件 –》 配置FPGA整个过程(理论知识参见FPGA设计流程

在本实例中,我们以Web IDE为例,同样的示例也可以通过Lattice的官方FPGA设计工具Diamond或Intel的官方设计工具quartus_prime来实现。

1. 硬件说明

在这个实验中,我们主要用到小脚丫FPGA开发板上的以下几个外设:

  • 板上有8个LED灯,可以选用其中的任何一个做单LED的实验


这是开发板上的8个红色LED,LED1~8信号连接到FPGA的引脚,作为FPGA输出信号控制。当FPGA输出低电平时LED变亮,当FPGA输出高电平时LED熄灭。

  • 板上有4个按键和4个开关,用做输入控制

    这是开发板上4个按键和4个开关,Key1~4是按键控制信号,SW1~4是开关控制信号,都连接到FPGA的引脚,作为FPGA的输入信号。当按键断开时,FPGA输入为高电平,当按键按下时,FPGA输入为低电平;当开关断开(OFF)时,FPGA输入为低电平,当开关合上(ON)时,FPGA输入为高电平。

所以我们可以用开关或者按键来控制LED的亮灭。

2. 用最简单Verilog代码点亮一颗LED

module one_led_on(led);
output led;
 
assign led = 1'b0;
 
endmodule

这段代码可以说是最简单的一段Verilog程序了,从这段程序中可以看出Verilog语言的基本结构

  • 以module(模块)开始,endmodule结束的一段程序为描述某一项功能的基本单元,类似软件里面的子程序;
  • 每个模块都有其名字,建议用贴切含义的英文来命名(比如本示例里面的oneledon),可读性强,也不会出现莫名其妙的编译错误;
  • 每个模块都有用()包裹起来的端口 - 跟其它模块或FPGA的外围电路打交道的输入输出信号,在本示例只用了一个端口led,因此()中只有一个端口的名字;
  • 对每一个端口的属性进行定义 - 是输入还是输出,是导线wire类型,还是存储器reg类型,在这里只用了一个输出端口led,对其属性“output”进行了定义,指定其为输出信号;
  • 定义完端口,就开始逻辑的主体,在这里也很简单,只是让led这个管脚信号为低电平,使用assign语句 - assign led = 1'b0, 1’b0表示为一位的数字,而且值为“0”

在“管脚分配”里将第三颗LED配置为亮 (ON)

2. Verilog代码

// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name    : LED.v
// Module name  : LED
// Author       : STEP
// Description  : control LED
// Web          : www.stepfpga.com
// 
// --------------------------------------------------------------------
// Code Revision History : 
// --------------------------------------------------------------------
// Version: |Mod. Date:   |Changes Made:
// V1.0     |2017/03/02   |Initial ver
// --------------------------------------------------------------------
// Module Function:利用按键和开关的状态来控制LED灯的亮灭。
 
module LED (key,sw,led);
 
	input [3:0] key;						//按键输入信号
	input [3:0] sw;							//开关输入信号
	output [7:0] led;						//输出信号到LED
 
	assign led = {key,sw};                                          //assign连续赋值。大括号是拼接符,表示把key和sw拼接组成一个新的8位数赋值给led
 
endmodule



3. 引脚分配

综合(synthesize)完成之后一定要配置FPGA的引脚到相应的外设,这样下载FPGA程序后才能达到我们想要的效果。

4. 小结

下载完程序后就可以实现按键开关控制LED灯的亮灭。了解小脚丫STEP-MXO2 V2上的外设LED、按键和开关的使用。如果你对Diamond软件的使用不了解,请参考这里:Diamond的使用