Vhdl 为什么DSP从我的方程式中减去1?

Vhdl 为什么DSP从我的方程式中减去1?,vhdl,signal-processing,fpga,xilinx,Vhdl,Signal Processing,Fpga,Xilinx,我尝试在DSP48E1中实现: (A*B)-C 阅读手册: 我想我一定有: OPMODE=>“011011” 因此,X、Y和Z多路复用器的输出为: X和Y是M=A*B的部分积,因此,X+Y=M=A*B Z=C 然后我设置: ALUMODE=>“0001” 使其产生: -Z+(X+Y+CIN)-1=非(Z)+X+Y+CIN 第35页上有一条注释说“在2s补码中-Z=not(Z)+1” 因此,我一直得到的结果是: -C+A*B-1 有没有一种简单的方法来纠正这个结果?或者我应该在输入之前加上+

我尝试在DSP48E1中实现:

(A*B)-C

阅读手册:

我想我一定有:

OPMODE=>“011011”

因此,X、Y和Z多路复用器的输出为:

  • X和Y是
    M=A*B
    的部分积,因此,
    X+Y=M=A*B
  • Z=C
然后我设置:

ALUMODE=>“0001”

使其产生:

-Z+(X+Y+CIN)-1=非(Z)+X+Y+CIN

第35页上有一条注释说“在2s补码中
-Z=not(Z)+1

因此,我一直得到的结果是:

-C+A*B-1


有没有一种简单的方法来纠正这个结果?或者我应该在输入之前加上+1吗?

在上面的等式中,它不应该是
X*Y
?设置
CIN
可以解决您的问题,但我不熟悉此DSP原语的直接实例化。不,据我所知,X和Y是第34页所示的两个部分产品。我也这么想,但你看第37页,然后你就有了
CARRYINSEL
mux的选项,我把它保留在0。我试着将
CARRYIN
设置为1,但似乎没有什么不同。当第55页告诉你这正是它的用途时,我一定遗漏了一些东西。我再次编辑了你的问题,以澄清X、Y和Z的值。希望它是正确的。我有一个设计中的这种操作模式,将
CARRYIN
设置为
'1'
,我看不出你所描述的有任何错误。您是否确实连接到了
CARRYIN
,而不是
carrycasin
?如果您正在进行模拟,是否使用Vivado模拟库或ISE进行模拟?尽管ISE有一些7系列设备支持,但它已不再维护,因此其仿真模型中可能存在错误。我还假设您的操作模式没有动态变化,因此这不可能是一个管道问题。在上面的等式中,它不应该是
X*Y
?设置
CIN
可以解决您的问题,但我不熟悉此DSP原语的直接实例化。不,据我所知,X和Y是第34页所示的两个部分产品。我也这么想,但你看第37页,然后你就有了
CARRYINSEL
mux的选项,我把它保留在0。我试着将
CARRYIN
设置为1,但似乎没有什么不同。当第55页告诉你这正是它的用途时,我一定遗漏了一些东西。我再次编辑了你的问题,以澄清X、Y和Z的值。希望它是正确的。我有一个设计中的这种操作模式,将
CARRYIN
设置为
'1'
,我看不出你所描述的有任何错误。您是否确实连接到了
CARRYIN
,而不是
carrycasin
?如果您正在进行模拟,是否使用Vivado模拟库或ISE进行模拟?尽管ISE有一些7系列设备支持,但它已不再维护,因此其仿真模型中可能存在错误。我还假设您的操作模式没有动态变化,因此这不可能是管道问题。