- 编程思路:
- 系统时钟50Mhz 计算闪烁间隔 直接T*F=N
- 计数小于N时钟触发一次N加1
- 当计数满时,LED移位,N请零
- 复位信号为低时系统复位,N清零和LED复位
/*
本实验实现的4个LED 顺序点亮并熄灭 时间0.2s变化一次
*/
module flow_led
(
input sys_clk, //系统时钟 50MHZ晶振
input sys_rst_n, //系统复位信号
output reg[3:0] led //led输出信号
);
//1/50Mhz=20ns n=0.2s/20ns=10^7 1000_0000需要2进制24位才可进行存储
reg [23:0] time_num;
always @(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) //复位信号低电平复位
time_num<=24'd0;
else if(time_num<24'd1000_0000) //小于计数值时 +1
time_num<=time_num+1'b1;
else //等于或者大于计数值时对寄存器清零,重新进行计数
time_num<=24'd0;
end
//通过移位寄存器控制电平高低转换
always @(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
led[3:0]<=4'b0010;
else if(time_num==24'd1000_0000)
led[3:0]<={led[2:0],led[3]};
else
led<=led;
end
endmodule
我的LED坏了三个 流水不明显 只有一个灯是间隔闪烁的,但时间间隔对应。
- 解决的问题:usb blaster 驱动无法识别问题 基于win10的驱动安装见该解决方案 https://blog.csdn.net/chengbozhe/article/details/47335391
- 需要先下载对应的驱动安装包
- 之后 按照帖子操作
- 之后再进行驱动的强制安装即可
代码书写时注意中英文符号的书写 !