**这是本文档旧的修订版!**
点亮LED
就像软件编程里的“Hello World”,点灯是FPGA学习的第一步,不要小瞧这么一颗小小的灯,点灯的方式可以有多种。在本节,我们通过几个点灯的程序达到以下的目标:
- 体验LED的工作原理;
- 了解Verilog代码的结构
- 体验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熄灭。
所以我们可以用开关或者按键来控制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. 引脚分配
4. 小结
下载完程序后就可以实现按键开关控制LED灯的亮灭。了解小脚丫STEP-MXO2 V2上的外设LED、按键和开关的使用。如果你对Diamond软件的使用不了解,请参考这里:Diamond的使用。




