原理,将二进制码转换为BCD码,对于8位二进制码,最大为255,需要个位、十位、百位三个BCD码。
移位加三的原理是用20位的寄存器,高12位置零,低八位为原二进制码。然后开始移位,移位8次,每次移位后判断个位、十位、百位是否大于等于5,如果大于等于5再移位那么就会大于10,就会溢出,因此需要加三后移位,(这样移位后相当于+6),即将满16进位变成了满10进位。
代码如下。
`timescale 1ns/1ps
module bin_bcd(Clk,Rst_n,data_bin,data_b,data_s,data_g);
input Clk,Rst_n;
input [7:0] data_bin;
//input s;
output reg [3:0] data_b,data_s,data_g;
reg [19:0] data_buff;
reg [3:0] cnt ;
always@(posedge Clk,negedge Rst_n ) begin
if(~Rst_n)
cnt <= 0;
else if (cnt ==4'd8)
cnt <= 0;
else
cnt <= cnt + 4'b1;
end
always@(posedge Clk,negedge Rst_n) begin
if(~Rst_n)
data_buff <= {12'd0,data_bin};
else if(~|cnt)
data_buff <= {12'd0,data_bin};
else begin
if(data_buff[11:8] >= 4'd5 )
data_buff[11:8] = data_buff[11:8] + 'd3 ;
if(data_buff[15