流水线乘加树

该博客详细介绍了流水线乘加树的设计与实现,包括需求分析、设计规划、参数表、端口列表和功能描述。内容涵盖输入输出位宽配置、补码运算、时序控制以及模块的RTL代码实现,特别是乘法器和加法树的结构。此外,还提供了Testbench的设置,包括激励产生、参考模型和计分板的实现。
摘要由CSDN通过智能技术生成

需求

  • 计算两个长度为2的幂次方的向量的对应位置相乘相加结果
  • 输入为补码,输出为补码(支持负数)
  • 输入位宽可配置,输入向量的宽度可配置,输出位宽由以上两项决定

设计规划

参数表

参数名称 说明 默认值
DIN_WIDTH 输入位宽 8
DIN_NUM_LOG 输入向量的宽度的log2值(宽度$$2^{DIN_NUM_LOG}$$) 2

注:输出位宽由以上决定,为$$DOUT_WIDTH = DIN_WIDTH \times 2 + DIN_NUM_LOG - 1$$

端口列表

端口名 类型 位宽 说明
clk input 1 系统时钟
rst_n input 1 系统复位
din_valid input 1 输入数据有效,高有效
mla_din1 input (2 ** DIN_NUM_LOG) * DIN_WIDTH 输入向量1
mla_din2 input (2 ** DIN_NUM_LOG) * DIN_WIDTH 输入向量2
dout_valid output 1 输出信号有效,高有效
mla_dout output DIN_WIDTH * 2 + DIN_NUM_LOG - 1 输出结果

功能描述

功能

$mla_dout = \sum_{i = 0}{2{DIN_NUM_LOG}} mla_din1[i] \times mla_din2[i] $

其中,mla_din1[i]和mla_din2[i]按位宽存储在输入mla_din1和mla_din2,每个均为补码中,如图:

7241055-eabb0fe3285316dd.png
输入数据形式

时序

  • 当输入有效din_valid有效时,开始计算;当dout_valid有效时,结果有效。
  • 设计为流水线式,输入可以连续送入,输出可以连续输出,输出具有保序性。
  • 输入有效到输出有效的间隔由DIN_NUM_LOG决定
7241055-7c43708686251b1e.png
IO时序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值