verilog 控制四种流水灯 fpga

verilog 控制四种流水灯 fpga,第1张

module ledwater(clk,led,s)

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用连续赋值


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12516258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存