Vhdl 网络实例化问题

Vhdl 网络实例化问题,vhdl,fpga,Vhdl,Fpga,我有一个非常简单的状态机,它设置一些控制信号以与第三方IP进行交互。代码大致如下所示: entity testip is port ( ... fifo_dataout : in std_logic_vector(0 to 31); ip_dataout : in std_logic_vector(0 to 31); ip_ce : out std_logic; ip_we

我有一个非常简单的状态机,它设置一些控制信号以与第三方IP进行交互。代码大致如下所示:

entity testip is
  port (
  ...
    fifo_dataout        : in  std_logic_vector(0 to 31);
    ip_dataout          : in  std_logic_vector(0 to 31);
    ip_ce                 : out std_logic;
    ip_we                : out std_logic;
    ip_datain            : out std_logic_vector(0 to 31);
  );
end entity testip;

architecture imp of testip is

  signal ip_ce_ns     : std_logic;
  signal ip_we_ns     : std_logic;
  signal ip_ce_cs     : std_logic;
  signal ip_we_cs     : std_logic;
  signal ip_dataout_i : std_logic_vector(0 to 31);
  ...

  attribute keep: string;
  attribute keep of ip_ce    : signal is "True";
  attribute keep of ip_we    : signal is "True";

  begin

  COMB : process (...)
      begin
        ip_ce_ns          <= ip_ce_cs;
        ip_we_ns          <= ip_we_cs;

     case ip_nstate_cs is
        when IDLE      =>
        ...

     end case;
 end process COMB;

 REG: process (Clk) is
   begin
      if (Clk'event and Clk = '1') then
         if (Rst = '1') then
              ip_ce_cs                <= '1';
              ip_we_cs                <= '1';
              ...
         else          
              ip_ce_cs                <= ip_ce_ns;
              ip_we_cs                <= ip_we_ns;
              ...
         end if;
    end if;
 end process REG;

S0:     ip_ce                 <= ip_ce_cs;
S1:     ip_we                <= ip_we_cs;
S2:     ip_datain           <= fifo_dataout;
S3:     ip_dataout_i       <= Ip_dataout;

end architecture imp;
实体testip是
港口(
...
fifo_数据输出:标准逻辑_向量中(0到31);
ip_数据输出:标准逻辑_向量中(0到31);
ip_ce:输出标准逻辑;
ip_-we:输出标准逻辑;
ip_数据输入:输出标准逻辑向量(0到31);
);
终末实体试验;
testip的体系结构imp是
信号ip地址:标准逻辑;
信号ip地址:标准逻辑;
信号ip_ce_cs:标准逻辑;
信号ip_we_cs:标准逻辑;
信号ip_数据输出_i:标准逻辑_向量(0至31);
...
属性keep:string;
ip_ce属性保持:信号为“真”;
ip_we的属性保持:信号为“真”;
开始
梳:进程(…)
开始

ip\u ce\u ns信号可能被优化掉了……看起来你有一个产生ip\ce的线环,你正在用不存在的fifo\u数据输出驱动ip\u数据输入。您没有指出您的目标,但是现代FPGA合成在默认情况下非常积极地删除未使用/未驱动的逻辑,通常只在日志中显示一条信息或警告消息。在你的合成日志中爬行,寻找任何与你正在寻找的信号相关的奇怪信息。

这些信号可能已经被优化掉了……看起来你有一个生成ip\ce的线环,你正在用不存在的fifo\u数据输出驱动ip\u数据输入。您没有指出您的目标,但是现代FPGA合成在默认情况下非常积极地删除未使用/未驱动的逻辑,通常只在日志中显示一条信息或警告消息。浏览你的合成日志,寻找任何与你所寻找的信号有关的奇怪信息。

正如查尔斯所说,你的信号可能正在被优化

如果您将synthesis属性设置为preserve hierarchy,那么您的端口将得到维护(但是您错过了一些优化)

我猜你对信号的关注程度不如你对时间的关注程度。在这种情况下,在约束中使用起点和终点,而不是网络名称

或者,您可以在源代码中的信号上设置keep属性。这当然会降低源代码的可移植性。我的建议是使用起点和终点

testip是你的最高级别吗?如果不尝试

Net "*/testip/ip_ce" MAXDELAY = 2 ns;
是否检测到该网络

Net "*/testip/ip_ce_cs" MAXDELAY = 2 ns;
事实上,我遗漏了更明显的东西,testip实例的名称是什么?在约束中使用它而不是testip。i、 e

u_test_ip : testip
然后


正如查尔斯所说,你的信号可能正在被优化

如果您将synthesis属性设置为preserve hierarchy,那么您的端口将得到维护(但是您错过了一些优化)

我猜你对信号的关注程度不如你对时间的关注程度。在这种情况下,在约束中使用起点和终点,而不是网络名称

或者,您可以在源代码中的信号上设置keep属性。这当然会降低源代码的可移植性。我的建议是使用起点和终点

testip是你的最高级别吗?如果不尝试

Net "*/testip/ip_ce" MAXDELAY = 2 ns;
是否检测到该网络

Net "*/testip/ip_ce_cs" MAXDELAY = 2 ns;
事实上,我遗漏了更明显的东西,testip实例的名称是什么?在约束中使用它而不是testip。i、 e

u_test_ip : testip
然后


我认为
keep
属性区分大小写,您是否尝试过
“true”
而不是
“true”

我认为
keep
属性区分大小写,您尝试过
“true”
而不是
“true”

谢谢Charles,我检查了合成日志,它没有说任何地方的信号已经修剪。事实上,这些信号根本没有被提及。。。非常令人困惑的是,谢谢查尔斯,我检查了合成日志,它没有说任何地方的信号已经被修剪。事实上,这些信号根本没有被提及。。。非常令人困惑的是,Georg,我将看看这个keep属性和preserve hierarchy选项。你能用“开始和结束”点来解释你的意思吗?我还不是100%清楚你的意思。嗨,Richard,告诉我你用什么工具进行合成,我会给你写一个例子。非常感谢Georg,我用XST 12.1进行合成。我只是想试试keep属性的运气,让我们看看这是否有效。我现在添加了keep属性,正如您在上面所看到的,不幸的是,它没有任何效果,并且在网络列表中找不到ip_ce和ip_we…使用Net“*/testip/ip_ce”MAXDELAY=2 ns;相反,给了我同样的结果。干杯,乔治,我将看看这个keep属性和preserve hierarchy选项。你能用“开始和结束”点来解释你的意思吗?我还不是100%清楚你的意思。嗨,Richard,告诉我你用什么工具进行合成,我会给你写一个例子。非常感谢Georg,我用XST 12.1进行合成。我只是想试试keep属性的运气,让我们看看这是否有效。我现在添加了keep属性,正如您在上面所看到的,不幸的是,它没有任何效果,并且在网络列表中找不到ip_ce和ip_we…使用Net“*/testip/ip_ce”MAXDELAY=2 ns;相反,不幸的是,给了我同样的结果。