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
);