点亮多颗LED
正如上所述,我们小脚丫FPGA板上有8颗LED和2颗3色LED,总计8+6=14颗,我们通过逻辑让某些灯亮,某些灯灭,看看代码如何写,实际的效果如何? 比如:
- 8颗LED灯中的1、2、5、6、8亮
- 第一个RGB灯中的绿色灯亮
- 第二个RGB灯中的蓝色灯亮
- 其它灯都关掉
1. 知识点
再上一个案例的基础上,进一步体会Verilog代码的语法结构 - 向量及注释。
2. 原理图
在这个示例中用到了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)
- 一个好的代码,要对一些重要的信息给出“注释”说明,单行注释可以用的方式, 后面的部分为注释内容。多行注释(又被称为块注释)以两个字符/* 开始,并以*/结束,其中的多行内容都会被认为是注释内容,在仿真或综合的时候被忽略掉。为增强可读性和兼容性,注释部分最好用英文来写