← 2024 · NVIDIA · ASIC Design Intern(上海) 笔试
推荐答案
测试一下
题目
Implement a combination logic for dout[1:0] = din[2:0]/3. (The more options, the better)
参考答案与知识点
参考答案
输入 din 为 3 位无符号数(0~7),输出 dout 为 2 位无符号数(0~2),表示 din 除以 3 的商(忽略余数)。组合逻辑实现方式多样:
1. **真值表 + 卡诺图化简**:列出所有 8 种输入对应的输出,得到 dout[1]=din[2]&din[1]'&din[0] | din[2]&din[1]&din[0]',dout[0]=din[2]&din[1]'&din[0]' | din[2]&din[1]&din[0] | din[2]'&din[1]&din[0]。化简后可用与或门实现。
2. **查找表(LUT)**:使用 8×2 位 ROM,地址对应 din,数据对应 dout。在 FPGA 中可直接用 LUT 原语或综合工具自动推断。
3. **硬件描述语言(case 语句)**:如 Verilog 中 `always @(*) case(din) 0: dout=0; ... 7: dout=2; endcase`,综合为组合逻辑。
4. **算术运算(定点乘法)**:将除以 3 近似为乘以 0.33333,用 3 位乘法器:dout = (din * 85) >> 8,但需要 3×8 位乘法器和移位,资源较多。
5. **减法器迭代**:用组合逻辑实现连续减 3 直到小于 3,统计减法次数,但迭代次数不定,组合实现复杂。
6. **二选一比较器**:判断 din≥3、≥6 分别输出 0、1、2,如 dout = (din>=6)?2:((din>=3)?1:0);用两个比较器和选择器。
常用方案为 case 或比较器,兼顾简洁与效率。
涉及知识点
- 组合逻辑设计方法
- 真值表与卡诺图化简
- 查找表(LUT)实现
- 定点除法近似技术
- 硬件描述语言(case语句)
- 基于比较器的条件输出