OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4726|回复: 3

[其他] FPGA新起点开发板——静态数码管显示

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-5-3
在线时间
3 小时
发表于 2021-9-1 17:16:58 | 显示全部楼层 |阅读模式
FPGA新手小白(FPGA新起点开发板)实验任务是使用FPGA开发板上的6位数码管以静态方式依次显示000000、111111、222222至FFFFFF,结束后继续从000000开始计数,每0.5s变化一次。
写的这个程序运行后数码管是全亮,但全部都显示8,程序哪里出了问题呢?求大家指点。
//顶层模块
module top_seg_led_static(
    input               clk,
    input               rst_n,

    output  [5:0]    sel,
    output  [7:0]    seg_led      
);

wire flag;
//计时器模块
time_count u_time_count(
   .clk         (clk),
   .rst_n       (rst_n),

   .flag        (flag)

);

seg_led_static u_seg_led_static(
    .clk        (clk),
    .rst_n      (rst_n),

    .flag       (flag),
    .sel        (sel),
    .seg_led    (sel_led)
);

endmodule


module time_count(         
    input               clk,
    input               rst_n,

    output  reg[3:0]    flag

);

reg [24:0] cnt;

always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            begin
                cnt <= 25'b0;
            end
        else
            begin
                if(cnt < 25'd25000000)
                    cnt <= cnt + 1'b1;
                else
                    cnt <= 25'd0;
            end         
    end


always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            begin
                flag <= 4'h0;
            end
        else
            if(cnt == 25'd2500_0000)
                begin

                    if(flag == 4'hF)
                        flag <= 4'h0;
                    else
                        flag <= flag + 4'h1;
                end
            else
                begin
                    flag <= flag;
                end
    end

endmodule


//数码管静态显示模块
module seg_led_static(
    input               clk,
    input               rst_n,

    input   [3:0]       flag,
    output  reg[5:0]    sel,
    output  reg[7:0]    seg_led
);

always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            begin
                sel <= 6'b111111;
            end
        else
            begin
                    sel <= 6'b000000;
                    case (flag)
                         4'h0 :  seg_led <= 8'b1100_0000;
                         4'h1 :  seg_led <= 8'b1111_1001;
                         4'h2 :  seg_led <= 8'b1010_0100;
                         4'h3 :  seg_led <= 8'b1011_0000;
                         4'h4 :  seg_led <= 8'b1001_1001;
                         4'h5 :  seg_led <= 8'b1001_0010;
                         4'h6 :  seg_led <= 8'b1000_0010;
                         4'h7 :  seg_led <= 8'b1111_1000;
                         4'h8 :  seg_led <= 8'b1000_0000;
                         4'h9 :  seg_led <= 8'b1001_0000;
                         4'ha :  seg_led <= 8'b1000_1000;
                         4'hb :  seg_led <= 8'b1000_0011;
                         4'hc :  seg_led <= 8'b1100_0110;
                         4'hd :  seg_led <= 8'b1010_0001;
                         4'he :  seg_led <= 8'b1000_0110;
                         4'hf :  seg_led <= 8'b1000_1110;
                      default :  seg_led <= 8'b1100_0000;
                         endcase
            end
    end

endmodule



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-5-3
在线时间
3 小时
 楼主| 发表于 2021-9-1 17:18:41 | 显示全部楼层
注释//计时器模块位置标错了
回复 支持 反对

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2021-9-2 13:21:29 | 显示全部楼层
顶层模块的flag,位宽定义错了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-6-21
在线时间
1 小时
发表于 2021-9-2 17:33:43 | 显示全部楼层
仿真看波形吧,会调试还是很有必要的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 20:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表