需求
- 计算两个长度为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,每个均为补码中,如图:
时序
- 当输入有效din_valid有效时,开始计算;当dout_valid有效时,结果有效。
- 设计为流水线式,输入可以连续送入,输出可以连续输出,输出具有保序性。
- 输入有效到输出有效的间隔由DIN_NUM_LOG决定