共计 1724 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:为什么需要优先编码器
传统三人表决电路如果用基本门电路搭建,需要大量与非门组合。假设用最简的 2 / 3 多数表决逻辑,仅核心部分就需要 6 个与非门(3 个输入两两相与后再或),再加上去抖动和锁存电路,整体设计会变得非常复杂。这种设计存在几个明显问题:

- 门电路数量随参与者增加呈指数级增长
- 布线复杂度高容易引入干扰
- 修改表决规则(如改为必须全票通过)需要重新设计整个电路
74ls148 芯片深度解析
74ls148 是 8 线 - 3 线优先编码器,其真值表如下:
| 输入 | EO | A2 | A1 | A0 | GS |
|---|---|---|---|---|---|
| 全 1 | 1 | 1 | 1 | 1 | 1 |
| I0=0 | 1 | 1 | 1 | 0 | 0 |
| … | … | … | … | … | … |
| I7=0 | 0 | 0 | 0 | 0 | 0 |
关键特性说明:
- 优先编码 :当多个输入有效时,只响应最高位输入(I7 优先级最高)
- EI/EO 级联 :允许扩展更多输入端口
- EI= 0 时芯片工作
- 当无有效输入时 EO=0,可驱动下一级芯片
- GS 标志位 :任何有效输入时变为 0
完整电路设计
三人表决系统框图:
[按键] -> [消抖电路] -> [74ls148] -> [表决逻辑] -> [锁存器] -> [LED 显示]
具体实现细节:
- 消抖电路 :采用典型的 RC 滤波 + 施密特触发器方案,时间常数取 10ms
- 编码器配置 :
- 只使用 I0-I2 三个输入端口
- EI 接地使能,EO 悬空
- 表决逻辑 :
- 通过观察真值表可知,当有两个及以上输入时,A1+A0≥2
- 用或门组合 A1 和 A0 即可得到多数表决结果
- 输出锁存 :使用 74ls373 在时钟上升沿锁存结果
FPGA 实现(Verilog)
module voter_3input(
input clk,
input [2:0] key_in, // 消抖后的按键输入
output reg result // 表决结果
);
// 模拟 74ls148 行为
wire [1:0] enc_out;
wire active;
always @(*) begin
casex(key_in)
3'b000: {enc_out, active} = {2'b11, 1'b1};
3'b001: {enc_out, active} = {2'b00, 1'b0};
3'b010: {enc_out, active} = {2'b01, 1'b0};
3'b100: {enc_out, active} = {2'b10, 1'b0};
default: {enc_out, active} = {2'b00, 1'b0};
endcase
end
// 多数表决逻辑
wire vote_pass = (enc_out[1] | enc_out[0]);
// 时钟域同步
always @(posedge clk) begin
result <= vote_pass;
end
endmodule
测试平台代码:
module tb_voter();
reg clk;
reg [2:0] keys;
wire result;
voter_3input uut(.*);
initial begin
clk = 0;
forever #5 clk = ~clk;
end
initial begin
// 边界测试
keys = 3'b000; #10;
keys = 3'b001; #10; // 单票应不通过
keys = 3'b011; #10; // 两票应通过
keys = 3'b111; #10; // 全票应通过
// 竞争测试
keys = 3'b001; #2;
keys = 3'b010; #2; // 快速连续变化
#20 $finish;
end
endmodule
避坑指南
- 按键消抖 :
- 实测机械按键抖动可达 20ms
-
推荐方案:FPGA 内用计数器实现,检测稳定 10ms 不变才认为有效
-
竞争冒险 :
- 组合逻辑输出可能产生毛刺
- 解决方法:所有输出必须用时钟同步
-
必要时插入流水线寄存器
-
时序约束 :
- 设置合理的时钟周期(建议 >20ns)
- 对锁存器输出设置 set_max_delay 约束
扩展思考
如何设计五人表决系统?两种实现方案对比:
- 级联编码器方案 :
- 使用两片 74ls148 级联
- 第一片 EO 接第二片 EI
-
表决逻辑变为 A2+A1+A0≥3
-
ROM 查表法 :
- 将输入作为地址线
- 预存所有 32 种组合的结果
- 优点:修改规则无需改电路
- 缺点:响应速度稍慢
实际选择时需要考虑表决规则变更频率和响应速度要求。
实战心得
通过这个项目,我深刻体会到优先编码器在化简组合逻辑方面的优势。建议初学者先用 Multisim 等工具仿真电路,再过渡到 FPGA 实现。遇到问题时,要善用 SignalTap 逻辑分析仪观察中间信号。
正文完
发表至: 未分类
近两天内
