二进制转BCD码

   应用:

    用fpga实现对数码管显示,以前通常的方法是进行整除和取余进行运算,但是fpga并不擅长乘法除法运算,所以可以用BCD码来转换。

    BCD码:通俗的可以理解为用四位二进制数表示一位十进制数字。例如,256就可以用bcd码表示为:0010_1001_0110

    因此在数码管显示中,也就是把256各位分出来,就可以用bcd码来表示,下面说一种二进制转换bcd码的方法。

    加3移位法:

    bcd码中只有0~9十进制数,但是在四位二进制中是16进制进1,因此在移位过程中要对二进制进行判断,当在移位之后的状态Qn+1大于9,要对Qn加6才可以。例如1000移位大于9加6为0001_0110,对应bcd码中的16。

     我们也可以在移位之前进行判断,如果移位之前的Qn数据大于4,说明Qn+1会溢出,所以可以+3再进行移位,例如1000大于4,加3为1011然后再进行移位0001_0110,16和刚才结果是一样的。

    简单的说,判断的目的是防止下一次移位,发生数据溢出的情况

    思路:  

    代码可以总结为三个部分:移位,加二进制数,判断(最后一次不需要判断)

    例如15  ---  1111

            (1)移位    0000_0000         加    0000_0001        判断    0000_0001

            (2)移位    0000_0010         加    0000_0011        判断    0000_0011

            (3)移位    0000_0110         加    0000_0111        判断    0000_1010         

            (4)移位    0001_0100         加    0001_0101    

 

/*********************************
 功能:实现对6位十进制数以内的bcd码转换
 time: 2017/4/29
 vision:1.0
*********************************/

`define        data_in_num        19
`define        data_bcd_num    23
module        pro_bcd(
            clk,
            rst_n,
            data_in,
            data_bcd
);
input                            clk;
input                            rst_n;
input        [`data_in_num :0]    data_in;
output        [`data_bcd_num:0]    data_bcd;        


reg            [`data_bcd_num:0]        data_bcd_r;
reg            [1:0]                state;
reg            [5:0]                shift_cnt;    
always @(posedge clk or negedge rst_n)
    if(!rst_n)begin    
        data_bcd_r <= 0;
        state <= 0;
        shift_cnt <= 0;
    end
    else
        case(state)
            2'd0:begin
                shift_cnt <= 0;
                data_bcd_r <= 0;
                state <= state + 1;
            end
            2'd1:begin //移位
                if(shift_cnt < `data_in_num + 1)begin
                    data_bcd_r <= data_bcd_r<<1;
                    shift_cnt <= shift_cnt + 1;
                    state <= state + 1;
                end
                else
                    state <= 0;
                end
            2'd2:begin //相加
                data_bcd_r <= data_bcd_r + data_in[`data_in_num + 1 - shift_cnt];
                state <= state + 1;
            end
            2'd3:begin //判断
                if(data_bcd_r[3:0] > 4 ) //1
                    data_bcd_r <= data_bcd_r + 3;
                if(data_bcd_r[7:4]>4)    //2
                    data_bcd_r[7:4] <= data_bcd_r[7:4] + 3;
                if(data_bcd_r[11:8]>4)   //3
                    data_bcd_r[11:8] <= data_bcd_r[11:8] + 3;
                if(data_bcd_r[15:12]>4)  //4
                    data_bcd_r[15:12] <= data_bcd_r[15:12] + 3;
                if(data_bcd_r[19:16]>4)  //5
                    data_bcd_r[19:16] <= data_bcd_r[19:16] + 3;
                if(data_bcd_r[`data_bcd_num:20]>4)  //6
                    data_bcd_r[`data_bcd_num:20] <= data_bcd_r[`data_bcd_num:20] + 3;
                state <= 1;
            end
            
            default:state <= 0;
        endcase


assign        data_bcd = (state == 3)&&(shift_cnt == `data_in_num + 1) ? data_bcd_r : data_bcd;


endmodule

 

转载于:https://www.cnblogs.com/bixiaopengblog/p/6785845.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 二进制BCD码电路是一种常用的数字电路,用于将二进制换为BCD码二进制编码的十进制数)。 在Multisim中创建二进制BCD码电路,我们可以使用逻辑门和触发器来实现。以下是一个简单的二进制BCD码的电路设计。 首先,创建一个4位二进制输入(A0,A1,A2,A3)和一个4位BCD码输出(B0,B1,B2,B3),以及一个时钟输入(CLK)。 然后,使用4个2输入AND门和4个2输入OR门来实现逻辑功能。将输入A0至A3与逻辑门的输入相连,再通过一系列的逻辑门连接和配置,将二进制换为BCD码。 接下来,使用4个触发器来存储换后的BCD码。将逻辑门的输出连接到触发器的输入,并使用时钟输入触发触发器,使其在每个时钟脉冲周期中更新输出。 最后,将触发器的输出连接到BCD码输出端口B0至B3。 完成这个电路设计后,运行Multisim并进行仿真。输入一个二进制数,然后观察BCD码输出是否正确。如果输出与预期一致,说明二进制BCD码电路设计成功。 需要注意的是,这只是一个简单的二进制BCD码电路设计示例。在实际应用中,可能需要更复杂的设计来处理更多位的二进制换。 ### 回答2: 二进制BCD码电路是将二进制换为二进制编码的十进制数的电路。以下是使用Multisim软件创建和模拟二进制BCD码电路的步骤: 1. 打开Multisim软件,并选择一个适当的电路板以及所需的组件,如逻辑门、多路复用器和显示模块。 2. 在电路板上放置所需的组件并连接它们。在这个电路中,你需要使用多个逻辑门来实现二进制BCD码换。常用的逻辑门有与门、或门和非门。你还可以使用多路复用器来选择要显示的结果。 3. 连接并设置逻辑门。在这个电路中,你需要将二进制数的各位连接到逻辑门的输入端,然后使用逻辑门来处理和二进制数。 4. 连接显示模块。将换后的BCD码连接到显示模块,以便将结果显示出来。 5. 进行仿真。在Multisim中,你可以运行仿真来测试和验证你的电路设计。通过输入不同的二进制数并观察显示模块的输出来确保电路的正确性。 在设计电路时,还需要考虑到源电压和输入输出的电平兼容性,以及逻辑门的延迟和反相特性等因素。通过合理选择器件和连接方式,可以实现二进制BCD码换。通过Multisim软件的仿真功能,可以验证电路设计的正确性和性能。 这是一个基本的二进制BCD码电路设计过程的简要描述。在实际设计中,可能还需要进行进一步的优化和完善,以满足具体的应用需求。 ### 回答3: 二进制BCD码是一种常见的数字编码方式,其中BCD代表二进制编码十进制。在电路设计中,我们可以使用最简单和常见的方法来实现二进制BCD码的电路原理,即使用倒数计数器和BCD编码器。 首先,将一个4位的二进制数输入到倒数计数器中。倒数计数器是一种特殊的计数器,它会从输入数开始计数,并在每次计数完成后减1,直到计数器为0。 然后,将倒数计数器的输出连接到BCD编码器的输入。BCD编码器是一种数字电路,将4位二进制换为相应的BCD码。它的输出由4个BCD码位组成,每个BCD码位表示一个十进制数位。 最后,将BCD编码器的输出连接到显示器或其他输出设备,以显示二进制数对应的BCD码。 在Multisim中,我们可以使用组合逻辑电路来实现二进制BCD码的电路。首先,选择适当的倒数计数器和BCD编码器的芯片模型,并连接它们的输入和输出。然后,将二进制数输入连接到倒数计数器的输入端,并将BCD编码器的输出连接到显示器或其他输出设备。 通过正确连接和配置这些元件,我们可以实现一个完整的二进制BCD码的电路。在Multisim中,我们可以模拟和调试这个电路,以确保它能够正常工作,并将二进制换为BCD码。 总之,通过使用倒数计数器和BCD编码器,我们可以设计一个简单的电路来实现二进制BCD码。在Multisim中,我们可以使用适当的芯片模型和连接来实现这个电路,并通过模拟和调试来验证它的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值