## 点亮多颗LED 正如上所述,我们小脚丫FPGA板上有8颗LED和2颗3色LED,总计8+6=14颗,我们通过逻辑让某些灯亮,某些灯灭,看看代码如何写,实际的效果如何? 比如: * 8颗LED灯中的1、2、5、6、8亮 * 第一个RGB灯中的绿色灯亮 * 第二个RGB灯中的蓝色灯亮 * 其它灯都关掉 ### 1. 知识点 再上一个案例的基础上,进一步体会Verilog代码的语法结构 - 向量及注释。 ### 2. 原理图 {{drawio>fpga_multi_leds.png}} 在这个示例中用到了8个分立的LED,在Verilog中以向量(类似C中的数组)的方式来表示,另外两个RGB三色LED分开描述,以进行对比。 ### 3. Verilog代码 代码如下: module one_led_on(led, led_r1, led_g1, led_b1, led_r2, led_g2, led_b2); output [8:1] led; // define 8 led signals to be output output led_r1, led_g1, led_b1; output led_r2, led_g2, led_b2; assign led_r1=1'b1; // set signal of this pin = 1 to turn off the led connected to this pin assign led_g1=1'b0; // make the green led on assign led_b1=1'b1; assign led_r2=1'b1; assign led_g2=1'b1; assign led_b2=1'b0; // make the blue led on assign led = 8'b01001100; // set bit 8, 6, 5, 2, 1 = 0 to make led 8, 6, 5, 2, 1 on endmodule **Verilog语法说明**: * 此模块增加了一些管脚,需要对每一个管脚做端口说明(目前都还是”输出“的属性),并对每个管脚的信号电平进行赋值,对应于“亮”的LED赋值为0, 对应于“灭”的LED赋值为1。每一个连续赋值语句对应于一个电路结构,这些电路都是并行执行的,因此语句的顺序不会影响到最终的综合结果,这是与单片机的程序(顺序执行)不同的地方; * 8个LED可以分别写在端口里,并逐个赋值,也可以以8位位宽的**向量**方式来定义,在端口了只需要写一个led的名字即可,在端口定义的部分指定有多少个位 - [8:1] led, 为8位,名字分别外led[8] (对应于LED8)....led[1](对应于LED1) * 一个好的代码,要对一些重要的信息给出“注释”说明,单行注释可以用//的方式, //后面的部分为注释内容。多行注释(又被称为块注释)以两个字符/* 开始,并以*/结束,其中的多行内容都会被认为是注释内容,在仿真或综合的时候被忽略掉。为增强可读性和兼容性,注释部分最好用英文来写 ### 4. 管脚分配 管脚分配图如下: {{ :14led_onoff_pinout.jpg? 1000 |}} 8颗单色的LED和两颗的3色LED都被分配了管脚 ### 5. 功能验证 下载到小脚丫FPGA板子上,实际的效果验证 {{ :14led_onoff_result.jpg?800 |}} 将JED文件下载到FPGA板子以后的效果