微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 跑马灯代码问题

跑马灯代码问题

时间:10-02 整理:3721RD 点击:
module LED(clk,reset_n,led);
input clk;
input reset_n;
output[3:0] led;
reg[23:0] cnt;
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
cnt <= 24'b0;
else
cnt <= cnt + 1'b1;
end
reg enable_r;
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
enable_r <= 1'b0;
else if (cnt == 24'hffffff)
enable_r <= 1'b1;
else
enable_r <= 1'b0;
end
wire enable;
assign enable = enable_r;
reg[3:0] led_r;
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
led_r <= 4'b0000;
else
begin
led_r <= 4'b0001;
if(enable)         
led_r <= {led_r[0],led_r[3:1]};
end
end
wire[3:0] led;
assign led = led_r;
endmodule
想实现复位时全灭,不复位时流水灯为什么最后
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
led_r <= 4'b0000;
else
begin
led_r <= 4'b0001;
if(enable)         
led_r <= {led_r[0],led_r[3:1]};
end
end

这么写实现复位,但是不复位时只有led_r[0]亮?应该怎么实现

想问什么呢?不是很明白!

呵呵
always @(posedge clk or negedge reset_n)
begin
if(!reset_n)
led_r <= 4'b0000;
else
case(cnt[23:22])
2'b00:led_r <= 4'b0001;
2'b01:led_r <= 4'b0010;
2'b10:led_r <= 4'b0100;
2'b11:led_r <= 4'b1000;
default:led_r <= 4'b0000;
endcase
end

你的写法 2的24次方的周期里只有一次是移位操作,但是其他周期全部都在执行led_r <= 4'b0001;你说你看到的是不是只led_r[0]亮;如果你的眼分辨率够快,应该能看见LED[1]亮一下 哈哈

是LED[3]亮一下

呵呵!你想这样吧!
always @(posedge clk or negedge reset_n)
begin
    if(!reset_n)
    begin
        led_r <= 4'b0000;
        first <= 1'b1;
    end
    else if(enable)
    begin
        if(first)
        begin
            led_r <= 4'b0001;
            first <= 1'b0;
        end
        else
            led_r <= {led_r[0],led_r[3:1]};
    end
end

就是想实现这个功能,谢谢指导,多谢啦


就是想实现这个功能,谢谢指导


就是想实现这个功能,谢谢指导,多谢啦



   这么做应该不是每个2的24次方实现一次一位操作吧


是的,多谢啦

你可以计数器再多加2位嘛。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top