从真值表到仿真:7段数码管的BCD译码器设计
BCD译码器将4位二进制编码十进制(0–9)输入转换为7段数码管的控制信号。每个段(a–g)由输入x3(最高位)、x2、x1和x0(最低位)的逻辑函数控制。对于数字10–15(1010–1111),所有段均关闭。
真值表定义了各段的状态:
| 数字 | x3 | x2 | x1 | x0 | a | b | c | d | e | f | g |
|------|----|----|----|----|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
逻辑函数综合方法
对每个段,合成布尔函数。方法的选择取决于1或0在输出中占主导地位:
- SOP(积之和,基于1):使用输出为1的最小项的合取,通过析取连接。当超过50%的输出为1时效果最佳。
- POS(和之积,基于0):使用输出为0的最大项的析取,通过合取连接。当超过50%的输出为0时效果最佳。
以段A为例(2个0:1, 4)——采用POS:
- 第0001行:
(x3 ∨ x2 ∨ x1 ∨ ¬x0) - 第0100行:
(x3 ∨ ¬x2 ∨ x1 ∨ x0) - A =
(x3 ∨ x2 ∨ x1 ∨ ¬x0) ∧ (x3 ∨ ¬x2 ∨ x1 ∨ x0)
以段E为例(4个1)——采用SOP:
- 0000:
¬x3 ∧ ¬x2 ∧ ¬x1 ∧ ¬x0 - 0010:
¬x3 ∧ ¬x2 ∧ x1 ∧ ¬x0 - 0110:
¬x3 ∧ x2 ∧ x1 ∧ ¬x0 - 1000:
x3 ∧ ¬x2 ∧ ¬x1 ∧ ¬x0 - E = 通过∨合并。
表达式化简
使用卡诺图或在线计算器进行简化。最终化简后的表达式(积之和形式):
- a:
((¬x0 ∧ ¬x2) ∨ x3 ∨ x1 ∨ (x0 ∧ x2)) - b:
((¬x0 ∧ ¬x1) ∨ ¬x2 ∨ x3 ∨ (x0 ∧ x1)) - c:
x3 ∨ x2 ∨ ¬x1 ∨ x0 - d:
((¬x0 ∧ ¬x2) ∨ x3 ∨ (¬x0 ∧ x1) ∨ (x0 ∧ ¬x1 ∧ x2) ∨ (x1 ∧ ¬x2)) - e:
((¬x0 ∧ ¬x1 ∧ ¬x2) ∨ (¬x0 ∧ x1 ∧ ¬x3)) - f:
((¬x0 ∧ ¬x1) ∨ x3 ∨ (¬x0 ∧ x2) ∨ (¬x1 ∧ x2)) - g:
((¬x0 ∧ ¬x1 ∧ ¬x2) ∨ (¬x0 ∧ x1 ∧ ¬x2) ∨ (x0 ∧ x1 ∧ ¬x2) ∨ (x3 ∧ ¬x2 ∧ ¬x1))
这些表达式通过与门、或门和非门实现。
在Digital Deeds中的分层实现
Digital Deeds支持分层模块(.cbe表示模块,.pbs表示原理图)。
步骤1:段模块
- 创建新模块:4个输入(x3–x0),1个输出。
- 重命名引脚:双击修改。
- 按公式连接导线(Ctrl+W),例如段A。
步骤2:主电路
- 新建电路。
- 导入自定义组件(7个模块)。
- 将x0–x3并联输入至所有模块。
- 输出连接至7段数码管。
测试:循环0000–1001可正确显示数字。模拟器生成时序图用于调试。
核心要点
- 根据真值表中1或0的密度选择SOP或POS。
- 化简可减少元件数量:卡诺图对4变量最优化。
- 分层模块便于扩展至FPGA/ASIC设计。
- BCD译码器是计数器、定时器和数字显示的基础。
- 仿真测试可在实物原型前发现错误。
— Editorial Team
暂无评论。