Verilog 编写的LED 程序,求高手详细解释一下,我是新手
答案:2 悬赏:30
解决时间 2021-01-26 13:17
- 提问者网友:回忆在搜索
- 2021-01-26 03:15
Verilog 编写的LED 程序,求高手详细解释一下,我是新手
最佳答案
- 二级知识专家网友:患得患失的劫
- 2021-01-26 03:57
module Led(led,clk);//实现4个灯循环
input clk;
output [3:0] led;
reg[3:0]led_out;
reg[25:0]buffer;
always@(posedge clk)
begin
buffer<=buffer+1'b1; //buffer作为一个计数器,每一个时钟沿就+1
if(buffer==26'd25000000) //计数器buffer计数到25000000时 (一般这个数字是用来控制计数时间的,在这里就是灯亮的时间)
//对led进行操作
//由于没有对buffer进行复位操作,这里这个数字没什么意义 时间是恒定的
//想要使这个数字有意义 加入复位的操作
begin
//buffer <= 26'b0;
led_out=led_out<<1;//应该是4个灯吧,每次计数到25000000时就进行移位操作。
//如果上次是第一个灯=1,则向左移1位则第2个灯=1,末位补0
if(led_out==4'b0000) //如果移位了4次,就变为全0了 这时需要赋值为4'b0001
led_out=8'b0001;//笔误吧?怎么8'b0001了?
end
end
assign led=led_out;
endmodule
input clk;
output [3:0] led;
reg[3:0]led_out;
reg[25:0]buffer;
always@(posedge clk)
begin
buffer<=buffer+1'b1; //buffer作为一个计数器,每一个时钟沿就+1
if(buffer==26'd25000000) //计数器buffer计数到25000000时 (一般这个数字是用来控制计数时间的,在这里就是灯亮的时间)
//对led进行操作
//由于没有对buffer进行复位操作,这里这个数字没什么意义 时间是恒定的
//想要使这个数字有意义 加入复位的操作
begin
//buffer <= 26'b0;
led_out=led_out<<1;//应该是4个灯吧,每次计数到25000000时就进行移位操作。
//如果上次是第一个灯=1,则向左移1位则第2个灯=1,末位补0
if(led_out==4'b0000) //如果移位了4次,就变为全0了 这时需要赋值为4'b0001
led_out=8'b0001;//笔误吧?怎么8'b0001了?
end
end
assign led=led_out;
endmodule
全部回答
- 1楼网友:爱难随人意
- 2021-01-26 04:59
buffer<=buffer+1'b1;这是一个阻塞式语句 一般用于时序逻辑中有一个时钟的延时
该句等效于C语言的 buffer++;
该句等效于C语言的 buffer++;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯