← 大疆FPGA逻辑岗B卷(19.08.06)

推荐答案 测试一下

设一个cycle只能完成一个(8bit*8bit)或一个(17bit+17bit+17bit)操作,那么设计16bit*16bit乘法最少可以多少个cycle完成。

A 1个cycle B 2个cycle C 3个cycle D 4个cycle
单选题 中等 笔试真题单选

参考答案

我们分析题目:一个cycle只能完成一个8bit*8bit乘法或者一个17bit+17bit+17bit加法操作。设计16bit*16bit乘法,最少需要多少个cycle? 16bit乘法可以分解为4个8bit乘法(按位权相加)。设A = AH*2^8 + AL,B = BH*2^8 + BL,则A*B = AH*BH*2^16 + (AH*BL + AL*BH)*2^8 + AL*BL。需要4个8bit乘法。然后需要加法:乘积项相加时注意位权。乘积项:AL*BL是16bit(实际低16位),AH*BL和AL*BH都是24bit(但中间部分移位8位后相加),AH*BH是32bit。但加法器是17bit+17bit+17bit,即三输入加法,结果17bit?注意:题目说“完成一个(17bit+17bit+17bit)操作”,意思是三个17bit数相加得到17bit?可能是三个17bit数相加得到一个17bit结果?或者是一个三输入的加法器,每个输入17bit,输出17bit?通常理解为三个17bit数相加,结果可能溢出到18bit,但这里定义操作是加三个17bit得到17bit?但考虑实际乘法中,加法需要处理进位。更可能的是,这个加法器是一个三输入的加法器,每个输入是17bit,输出也是17bit(带进位?但题目说“一个(17bit+17bit+17bit)操作”,可能就是一个三输入加法,结果保留17bit,但实际我们需要更大的位宽。 因为乘法结果需要32bit,我们需要组合这些乘积。通常使用华莱士树或CSA。但题目限制了硬件:每个cycle只能做一个8bit乘法或一个三输入17bit加法。我们需要设计最少cycle数。 首先,4个8bit乘法可以在4个cycle完成,但可能并行?因为每个cycle只能做一个操作,所以乘法必须顺序进行。但是,我们可以在乘法后的加法阶段使用加法器。加法器可以处理三个17bit数相加。我们需要将四个乘积项相加。注意乘积的位宽和移位: - AL*BL: 16bit,位于位[15:0] - AH*BL: 24bit,但实际是AH*BL * 2^8?注意AH*BL的结果是16bit(因为8bit*8bit=16bit),然后因为AH是高位,所以AH*BL实际上要左移8位,所以乘积项值为(AH*BL)<<8,所以位[23:8]。 - AL*BH类似,左移8位。 - AH*BH左移16位,32bit。 我们需要把四个数加起来,每个数都有不同的位宽。我们可以使用加法器逐步累加。因为加法器每次只能加三个17bit数,但我们的数可能超过17bit。我们需要将大数分割成多个17bit段进行处理?或者使用进位保存加法器(CSA)的思维方式。但题目限制是每个cycle只能做一个操作,且操作类型固定。我们需要最小cycle数。 我们可以先做乘法,然后分步加法。乘法需要4个cycle。然后加法:我们需要把四个乘积加起来。但我们可以利用加法器的三输入特性,一次将三个数相加,结果与第四个数再相加。但要注意,加法器输入限17bit,而乘积项中AH*BH是32bit,需要分段处理。另外,相加的结果可能产生进位。 一个常见的技巧是使用华莱士树,将多个乘法结果压缩。但这里每个cycle只能做一个操作,所以我们要顺序执行。 另一种思路:我们可以将16bit乘法分解为4个8bit乘法后,用加法器进行累加。但一次加法只能处理三个17bit数,所以我们需要将输入数调整到17bit以内。实际上,每个乘积项都是16bit或更宽,但我们可以将它们拆分为低16bit和高位部分。因为加法器是17bit输入,所以一次最多加三个17bit数,输出也是17bit?如果输出是17bit,那么我们需要处理进位。 实际上更常见的理解是:一个cycle可以执行一个8bit*8bit乘法得到一个16bit结果,或者执行一个三输入加法,每个输入17bit,输出一个17bit结果(可能有一个进位输出?但没提)。通常这种题目认为加法器是带进位的。我们假设加法器可以完成三个17bit数相加,得到17bit和以及进位?但只说是17bit+17bit+17bit操作,可能结果也是17bit(不考虑溢出?)实际上在硬件中,三个数相加结果位数会变宽,但这里可能限制结果也是17bit,意味着需要截断?不合理。 更好的解释是:这个操作单元可以完成一个8bit乘法,或者完成三个17bit数的加法(即三个数相加得到和,结果可能为18bit,但单元只输出17bit?)通常面试题中,这种题目是考察分解和流水线。例如,将16bit乘法分解为四个8bit乘法,然后使用加法树。因为加法器是三输入的,我们可以用两个加法周期完成四个乘积的求和(先加三个,再加另一个)。但需要处理位宽。 注意:乘积项中有两个是左移8位的,即它们的低8位为0,所以实际上AL*BL的低8位直接作为结果低8位,而其他部分需要对齐。我们可以将四个乘积看作不同位置的数。我们可以使用分段加法。 常见解法:先完成4个乘法,需要4个cycle。然后加法:我们可以一次加三个数,但需要把三个数的对应位对齐。因为每个乘积都是16bit,但移位后变成不同位宽。我们可以先将两个中间乘积(AH*BL和AL*BH)相加,因为它们都是左移8位的,可以直接相加,得到16bit+可能进位,但需要处理。然后与AL*BL和AH*BH相加。 因为加法器一次只能加三个17bit数,而每个乘积最大16bit,但加上移位后,AH*BH是32bit,所以必须分段。例如,我们可以将AH*BH拆成高16bit和低16bit(实际上低16bit是0,因为左移16位?不对,AH*BH是16bit*16bit=32bit,没有左移,因为AH和BH都是8bit,乘积是16bit,左移16位后变成32bit,所以高16bit是乘积本身,低16bit是0)。所以AH*BH实际上是一个数,其高16bit是有效的,低16bit为0

涉及知识点

  • IC 基础
  • 数字电路
  • 设计与验证
← 上一题
登录后反馈错题
下一题 →