Проблема с сетевым созданием - PullRequest
1 голос
/ 01 ноября 2010

У меня очень простая машина состояний, которая устанавливает некоторые управляющие сигналы для взаимодействия со сторонним 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;

Sythesis работает нормально, однако при применении следующего файла ограничений я получаю ОШИБКУ: ConstraintSystem: 59 - NET "testip / ip_we" не найден.То же самое происходит для testip / ip_datain и testip / ip_ce.

 Net testip/ip_datain<*> MAXDELAY = 2 ns;
 Net testip/ip_ce MAXDELAY = 2 ns;
 Net testip/ip_we MAXDELAY = 2 ns;

Я проверил список соединений, и действительно нет ни testip / ip_we, ни testip / ip_ce, ни сети testip / ip_datain.У любого есть идея, почему другие сети отсутствуют в списке соединений, все это очень запутанно.

Большое спасибо за любые отзывы!

РЕДАКТИРОВАТЬ: Пожалуйста, смотрите прикрепленный подробный экземпляр в файле верхнего модуля:

icap0 : entity icap.hwicap
    generic map (pindex => 2, paddr => 2, pmask => 16#FFE#, C_SIMULATION => 2,
           C_FAMILY => "virtex5")
    port map (rst => rstn, clk => clkm, apbi => apbi, apbo => apbo(2));


Net icap0/icap_statemachine_I1/Icap_datain<*> MAXDELAY = 2 ns;
Net icap0/icap_statemachine_I1/Icap_ce MAXDELAY = 2 ns;
Net icap0/icap_statemachine_I1/Icap_we MAXDELAY = 2 ns;

Это должно сработать, но при просмотре списка соединений и поиске сигналов Icap_ce или Icap_we их просто не существует.Я просто думаю, что этих сетей нет или они были переименованы, так что я больше не могу их найти.Спасибо

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Сигналы, вероятно, были оптимизированы ... похоже, у вас есть проводная петля, генерирующая ip_ce, и вы управляете ip_datain с несуществующим fifo_dataout.Вы не указываете, на что вы нацеливаетесь, но современный синтез FPGA по умолчанию очень агрессивен в удалении неиспользуемой / необработанной логики, как правило, не более чем информация или предупреждающее сообщение в журнале.Просматривайте ваши журналы синтеза и ищите что-нибудь странное, связанное с сигналами, которые вы ищете.

1 голос
/ 03 ноября 2010

Я думаю, что атрибут keep чувствителен к регистру, вы пробовали "true" вместо "True"?

1 голос
/ 02 ноября 2010

Как говорит Чарльз, ваши сигналы, вероятно, оптимизируются.

Если вы установите атрибут синтеза на сохранить иерархию , то ваши порты будут поддерживаться (но вы упускаете некоторые оптимизации).

Полагаю, вы не так обеспокоены сигналами, как вашими сроками. В этом случае используйте начальную и конечную точку, а не сетевое имя в своих ограничениях.

Кроме того, вы можете установить атрибут keep для сигналов в исходном коде. Это, конечно, может сделать ваш исходный код менее переносимым. Я рекомендую использовать начальную и конечную точки.

Является ли testip вашим верхним уровнем? Если нет, попробуйте

Net "*/testip/ip_ce" MAXDELAY = 2 ns;

эта сеть обнаружена?

Net "*/testip/ip_ce_cs" MAXDELAY = 2 ns;

На самом деле, я упустил нечто более очевидное, как называется экземпляр подсказки? Используйте это вместо testip в вашем ограничении. т.е.

u_test_ip : testip
* * Тысяча двадцать-одина затем
Net "*/u_test_ip/ip_ce" MAXDELAY = 2 ns;
...