声明:案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。
该系列目录:
Verilog线性序列机点灯案例(一)
Verilog线性序列机点灯案例(二)
Verilog线性序列机点灯案例(三)
Verilog线性序列机点灯案例(四)
设计目标
使用8个拨码开关控制一个LED灯,每个拨码开关负责控制0.25秒的时间,开关为1时亮,开关为0时灭。
举例:
10101010就是亮0.25秒,灭0.25秒,如此循环
10111101就是亮0.25秒,灭0.25秒,亮1秒,灭0.25秒,亮0.25秒,如此循环
设计思路
counter0计数器每计数满0.25秒就向counter1计数器加1,
counter1计数器从0到7计数,
led灯根据当前counter1计数器的值,选中对应的拨码开关进行输出,用软件的写法就是
led = sw[counter1]
RTL及Testbench代码
RTL代码
module led_ctrl2(
clk,
rst_n,
led_out,
sw
);
input clk;
input rst_n;
input [7:0] sw;
output reg led_out;
parameter MCNT = 12500_000 - 1;
reg [26:0] counter0;
//第一个always块负责counter0
always@(posedge clk or negedge rst_n) begin