问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 7559 人浏览分享

开启左侧

【技术交流】自己做了一个流水灯程序请大家看看,帮我找找错

[复制链接]
7559 4
程序如下:module water_led(
        input clk_100M,
        output reg[7:0] led_o
    );

reg[26:0] div_1hz;
reg clk_1hz;
always @(posedge clk_100M)
begin
    if(div_1hz==50000000)
        begin
            div_1hz<=0;
            clk_1hz<=~clk_1hz;
        end
    else
        div_1hz<=div_1hz+1;
end

wire[7:0] led_en;
assign led_en=8'b1111_1111;
reg[2:0] cnt0;
always @(posedge clk_1hz)
begin
    cnt0<=cnt0+1;
end

always @(*)
begin
    if(led_en[cnt0]==1)
    led_o[cnt0]<=1'b0;
    else
    led_o[cnt0]<=1'b1;
end

endmodule

评论 4

gyf1157625317  新手上路  发表于 2016-6-20 12:35:01 | 显示全部楼层
我的思想是这样的:先产生一个1S时钟,再产生一个7进制计数器cnt0,再通过判断一个恒为11111111的八位二进制数的第cnt0位是否为1,若是则把输出led_o的第cnt0位赋值为0,否则赋值为1
gyf1157625317  新手上路  发表于 2016-6-20 12:36:07 | 显示全部楼层
这种思想之前我在xilinx的nexys3开发板上已得到验证,但这次却不不行了,求指教
uisrc  管理员  发表于 2016-6-20 13:40:14 | 显示全部楼层
wire[7:0] led_en;
assign led_en=8'b1111_1111;
reg[2:0] cnt0;
always @(posedge clk_1hz)
begin
    cnt0<=cnt0+1;
end

always @(*)
begin
    if(led_en[cnt0]==1)
    led_o[cnt0]<=1'b0;
    else
    led_o[cnt0]<=1'b1;
end
这部分代码有问题的,if(led_en[cnt0]==1) 始终有效,led_o 最后全部输出0 LED应该灭的
越努力越幸运!加油!
若寒丶  新手上路  发表于 2016-6-23 09:15:45 | 显示全部楼层
你应该让led_o[cnt0]这一位赋值的同时,让其它位的赋值和它相反,组合逻辑每一位的电平状态应该是确定了的,你这段代码只有一位的电平是确定的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版