← 大疆FPGA逻辑岗A卷(19.08.04)

推荐答案 测试一下

进行一个运算单元的电路设计,A[7:0]*11111011,请尽量用最少的资源来实现,写出对应的RTL代码。

问答题 中等 经典问答问答题

参考答案

将常数 11111011 (二进制) 即 0xFB (十进制 251) 表示为 256 - 4 - 1,即 2^8 - 2^2 - 2^0。因此 A * 251 = (A << 8) - (A << 2) - A。在 RTL 中,使用移位和加减法实现,避免了乘法器,资源最省。注意位宽:A 为 8 位无符号数,乘积最大为 16 位 (255*251=64005 < 2^16),故结果定义为 16 位。实现代码: `timescale 1ns/1ps module mul_251 ( input [7:0] A, output [15:0] result ); assign result = (A << 8) - (A << 2) - A; endmodule 该结构仅使用三个移位器和两个减法器,综合面积小。注意减法顺序:先左移再相减,所有操作数自动扩展至 16 位。无需额外符号扩展,因为无符号运算结果非负。

涉及知识点

  • 常数乘法分解为移位加减
  • 资源优化设计方法
  • 无符号数位宽扩展处理
  • 组合逻辑 RTL 实现
← 上一题
登录后反馈错题