相比于 DSP48 , Versal ACAP 中的 DSP58 功能更加多样化,同时 Fmax也有很大提升 。我们将关注点放在DSp58 的向量乘法功能上。先看一下在执行向量乘法时 DSP58 的基本架构,如下图所示(图片来源: Figure 28 , am004 )。
从图中不难看出,核心单元有 3 个乘法器和 2 个加法器构成。其中乘法器两个输入数据的位宽分别为 8 – bit 和 9 一 bit ,故其输出位宽为 17 一 bit 。同时,乘法器的输出支持取反功能,这是由其中的 NEGATEO / NEGATEI / NEGATEZ 控制的。例如, NEGATEZ 为 1 ,图中最上方的乘法器输出结果就变为- M ,否则输出为 M 。紧随 3 个乘法器之后的加法器是一个 3 输入加法器,用于将 3 个乘法器的结果相加,渝入位宽均为 17 一 bit ,故输出位宽变为 19 一 bit 。末级的加法器也是一个 3 输入加法器,其中一个输入数据由前级加法器提供,另外两个输入数据由 Switch 4×2 提供(这实际上是一个 4 选 2 的数据选择器)。 Switch 的愉入可以是 DSP58 的 C 端 口 、 p 端 口 、 PCIN 端 口 (与前级 DSP58 的 PCOUT 连接)或者 O 。这意味着这个加法器可以执行本级 DSP58 的累加,还可以执行本级 DSP58 与前级 DSP58 的累加。此外,还有一点值得注意,从输入到输出的 Latency 为 3 ,是 3 级流水。进一步,从数学表达式的角度看, DSP58 执行的向量乘法功能如下面两个表达式所示。其中向量 u 为 [ ao , al , aZ ] ,向量 v 为[ bo , bl , bZI 。向量 u 的 3 个元录均为 9 一 bit ,由 DSP58 的 A 端口进入,向量v 的 3 个元素均为 8 一 bit ,由 DSP58 的 B 端口进入,这与 A 端口 27 一 bit 、 B 端口 24 一 bit 是完全吻合的。
(完整版登录见一楼)
这里有几点需要注意:首先,所有输入数据都要声明为有符号数,所以, Signed 关键字不能遗漏 ( logic默认为无符号数)。其次,输入到输出 Latency为 3 ,所以, 3 个乘法器与紧随其后的加法器之间没有流水寄存器,保证与图中的电路结构相一致。这也体现了 R TL 代码风格的一个重要因素:代码必须与硬件结构相匹配,这样才可能获得最好的性能。
相比于 DSP48 , Versal ACAP 中的 DSP58 功能更加多样化,同时 Fmax也有很大提升 。我们将关注点放在DSp58 的向量乘法功能上。先看一下在执行向量乘法时 DSP58 的基本架构,如下图所示(图片来源: Figure 28 , am004 )。
这里有几点需要注意:首先,所有输入数据都要声明为有符号数,所以, Signed 关键字不能遗漏 ( logic默认为无符号数)。其次,输入到输出 Latency为 3 ,所以, 3 个乘法器与紧随其后的加法器之间没有流水寄存器,保证与图中的电路结构相一致。这也体现了 R TL 代码风格的一个重要因素:代码必须与硬件结构相匹配,这样才可能获得最好的性能。
没有回复内容