搜索
bottom↓
回复: 5

FPGA数码管module,请大家点评

[复制链接]

出0入0汤圆

发表于 2016-11-2 10:23:59 | 显示全部楼层 |阅读模式
初学FPGA,自己试着写了一个module,没人教也不知道是不是有错误,或者代码习惯不好的地方,请各位指教:



/*************************************************
                2016-11-01 Boen@电航学社 大连海事大学
文件名:degital_led.v
功能:数码管驱动模块(4位)
输入参数:input[15:0] data;        //4为16进制显示数据,BCD码
          input[1:0] dec;        //小数点位置,0为最低位
输出参数:output reg[7:0]seg_db;数码管段选
          output reg[3:0]seg_cs;数码管位选
备注:
        数码管为共阳,片选0有效(加了反向器)
        seg_cs <= 4'b0001;        最低位为最右端数码管的片选                       
*************************************************/
module digital_led
        (clk,rst_n,data,dec,seg_db,seg_cs);

input clk,rst_n;
input[15:0] data;        //4为16进制显示数据,BCD码
input[1:0] dec;        //小数点位置,0为最低位
output reg[7:0]seg_db;
output reg[3:0]seg_cs;

parameter SEG_NUM0 = 7'h3f,//c0, //前面是共阴的,后面是共阳的;第一位是小数点
                         SEG_NUM1 = 7'h06,//f9,
                         SEG_NUM2 = 7'h5b,//a4,
                         SEG_NUM3 = 7'h4f,//b0,
                         SEG_NUM4 = 7'h66,//99,
                         SEG_NUM5 = 7'h6d,//92,
                         SEG_NUM6 = 7'h7d,//82,
                         SEG_NUM7 = 7'h07,//f8,
                         SEG_NUM8 = 7'h7f,//80,
                         SEG_NUM9 = 7'h6f,//90,
                         SEG_NUMA = 7'h77,//88,
                         SEG_NUMB = 7'h7c,//83,
                         SEG_NUMC = 7'h39,//c6,
                         SEG_NUMD = 7'h5e,//5e,
                         SEG_NUME = 7'h79,//86,
                         SEG_NUMF = 7'h71;//8e;


/*/————————————————————仅测试用————————————————————//
reg[15:0] data;//待显示的数据,每四位对应一个数码管仅测试用
reg[1:0] dec; //小数点位数
always @(posedge clk or negedge rst_n ) begin
        if(!rst_n)
                begin data <= 16'h123f;        dec <= 2'd2; end//注意data内存的是BCD码
//        else if(count == 20'hfffff)
//                data <= data + 1'b1;
end
——————————————————————————————————————————————*/



/*-------------扫描频率计数器---------------*/
//19位计数器 系统时钟50M 扫描频率47.6HZ
reg[19:0] count;       
always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
                count <= 20'd0;
        else
                count <= count + 1'b1;       
end


/*-------------扫描,片选的同时赋值----------*/
reg[3:0] number;
always @(posedge clk or negedge rst_n ) begin
        if(!rst_n)
                number <= 4'd0;
        else        
                case(count[19:18])
                2'd0: begin number <= data[3:0]; seg_cs <= 4'b1110; end
                2'd1: begin number <= data[7:4]; seg_cs <= 4'b1101; end
                2'd2: begin number <= data[11:8]; seg_cs <= 4'b1011; end
                2'd3: begin number <= data[15:12]; seg_cs <= 4'b0111; end
                default:;
                endcase
end



/*------段赋值(低7位,第八位是小数点-------*/
//因为使用的是共阳的,所以段码要取反
always @(number)begin
        case(number)
        4'h0:seg_db[6:0] <= ~SEG_NUM0;
        4'h1:seg_db[6:0] <= ~SEG_NUM1;
        4'h2:seg_db[6:0] <= ~SEG_NUM2;
        4'h3:seg_db[6:0] <= ~SEG_NUM3;
        4'h4:seg_db[6:0] <= ~SEG_NUM4;
        4'h5:seg_db[6:0] <= ~SEG_NUM5;
        4'h6:seg_db[6:0] <= ~SEG_NUM6;
        4'h7:seg_db[6:0] <= ~SEG_NUM7;
        4'h8:seg_db[6:0] <= ~SEG_NUM8;
        4'h9:seg_db[6:0] <= ~SEG_NUM9;
        4'hA:seg_db[6:0] <= ~SEG_NUMA;
        4'hB:seg_db[6:0] <= ~SEG_NUMB;
        4'hC:seg_db[6:0] <= ~SEG_NUMC;
        4'hD:seg_db[6:0] <= ~SEG_NUMD;
        4'hE:seg_db[6:0] <= ~SEG_NUME;
        4'hF:seg_db[6:0] <= ~SEG_NUMF;
        default: ;
        endcase
end

/*------------小数点位置-----------------*/
always @(dec) begin
        case(dec)
        2'd0:seg_db[7] <= seg_cs[0];
        2'd1:seg_db[7] <= seg_cs[1];
        2'd2:seg_db[7] <= seg_cs[2];
        2'd3:seg_db[7] <= seg_cs[3];
        default: seg_db[7] <= 0;
        endcase
end



endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-11-4 12:41:09 | 显示全部楼层
弱弱问一下,是不是没有消影?

出0入0汤圆

发表于 2016-11-4 13:07:44 | 显示全部楼层
尽量同步    注意复位处理
(个人见解)

出0入0汤圆

发表于 2016-11-20 12:34:41 | 显示全部楼层
异步复位,同步释放

出0入0汤圆

 楼主| 发表于 2017-5-12 14:28:50 | 显示全部楼层
passage110 发表于 2016-11-4 13:07
尽量同步    注意复位处理
(个人见解)

谢谢

出0入0汤圆

发表于 2017-5-12 15:52:08 | 显示全部楼层
data没动,差评
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 07:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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