Verilog程序 流水灯
求助诸位大神,本人写了一个流水灯程序,目的是led0以一定频率闪烁,led1闪烁频率为led0的十分之一,经过时序仿真,发现程序基本没问题。但是输出的波形中,led0和l...
求助诸位大神,本人写了一个流水灯程序,目的是led0以一定频率闪烁,led1闪烁频率为led0的十分之一,经过时序仿真,发现程序基本没问题。但是输出的波形中,led0和led1的高电平时间过短,导致led灯无法观察到闪烁现象,我应该如何修改程序,从而延长高电平的时间呢?
展开
1个回答
展开全部
看你这代码真的很蛋疼,我给你写一个:
module led(clk,rst,led0,led1)
input clk,rst; output led0,led1;
reg [31:0 ]cnt_led0;
reg [31:0 ]cnt_led1;
reg led0,led1;
begin
if(rst) begin cnt<=0; led0<=0; led1<=0; end
else
begin
cnt_led0<=cnt_led0+1;
cnt_led1<=cnt_led1+1;
if(cnt_led0==99) begin led0<=~led0;cnt_led0<=0; end
if(cnt_led1==999) begin led1<=~led1;cnt_led1<=0; end
end
end
以上代码应该可以实现led1闪烁是led0频率的十分之一,只需调整一下CLK的频率即可实现人眼可分辨的频闪,led1是CLK频率的2000分频,led0是CLK的200分频
module led(clk,rst,led0,led1)
input clk,rst; output led0,led1;
reg [31:0 ]cnt_led0;
reg [31:0 ]cnt_led1;
reg led0,led1;
begin
if(rst) begin cnt<=0; led0<=0; led1<=0; end
else
begin
cnt_led0<=cnt_led0+1;
cnt_led1<=cnt_led1+1;
if(cnt_led0==99) begin led0<=~led0;cnt_led0<=0; end
if(cnt_led1==999) begin led1<=~led1;cnt_led1<=0; end
end
end
以上代码应该可以实现led1闪烁是led0频率的十分之一,只需调整一下CLK的频率即可实现人眼可分辨的频闪,led1是CLK频率的2000分频,led0是CLK的200分频
追问
大神你好,我才接触这方面,写的代码您见笑了...不过,有什么方法可以实现一个语句的持续延时么?比如“led0=1”我想让它保持10个clk 如何办到?
追答
别叫大神,我也才接触FPGA开发1年时间,保持10个CLK,就是增加10个触发器(如果你学过数电),每一个CLK到来,把前级触发器给后级,这样的话10个clk以后,输入就到输出的位置上了;写代码的话 就是定义一个累加的变量,每个clk累加一次 比如 累加值到10的时候你点亮 累加到20的时候熄灭 是不是就保持了10个CLK?很简单吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询