在fpga上怎么写一个20个led灯闪烁的程序

在fpga上怎么写一个20个led灯闪烁的程序,第1张

module ceshi2(clk,rst,led)//记得改变模块名,跟你的工程名相同

input rst,clk

output [20:0]led

/蔽瞎/////////////////////基于verilog编写

reg[20:0]led

reg[25:0]i

always@(posedge clk or negedge rst)//50m的时钟,20ns的周期,要制造0.5s间隔

begin

if(!rst)

i<=25'd0

else if(i==25'念败d24999999) //0.5s间隔变换,记数25000000个周期

i<=25'd0

else

i<=i+1'b1

end

always@(posedge clk or negedge rst) //仔并颤控制灯的闪烁

begin

if(!rst)

led<=20'b1111_1111_1111_1111_1111

else if(i==25'd24999999)

led<=~led

else

led<=led

end

endmodule

这个一个很简单的用verilog实现的四个LED轮流闪的程序

实橘纤悔现竖团的原理是将输入的高圆正频时钟clk做2500000分频,分成肉眼能识别的频率,然后驱动四个LED灯依次闪灯。

代码输入输出好几个管脚都么有使用,建议去掉。有其他问题随时提问,欢迎采纳。

为什么led位宽为8, led_out及led_out1位宽是9,后来还是取的8位?

———这个应该是位宽定义上有点问题吧(估计led少定义了一位),不过不影响逻辑实现,顶多就是截取了led_out1的低八位作为输出(led=led_out1[7:0])。

led_out1=~led_out这句话什么意思啊?

——当满足buffer == 26'd25000000时,led_out取反。比如,在buffer != 26'd25000000时,led_out=9'b010101010;当buffer == 26'd25000000时,led_out = 9'b101010101.

为什么 led_out没有初始化就在移位?reg型未初始化默认值是什么呢?

——这个扰郑跟一般的单片机程序有所不同。FPGA内部如果没有初始化数值,默认为内三态x,在流水灯上表现为暗(相当于逻辑0),不影响使用。如果楼主不放心,可以再定义时给出初始化数值,比如reg [8:0] led_out = 9'd0.

总体来局纯说这个程序比较简单缓腊颂。希望对楼主有帮助。

建议:时序逻辑内部用非阻塞赋值<=。


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

原文地址:https://54852.com/yw/12307317.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存