从真值表到电路实现:2片74LS148构建16线-4线编码器的实战指南

1次阅读
没有评论

共计 1706 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

优先编码器的应用场景

在数字系统中,优先编码器是一种非常实用的电路,主要用于将多个输入信号转换为二进制编码输出。它的典型应用包括:

从真值表到电路实现:2 片 74LS148 构建 16 线 - 4 线编码器的实战指南

  • 中断控制系统:当多个设备同时请求中断时,优先编码器可以快速确定优先级最高的中断源
  • 键盘扫描电路:识别当前被按下的键中优先级最高的一个
  • 总线仲裁:多个设备竞争总线控制权时确定优先级

单芯片方案 vs 级联方案

74LS148 是经典的 8 线 - 3 线优先编码器芯片。当需要处理更多输入时,我们有两种选择:

  1. 使用单芯片方案
  2. 优点:设计简单,延迟小
  3. 缺点:成本高,可选芯片少

  4. 使用级联方案

  5. 优点:成本低,利用常见芯片即可实现
  6. 缺点:设计复杂度略高,有级联延迟

对于 16 线输入的应用,使用 2 片 74LS148 级联是最经济实用的方案。

真值表推导

16 线 - 4 线编码器的真值表需要包含所有输入组合。由于是优先编码器,当多个输入有效时,只响应优先级最高的输入。以下是关键部分的真值表:

输入 15-8 输入 7 -0 输出 A3-A0
1xxxxxxx xxxxxxxx 1111 (无有效输入)
0xxxxxxx xxxxxxxx 1xxx (高 8 位优先)
11111111 0xxxxxxx 0xxx (低 8 位有效)

注意:x 表示无关位,实际输出由最高优先级有效输入决定。

电路连接示意图

          +-----+       +-----+
输入 15-8 ->| 148 |       | 148 |<- 输入 7 -0
          |  U1 |       |  U2 |
          +-----+       +-----+
            |             |
            | GS1          | GS2
            | _____        |
            |/     \       |
            | 逻辑门 |------+
            |_______|
              |
              v
           总 GS 输出 

关键连接说明:

  • U1 的 EI(使能端) 接地,始终有效
  • U2 的 EI 连接 U1 的 GS(组选择) 信号
  • 输出 A2-A0 来自两芯片的或逻辑
  • A3 由 U1 的 GS 信号直接提供

时序分析

级联设计中最需要注意的是 GS 信号的传播:

  1. 当高 8 位有有效输入时,U1 的 GS 变低,这会禁止 U2 工作
  2. 只有高 8 位全部无效时,U1 的 GS 变高,U2 才开始工作
  3. 总 GS 输出是两芯片 GS 信号的或逻辑

这个级联机制确保了高 8 位永远比低 8 位优先级高。

Verilog 实现

门级建模

module encoder16_4(input [15:0] d,
    output [3:0] code,
    output gs
);
    wire gs1, gs2;
    wire [2:0] code1, code2;

    // 高 8 位编码器
    encoder8_3 u1(.d(d[15:8]), .code(code1), .gs(gs1), .ei(1'b0));

    // 低 8 位编码器
    encoder8_3 u2(.d(d[7:0]), .code(code2), .gs(gs2), .ei(gs1));

    // 组合输出
    assign code = {~gs1, code1 | code2};
    assign gs = gs1 & gs2;
endmodule

行为级建模

module encoder16_4_behavioral(input [15:0] d,
    output reg [3:0] code,
    output reg gs
);
    always @(*) begin
        gs = 1;
        code = 4'b1111;

        // 优先级从高到低检查
        for (int i=15; i>=0; i=i-1) begin
            if (d[i] == 0) begin
                code = 15 - i;
                gs = 0;
                break;
            end
        end
    end
endmodule

生产环境注意事项

在实际电路实现时,需要注意以下几个问题:

  1. 消除毛刺
  2. 在输出端添加 RC 滤波电路
  3. 典型值:R=1kΩ, C=100pF

  4. 输入信号防抖

  5. 对机械开关输入添加施密特触发器
  6. 或者使用软件消抖算法

  7. 竞争冒险处理

  8. 关键路径添加锁存器
  9. 使用同步设计
  10. 必要时插入流水线寄存器

扩展思考

基于同样的级联原理,我们可以将设计扩展到 32 线 - 5 线编码器:

  1. 需要 4 片 74LS148 芯片
  2. 第一级用 3 片编码器处理 24 线输入
  3. 第二级用 1 片编码器处理第一级的 3 个 GS 信号
  4. 最终输出需要 5 位:1 位表示高 24 位有效,3 位表示具体组,1 位表示组内编码

这种分层级联的方法可以无限扩展,只是在延迟和复杂度上需要权衡。

总结

通过 2 片 74LS148 级联实现 16 线 - 4 线编码器,是数字电路设计中一个经典的扩展案例。掌握这种级联技术,不仅限于编码器设计,对于理解更复杂的数字系统构建也非常有帮助。希望本文从理论到实践的完整解析,能帮助初学者顺利掌握这一实用技术。

正文完
 0
评论(没有评论)