流水灯
功能描述:
10个led灯 从第一个和最后一个led灯开始从两边向中间闪烁,闪烁频率为0.5s一次
项目实现
首先定义一个计时器 计数器的名字为count1,如果复位或者count1==2.5s时复位,否则count1加1,开发板晶振50M 当计数达到TIME=2.5s/(1/50M)-1=124_999_999
次数的时候,即为2.5s
具体代码为:always@(posedge CLK or negedge RSTn)
if(!RSTn)
Count1<=28'd0;
else if(Count1==TIME)
Count1<=28'd0;
else
Count1<=Count1+1'b1;
由流水灯的方式 在2.5s的周期内,有5对led的闪烁方式是一样,所以可以采用并行操作的方式,把TIME分为5部分,让10只led灯只在特定的时间段下亮灭
部分代码如下
reg [1:0] rLED_Out;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
rLED_Out<=2'b0;
else if(Count1>28'd0&&Count1<28'd25_000_000)
rLED_Out<=2'b11;
else
rLED_Out<=2'b0;
assign LED_Out=rLED_Out;
顶层模块为
module top
(
CLK,RSTn,LED_Out
);
input CLK;
input RSTn;
output [9:0] LED_Out;
wire[1:0] LED_Out1;//连线作用
module1 U1
(
.CLK(CLK),
.RSTn(RSTn),
.LED_Out(LED_Out1)LED_Out1把模块里面的led和led[9:0]链接起来
);
assign LED_Out={LED_Out1,LED_Out2....}
错误总结
在五分之一个周期的时候写Count1的范围需要对限定左边的极限
模块声明里面逗号,外部加分号
LED_Out1所在9:0里面的位置取决于在大括号里面的位置