Некоторое время назад я наткнулся на занимательный баг в postfit симуляторе для CPLD (проявилось на XC9572XL, возможно и на других проявится тоже).

Сделал проект (на Verilog'е), сделал test bench, запустил, все работает.

Оттранслировал проект вплоть до bitstream, решил проверить в симуляторе результат - ничего не работает, сплошные X, иногда проскакивают похожие данные 05.gif

Стал разбираться. Через пару часов разбора полетов выяснил, что не работает глобальная предустановка (PRLD), что выглядело странно - вроде как никто ее не отменял.

Дальнейшие танцы с бубном вокруг этого сигнала ни к чему не привели - грешил на реализацию ее в модуле glbl (хотя вроде в симуляции ДО fitter'а он работал), пробовал ее перенести к себе - никакой реакции sad.gif Пробовал вручную установить сигнал - аналогично.

Изучение Verilog файла после fitter'а показало, что этот сигнал там есть и используется, как положено.

Я убил ДВА ДНЯ, что бы понять различие между СМОТРЕТЬ и ВИДЕТЬ -

Код


wire \glbl.PRLD;

  X_OR2 \serial_mux_inst/mode_reg<1>_tsimcreated_prld_  (
    .I0(\serial_mux_inst/mode_reg<1>.SETF_70 ),
    .I1(\glbl.PRLD ),
    .O(\serial_mux_inst/mode_reg<1>_tsimcreated_prld__71 )
  );


\glbl.PRLD - это не сигнал PRLD в модуле glbl, а локальный сигнал glbl.PRLD в текущем модуле 01.gif

Добавление строки assign uut. \glbl.PRLD = glbl.PRLD; в тестбенч помогло - все сразу заработало.

У меня вопрос - неужели никто не использует postfit моделирование для CPLD в ISE? Или никто не использует состояние тригеров в CPLD по сбросу? И почему эту багу до сих пор не исправили cranky.gif

Найдено было в ISE 8.2.03i (WEB Pack), перепроверено на ISE 9.2.02i (WEB Pack) - все по прежнему