[X]关闭

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

文档创建者:gyf1157625317
浏览次数:5041
最后更新:2016-06-23
程序如下: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]这一位赋值的同时,让其它位的赋值和它相反,组合逻辑每一位的电平状态应该是确定了的,你这段代码只有一位的电平是确定的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则