input clk
input[1:0]s
output[7:0]led
reg [7:0] led=0
reg [1:0] olds=0
always@(posedge clk) olds<=s
always@(posedge clk)
if (olds^s)
case (s)
2'b00: led<=1 //*a
2'弊悄b01: led<=1
2'b10: led<=8'b1010_1010
2'b11: led<=8'b0000_0111
endcase
else
case (s)
2'b00: led<={led[6:0],led[7]}//*b
2'b01: led<={led[0], led[7:1]}
2'租雹渣b10: led<=~led
2'b11: led<={led[6:0],led[7]}
endcase
endmodule
//第一种肆樱:一个灯亮,从右往左逐个移动,并循环
//第二种:一个灯亮,从左往右逐个移动,并循环
//第三种:一个间一个灯亮,并交替循环
//第四种:三个灯亮,从右往左逐个移动,并循环
//当然可以再多一些花样:
//如:灯从右往左逐步点亮
// *a改为: led<=1
// *b改为: led<= (&led)? 1: {led[6:0],1'b1}
module filter_led( input Clk ,input Reset,
output reg LED
)
reg [24:0]cnt_led///25M分频衫桐巧25bit;[27:0]cnt_led
always @( posedge Clk or negedge Reset )
begin
if ( !Reset )
begin
cnt_led <= 0
LED <= 0
end
else
begin
if ( cnt_led >或键= 25'h0ffffff)
LED <轮李= 1
else
LED <= 0
if ( cnt_led == 25'h1ffffff )
cnt_led <= 0
else
cnt_led <= cnt_led + 25'b1
end
end
endmodule
这个绝对可以,验证过的
周期=1/20秒时钟晶振脊知选用50mhz的话,0.05秒就需要clk跑5*0.01*50*10^6= 2 500 000
module led
input clk,rst
output ledcon
reg [3:0] led//led开关锁存位
reg d1,d2,d3,d4//四个灯开关
reg [21:0] cnt_5 //0.05秒计数器
reg count// 数满标志位
always @(posedge clk or negedge rst)
if (!rst)
cnt_5<=22'd0
else if(cnt_5==22'd2500000)
cnt_5<=22'd0 //数满归零
else cnt_5<=cnt_5+1'b1
always @(posedge clk or negedge rst))
if(!rst)
count<=1'b0
else if (cnt_5==22'd2500000)
count<=1'b1
我擦。。剩中兄下我不写了。你查查网上资料吧。
就是每数满时间就依次轮换打开d1--d4开关并且关闭前一个。樱培消
ledcon用连续赋值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)