这个fpga数码管动态显示程序错误吗?动态扫描不出来

2019-07-15 20:50发布

各位大哥帮我看看,始终动态扫描不来,只能显示第一个数码管
module seg7
(
        CLK_50M,RST_N,
        
        SEG_DATA,SEG_EN,LED
);


input                CLK_50M;
input                RST_N;
output reg[7:0]        SEG_DATA;
output reg[5:0]        SEG_EN;
output reg[3:0]    LED;


reg[32:0]        time_cnt;
reg[32:0]        time_cnt_n;
reg[2:0]                led_cnt;
reg[2:0]                led_cnt_n;


parameter        SET_TIME_10MS = 20'd50_000_0;


always@(posedge CLK_50M or negedge RST_N)
begin
        if(!RST_N)
                time_cnt <= 32'h0;
        else
                time_cnt <= time_cnt_n;
end


always@(*)
begin
        if(time_cnt == SET_TIME_10MS)
                time_cnt_n = 32'h0;
        else
                time_cnt_n = time_cnt + 32'h1;
end


always@(posedge CLK_50M or negedge RST_N)
begin
        if(!RST_N)
                led_cnt <= 3'h0;
        else
                led_cnt <=led_cnt_n;
end


always@(*)
begin
        if(led_cnt == SET_TIME_10MS)
                led_cnt_n = led_cnt +  3'h1;
        else if(led_cnt == 3'h6)
                led_cnt_n = 3'd0;
        else
                led_cnt_n = led_cnt;
end


always@(*)
begin
        case(led_cnt)
                3'd0 : SEG_EN = 6'b111110;
                3'd1 : SEG_EN = 6'b111101;
                3'd2 : SEG_EN = 6'b111011;
                3'd3 : SEG_EN = 6'b110111;
                3'd4 : SEG_EN = 6'b101111;
                3'd5 : SEG_EN = 6'b011111;
                default : SEG_EN = 6'b111111;
        endcase
end


always@(*)
begin
        case(led_cnt)
                3'd0 : SEG_DATA = ~8'b1011_1111;
                3'd1 : SEG_DATA = ~8'b1000_0110;
                3'd2 : SEG_DATA = ~8'b1101_1011;
                3'd3 : SEG_DATA = ~8'b1100_1111;
                3'd4 : SEG_DATA = ~8'b1110_0110;
                3'd5 : SEG_DATA = ~8'b1110_1101;
                default : SEG_DATA = ~8'b1011_1111;
        endcase
end

endmodule
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。