Vhdl 直接实例化无IP核的DSP片 问题

Vhdl 直接实例化无IP核的DSP片 问题,vhdl,xilinx,vivado,Vhdl,Xilinx,Vivado,我想: p查看第34页的表2-7 当前配置在后加法器上执行,p=Z+X+Y+CIN,其中Z=0、X=0和Y=0。你看到问题了吗 OPMODE信号控制多路复用器的值。您需要OPMODE(6到4)=“000”,以便Z保持其空值。但是,您希望OPMODE(3降到0)=“0101”将X/Y设置为乘法器输出MALUMODE应该保持它的当前值,这很好。我在上面的问题中添加了一张图片来帮助理解。所以Z部分显然是0,因为我们在这里屏蔽了C信号。虽然当你打开X和Y时,我有点像文档中说的那样:Y:“01”,X:“0

我想:


p查看第34页的表2-7

当前配置在后加法器上执行,
p=Z+X+Y+CIN
,其中
Z=0
X=0
Y=0
。你看到问题了吗


OPMODE
信号控制多路复用器的值。您需要
OPMODE(6到4)=“000”
,以便
Z
保持其空值。但是,您希望
OPMODE(3降到0)=“0101”
X/Y
设置为乘法器输出
M
ALUMODE
应该保持它的当前值,这很好。

我在上面的问题中添加了一张图片来帮助理解。所以Z部分显然是0,因为我们在这里屏蔽了C信号。虽然当你打开X和Y时,我有点像文档中说的那样:
Y:“01”,X:“01”,多路复用器输出:M
-所以这只是输出乘法时OPMode的一个规则-但是为什么两者都必须打开呢?或者其中一个输出MSB和其他LSB?但它仍然输出0。。。grrrI不太清楚为什么X和Y必须是m。我最好的猜测是乘法器不会输出一个有效的乘法结果,而是2个求和为乘法的部分积。强制使用输出加法器并产生更好的管道/计时结果是有意义的。因此,在这里没有其他任何东西会导致输出0?默认泛型使用OPMODE和ALUMODE寄存器,我刚才看到您的
cectrl
cealumode
都是
'0'
,都保持在0。将它们设置为
'1'
或删除管道寄存器(泛型ALUMODEREG和OPMODEREG)。
a <= std_logic_vector(to_unsigned(5, 30));
b <= std_logic_vector(to_unsigned(1, 18));
d <= std_logic_vector(to_unsigned(20, 25));

    dsp : DSP48E1
    generic map (
        USE_DPORT => True,
        ALUMODEREG => 0, 
        CARRYINREG => 0,
        CARRYINSELREG => 0,
        CREG => 0
        )
    port map(
        clk => clk,
        acin => std_logic_vector(to_unsigned(1, 30)), -- cascaded data input
        alumode => "0000", -- control bits to select logic unit inputs
        bcin => std_logic_vector(to_unsigned(1, 18)), -- cascaded data input 
        carrycascin => '0', -- cascaded data input
        carryin => '0',  -- carry input
        carryinsel => "000", -- selects carry source
        cea1 => '1', -- clock enable if AREG = 2 or INMODE0 = 1
        cea2 => '1', -- clock enable if AREG = 1 or 2
        cead => '1', -- clock enable for AD pipeline register
        cealumode => '0', -- clock enable for ALUMODE --0
        ceb1 => '1', -- clock enable if BREG = 1 or INMODE4 = 1
        ceb2 => '1', -- clock enable if BREG = 1 or 2
        cec => '0', -- clock enable for C
        cecarryin => '0', -- clock enable
        cectrl => '0', -- clock enable for OPMODE and CARRYINSEL ctrl registers
        ced => '1', -- clock enable for D
        ceinmode => '0',-- **** clock enable input registers
        cem => '0', -- clock enable for the post multiply M register and the internal multiply round CARRYIN register
        cep => '1', -- clock enable 
        inmode => "01101", -- *selects functionality of preadder [3] = sign, [4] = B multiplier sel
        multsignin => '0', -- MACC extension sign
        opmode =>  "0000101", -- *** Control input to A, Y and Z multiplexers
        pcin => std_logic_vector(to_unsigned(1, 48)), -- cascade input
        rsta => rst,
        rstallcarryin => '0',
        rstalumode => '0',
        rstb => rst,
        rstc => '0',
        rstctrl => rst,
        rstd => rst,
        rstinmode => rst,
        rstm => rst,
        rstp => rst,
        a => a,--_dsp, -- bits 29:25 used in second stage preadder 
        b => b,--_dsp,
        c => c_dsp,
        d => d,--_dsp,
        p => p_dsp
    );