verilog二进制转BCD码(加三移位法)

//数码管显示四位数字  max=8191
module smg4(
        clk,rst_n,shuzi,      //input
        qian,bai,shi,ge       //output
);
input clk;
input rst_n;
input [12:0] shuzi;
output [6:0] qian,bai,shi,ge;

reg [3:0] q,b,s,g;

// 加三移位法 13位的二进制 只需要16位来存其十进制数字 一共29位 28:0
reg [3:0] count;
reg [28:0] temp;
//---------------- 计数部分 -----------------
always@(posedge clk or negedge rst_n )
begin
 if(!rst_n ) 
   count<=0;
 else if(count==14)
   begin
    count<=0;
    q<=temp[28:25];
    b<=temp[24:21];
    s<=temp[20:17];
    g<=temp[16:13];
   end
 else
   count<=count+1;
end
//------------------加三移位法---------------
always@(posedge clk,negedge rst_n)
begin
    if(!rst_n) temp=0;
    else if(count==4'b0) temp={16'b0,shuzi};
    else if(count<=13)
        begin
           if(temp[24:21]>4) temp[24:21]=temp[24:21]+3;
           if(temp[20:17]>4) temp[20:17]=temp[20:17]+3;
           if(temp[16:13]>4) temp[16:13]=temp[16:13]+3;
           temp=temp<<1;
        end
end
//------------------七段译码--------------------
assign qian=qiduan(q);
assign bai=qiduan(b);
assign shi=qiduan(s);
assign ge=qiduan(g);

function [6:0] qiduan;
input [3:0] s;
qiduan=(s==0)?7'b1000000:
       (s==1)?7'b1111001:
       (s==2)?7'b0100100:
	   (s==3)?7'b0110000:
	   (s==4)?7'b0011001:
	   (s==5)?7'b0010010:
	   (s==6)?7'b0000010:
	   (s==7)?7'b1111000:
	   (s==8)?7'b0000000:
	   7'b0010000;
endfunction

endmodule 

 

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米粥哥哥

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值