Vhdl &引用;“死代码”;在锡林克斯
我有一些VHDL代码,我正在为一个类编写。然而,合成工具将cell3、cell2和cell1识别为“死”代码,并且不会合成它 我真的不知道是什么导致细胞3,2,1在合成过程中被移除;我已经复习了5次以上,问了几个不同的人,我找不到“为什么” 不是寻找解决方案,只是一个指向原因的指针Vhdl &引用;“死代码”;在锡林克斯,vhdl,synthesis,dead-code,Vhdl,Synthesis,Dead Code,我有一些VHDL代码,我正在为一个类编写。然而,合成工具将cell3、cell2和cell1识别为“死”代码,并且不会合成它 我真的不知道是什么导致细胞3,2,1在合成过程中被移除;我已经复习了5次以上,问了几个不同的人,我找不到“为什么” 不是寻找解决方案,只是一个指向原因的指针 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multiply is
Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC;
clk : in STD_LOGIC;
rst : in STD_LOGIC;
p : out STD_LOGIC);
end multiply;
architecture Behavioral of multiply is
component cell_a port(
s: in std_logic;
c: in std_logic;
a: in std_logic;
b: in std_logic;
clk: in std_logic;
c_out: out std_logic;
s_out: out std_logic);
end component;
signal c_s_0: std_logic; --loopback wire for cell 0 from carry to sum
signal c_s_1: std_logic;
signal c_s_2: std_logic;
signal c_s_3: std_logic;
signal xfer1_0: std_logic; --wire between 1 and 0
signal xfer2_1: std_logic; --" 2 and 1
signal xfer3_2: std_logic; --" 3 and 2
begin
cell3: cell_a port map(
clk => clk,
s => c_s_3 , c => '0', a => a(3), b => b,
c_out => c_s_3, s_out => xfer3_2
);
cell2: cell_a port map(
clk => clk,
s => c_s_2 , c => xfer3_2, a => a(2), b => b,
c_out => c_s_2, s_out => xfer2_1
);
cell1: cell_a port map(
clk => clk,
s => c_s_1, c => xfer2_1, a => a(1), b => b,
c_out => c_s_1, s_out => xfer1_0
);
cell0: cell_a port map(
clk => clk,
s => c_s_0 , c => xfer1_0, a => a(0), b => b,
c_out => c_s_0, s_out => p
);
process(clk)
begin
if(clk'event and clk = '1') then
if(rst = '1') then
--reset logic here. Magic happens and the circuit goes to all 0
end if;
end if;
end process;
end Behavioral;
可能是cell1-3通过合成得到了优化,因为该块“p”的输出只有1位
您不需要完全评估所有逻辑来确定该位应该是0还是1。在没有看到其余代码的情况下,我可以建议您的“c”输入单元a未使用,这会导致单元3/2/1的所有输出未使用(因此,死代码,因为它不会产生可观察的结果)
cell0实例化是因为乘法器的“p”输出是可观察的。显然是这样,否则它就不会被写入。正如我在回答中所说,这很可能是cell_a架构中的错误。我不理解你的评论。我可以写一些不需要的东西,逻辑将通过合成工具进行优化。例如,如果我写出=in |!在中,合成工具将优化OR门和INV门,只需写出=1。是的,但如果您打算将其包括在内,而不是,则更可能是您的错误。这个问题意味着开发人员希望所有的代码都被使用,而没有被使用的事实是不正确的。这就是问题所在非常感谢。如果我想到那一点,我几个小时前就完蛋了。非常感谢。