代码下载
Binary转BCD转换器(设计顶层VHDL文件): binary_to_bcd.vhd (5.8 KB)
Binary转BCD数字转换器(必须包含在项目中): binary_to_bcd_digit.vhd (3.2 KB)
特点
- 二进制转二进制编码十进制(BCD)转换器组件的VHDL源代码
- 可配置二进制输入数字的位宽
- 可配置BCD输出数字的位数
介绍
本文详述了用VHDL编写的Binary转BCD转换器电路,适用于CPLD和FPGA。该组件通过并行接口从用户逻辑读取二进制数,并输出等效的BCD码。设计采用Quartus II 13.1.0版本实现。资源需求取决于具体实现方式。图1展示了集成到系统中的Binary转BCD转换器典型实例。此处提供了一个应用示例:使用该转换器实现多位数码管显示驱动。
图 1. 实现示例
操作原理
本转换器的核心原理是将数字从一个移位寄存器逐位(最高有效位优先)移入另一个寄存器。
假设您将数值从一个二进制寄存器逐位移入另一个二进制寄存器。每次移入一位时,寄存器当前值会翻倍并加上新移入的位。当所有位完成移入后,新寄存器中的数值即为原始数值。
本组件通过相同流程实现Binary到BCD的转换。它每次移入一位。每次移位时,寄存器当前值翻倍并加上新位。完整移入后,所得BCD码即对应原始二进制数。
由于每个4位BCD数字最大值为9,若翻倍后超过9则需进行调整。因此若当前数值大于4,则不能仅通过移位实现翻倍。此时需向更高位BCD寄存器移入1,并调整当前位寄存器为适当值。表1列出了预期转换结果。
表 1. Binary转BCD移位寄存器真值表
如真值表所示,若当前值为0-4,简单移位即可得到正确结果。若大于4,则需向高位进位,且寄存器的三个最高有效位需要额外逻辑电路。最低有效位始终接收从原数移入的下一位,表中以’X’表示。
图2展示了实现该逻辑的电路。右下角增加的触发器用于存储使能信号的前一状态,以便在首次启用转换时(ena 信号首先被置为有效状态:ena =‘1’ 且 prev_ena =‘0’)能清零寄存器。
图 2. 单数字Binary转BCD转换器逻辑
上述逻辑构成单数字Binary转BCD转换器,封装于binary_to_bcd_digit.vhd文件。高层文件binary_to_bcd.vhd为每个BCD输出数字实例化该转换器,并级联构成多数字转换器。该高层逻辑还锁存用户逻辑输入的初始二进制值,并将其存入移位寄存器。它控制单数字转换器的使能信号,并执行从二进制移位寄存器到转换器的指定次数移位。最终输出转换结果。图3演示该原理。
图 3. 多数字Binary转BCD转换器
设置二进制数位数与 BCD 数字数量
ENTITY中的泛型参数 bits 设置 binary 输入端口位宽,定义转换器接受的二进制数范围。
ENTITY中的泛型参数 digits 设置 bcd 输出端口位宽,定义转换器输出的BCD数范围。
参数位宽取决于具体应用场景。参数设置常见两种场景:(1)计算表示目标二进制范围所需的BCD位数,或(2)计算驱动目标BCD位数所需的二进制输入位宽。
根据二进制位数计算 BCD 位数
第一种情况下,用户已知二进制输入位数,需确定表示该范围所需的BCD位数。公式1定义了表示特定位数二进制所需的最大BCD位数。
![]()
结果始终向上取整(如14位需要0.301*14=4.214,取整为5位)。
根据 BCD 位数计算二进制位数
第二种情况下,用户已知需驱动的BCD位数,需确定表示这些数字所需的二进制输入位宽。表示特定数字位数所需的最大二进制位数由公式2定义。

结果总是向上取整(例如4位数需要3.322*4=13.288,取整为14位)。
二进制输入与 BCD 输出的位数不匹配
若为转换器设置的BCD数字位数超出表示二进制输入范围所需的数量,则最高有效位的BCD输出将始终显示"0000"。这种情况下输出结果始终正确,但会存在超出必要范围的冗余,造成逻辑资源浪费。
若指定的二进制输入位数超过BCD数字能表示的最大数值,则过大的二进制输入会导致输出溢出。输出的最高有效位将被截断。例如,当二进制范围设为4位且BCD范围设为1位时,输入"1100"(十进制12)将输出"0010"(十进制2)。
端口描述
表2描述了Binary转BCD转换器的端口配置。
表 2. 端口描述
执行转换
图4展示了一个转换示例。本例中二进制输入配置为10位,BCD输出配置为3位数字。binary 输入设置为"1110101000"(十进制936)。当ena 输入信号有效时,转换器锁存二进制值并启动转换,同时通过置位busy 信号指示工作状态。转换完成后,转换器将结果输出至 bcd 端口,本例为"100100110110"(十进制936)。busy 信号撤销表示结果就绪,转换器可接受新任务。
图 4. 转换时序图示例
转换速度
由bits 参数定义的二进制输入端口大小决定转换速度。每次转换耗时bits +2个系统时钟周期。
若用户逻辑保持ena 信号为高电平,转换器将在前次操作结束后立即启动新转换。连续转换的最大处理速率为bits +3个时钟周期,因组件需额外1个周期识别ena 信号。
复位
Binary转BCD转换器需保持reset_n 输入端口为高电平才能正常工作。该端口的低电平将异步复位组件。复位期间组件将busy 端口置高,表示转换器不可用。任何进行中的转换将被中止,同时 bcd 输出端口清零。一旦脱离复位状态,当Binary转BCD转换器准备就绪可重新工作时, busy 端口将解除断言。
结论
该Binary转BCD转换器是一个可编程逻辑组件,用于将二进制数转换为对应的BCD码。二进制输入数值的范围和BCD输出值的范围均可配置。
相关主题
多位数7段数码管驱动电路(VHDL) - 该设计采用本文所述的Binary转BCD转换器来驱动多位7段数码管显示。





