本文主要是介绍02.2 基于Verilog控制LED以不同频率闪烁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
02_led_blink_v2
本段代码是为Verilog初学者提供的一个名为led_blink简单实例Verilog模块,其功能是控制6个LED灯同步闪烁,每秒钟闪烁一次。
与02_led_blink_v1版本相比新增内容:
-
增加一组dip控制引脚,用于控制LED闪烁的速度;
-
使用模块级parameter关键词定义一些常量,模块级参数可以在例化模块的时候给出具体值,参数化模块使得代码更具灵活,提高可复用性
-
在模块接口的output接口使用reg型变量,因此代码中不再需要
assign led = led_q
这样的代码,代码更简洁。 -
使用唯一的三目运算符( ? :)处理组合逻辑的多路分支。
知识点:
- 参数化模块 #(parameter)
- 三目运算符(?:)的用法
module led_blink #(parameter ONE_MSECOND = 50*1000, //clock periods of one millsecondparameter ALL_LED_ON = 6'b000000 //led active low
)(input clk, input rst_n,input wire [5:0] dip_u5,output reg [5:0] led
);localparam ALL_LED_OFF = ~ALL_LED_ON; reg [31:0] count; wire [1:0] speed = dip_u5[5:4];
wire [31:0] count_max = (speed == 2'b00) ? ONE_MSECOND*1000 :(speed == 2'b01) ? ONE_MSECOND*500 :(speed == 2'b10) ? ONE_MSECOND*250 : ONE_MSECOND*125;always @(posedge clk) beginif(~rst_n) count <= 0;else if(count == count_max-1) count <= 0;else count <= count + 1;
endalways @(posedge clk) beginif(~rst_n) led <= ALL_LED_ON;else if(count == count_max-1) beginif(led == ALL_LED_ON) led <= ALL_LED_OFF;else led <= ALL_LED_ON;end//else led <= led;
endendmodule
这篇关于02.2 基于Verilog控制LED以不同频率闪烁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!