Binary转BCD转换器(VHDL)

逻辑主页

代码下载

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位数。

05_00

结果始终向上取整(如14位需要0.301*14=4.214,取整为5位)。

根据 BCD 位数计算二进制位数

第二种情况下,用户已知需驱动的BCD位数,需确定表示这些数字所需的二进制输入位宽。表示特定数字位数所需的最大二进制位数由公式2定义。

06_00

结果总是向上取整(例如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段数码管显示。

没有学过VHDL,不知道难不难?看起来像FPGA