Vhdl 为什么DSP从我的方程式中减去1?
我尝试在DSP48E1中实现: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 有没有一种简单的方法来纠正这个结果?或者我应该在输入之前加上+
(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系列设备支持,但它已不再维护,因此其仿真模型中可能存在错误。我还假设您的操作模式没有动态变化,因此这不可能是管道问题。