上篇文章提到频率为0.5s的led灯闪烁如何实现。今天讨论以下问题
1、当led亮灭时间不同时,如何实现?
示例:让led依次实现亮0.25s,灭0.5s,亮0.75s,灭1s。
module led_flash_variable(
clk,
reset,
led
);
input clk;
input reset;
output reg led;
reg [25:0]counter;
parameter NM=26'd49999999; /*一个循环时间为2.5s,据此及时钟周期计算计数器范围:(2.5s/时钟周期)-1,为计数范围(注意单位统一)*/
always@(posedge clk or negedge reset) begin
if(reset==0)begin
counter<=0;
led<=1;
end
else if(counter==NM-1)begin
led<=1;
counter<=0;
end
else if(counter==NM/10-1)begin /*也可以使用else if((counter==NM/10-1) || (counter==(NM/5)*3-1))将下面的counter==(NM/5)*3-1)合并表示*/
led<=0;
counter<=counter+1;
end
else if(counter==(NM/10)*3-1)begin /当计数到总计数范围的3/10时led<=1,对此可以画线段图参考更易懂直观,