DSP48E1(3)乘法运算实例

1.实现乘法25bit*18bit运算
\quad 由A端输入24bit数据,D端输入24bit数据,实现预加法。然后与B端输入的18bit数据实现乘法。最后P端输出。
\quad 使能模式匹配功能,与C端输入的数据匹配。
\quad 调用原语实现。
在这里插入图片描述

1.1. 参数配置

\quad USE_DPORT = TRUE;
\quad USE_MULT = MULTIPLY;
\quad USE_SIMD = ONE48;乘法必须选择ONE48

\quad MASK = 48‘h000000000000
\quad SEL_MASK = MASK;
\quad SEL_PATTERN = C;与C模式匹配
\quad USE_PATTERN_DETECT = PATDET;使能模式匹配

\quad AREG=2;BREG=2;A、B通道选择两级寄存器
\quad ADREG=1;A、B预加法寄存器
\quad MREG=1;由于用到了乘法器所以MREG必须为1

1.2. 端口输入
1) 位宽
\quad A最大位宽25bit
\quad B最大位宽18bit
\quad D最大位宽25bit
\quad 预加法器输出位宽25bit
\quad 乘法器(MULT)输出位宽25X18bit
\quad P输出位宽48bit

2) INMODE寄存器配置
\quad INMODE[0] = 0;选择A2寄存器输出
\quad INMODE[1] = 0;使能A路径输出
\quad INMODE[2] = 1;使能D路径输出
\quad INMODE[3] = 0;使能A+D运算
\quad INMODE[4] = 0;选择B2寄存器输出

2)OPMODE寄存器配置
\quad OPMODE[1:0] = 01;X MUL选择M寄存器输出OPMODE[3:2] 必须是01
\quad OPMODE[3:2] = 01;Y MUL选择M寄存器输出OPMODE[1:0] 必须是01
\quad OPMODE[6:4] = 000;Z MUL输出0

3)ALUMODE寄存器配置
\quad ALUMODE[3:0] = 0000;选择Z+X+Y+CIN
\quad 在OPMODE选择X MUL、Y MUL都输出M寄存器值,而这里又选择X+Y,结果不是M寄存器值得2倍么?其实X+Y只加了M寄存器值的一部分。

4)CARRYINSEL寄存器配置
\quad 选择CARRYINSEL多路复用通道的输出通道
\quad CARRYINSEL[2:0] = 000;选择CARRYIN

2.仿真结果
1)A、B、C、D、CIN
\quad A =24’h2;
\quad D =24’h3
\quad B =18’h7;
\quad C=48’h23;
\quad CIN=0
\quad P=(A+D)*B=35
\quad PATTERNDETECT=1;模式匹配成功
在这里插入图片描述

2)A、B、D、CIN
\quad A =24’h80_0000;
\quad D =24’h80_0000;
\quad B =18’h2_0000;
\quad C=48’h23;
\quad CIN=0
\quad P=(A+D)*B=43’h200_0000_0000
\quad PATTERNDETECT=0;模式匹配失败
在这里插入图片描述

3.参考
ug479
https://blog.csdn.net/Leo_9824/article/details/118707437?spm=1001.2014.3001.5502
https://download.csdn.net/download/Leo_9824/20255360?spm=1001.2014.3001.5503

4.工程链接:https://download.csdn.net/download/Leo_9824/21913526
环境:vivado2017.4

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值