tf_nodeinfo объявлен IEEE устаревшим

Я хотел бы использовать подпрограммы PLI, которые были разработаны много лет назад с использованием PLI 1.0. Раньше работало нормально. Но когда я попытался запустить с помощью более новой версии симулятора ModelSim Verilog, я получил следующее сообщение об ошибке:

# ** Предупреждение: (vsim-8668) tf_nodeinfo объявлен IEEE устаревшим. Несмотря на частичную поддержку, для memoryval_p всегда будет задан нулевой указатель.
# : PDK_top.v(102)

Поскольку подпрограммы PLI используют tf_nodeinfo, симуляция не удалась. Я пытался выяснить, как решить эту проблему, но не смог найти рекомендуемого способа заменить устаревший файл tf_nodeinfo.

Может ли кто-нибудь дать мне стратегию, которую я должен использовать, чтобы справиться с этой ситуацией? Доступны все исходные коды подпрограмм PLI.

Кроме того, мне очень любопытно, почему IEEE решил отказаться от tf_nodeinfo.


person user2756376    schedule 21.05.2015    source источник


Ответы (1)


PLI 1.0 устарел (согласно LRM, он существует с середины 1980-х годов), он устарел в IEEE Std 1364-2005 1.6 Устаревшие пункты:

Стандарт IEEE Std 1364-2005 объявляет устаревшими процедуры Verilog PLI TF и ​​ACC, которые содержались в предыдущих версиях этого стандарта. Эти подпрограммы были описаны в пунктах с 21 по 25, в приложении E и в приложении F. Текст этих пунктов и приложений был удален из этой версии стандарта. Текст этих устаревших пунктов и приложений можно найти в IEEE Std 1364-2001.

Я не смог найти никакого описания, почему он был удален из LRM. Лучшие предположения:

  • Возможно, старые подпрограммы tf_ и acc_ были несовместимы с SystemVerilog. В стандарте IEEE Std 1800-2005 не упоминаются подпрограммы tf_ и acc_, но есть подпрограммы vpi_. IEEE уже планировал объединить два стандарта (и сделал это в IEEE Std 1800-2009).
  • Или это может быть связано со значительно более низкой производительностью или дополнительными накладными расходами по сравнению с VPI. VPI был представлен в IEEE Std 1364-2001 (20, 26 и 27) и часто упоминается как PLI 2.0 (но LRM говорит: «Процедуры Verilog Procedural Interface, называемые подпрограммами VPI, являются третьим поколением PLI»). . VPI по-прежнему силен; у него все еще больше накладных расходов, чем на DPI, но возможности функций не полностью перекрываются.

Ваш выбор:

  • Используйте более старый симулятор (может работать на данный момент, но в какой-то момент вам потребуется обновить его)
  • Найдите другой симулятор, который по-прежнему поддерживает его, (но он может быть исключен из будущих версий)
  • Rewrite the functionality in:
    1. SystemVerilog IEEE Std 1800-2012
      • It is amazing what can be done with classes, multi-denominational queues & associative arrays, structs and interfaces)
    2. DPI (IEEE Std 1800-2012 35)
    3. VPI (IEEE Std 1800-2012 § 36)
      • The vpi_get_data/vpi_put_data might be the your tf_nodeinfo replacement, pending what the operation is doing with it.
person Greg    schedule 21.05.2015
comment
Ничего себе, это идеальный ответ и нечего добавить. Спасибо за быстрый ответ. Я склонен использовать DPI, но мне нужно пересмотреть стандарт DPI. Благодарю вас! - person user2756376; 22.05.2015
comment
@ user2756376, добро пожаловать в StackOverflow. Благодарность лучше всего давать голосованием/принятием ответа. Стандарт DPI описан в IEEE Std 1800-2012. § 35. В основном это дескриптор метода C. - person Greg; 22.05.2015
comment
В итоге я использовал VPI, а не DPI. Переписывание моей процедуры PLI было немного болезненным, потому что не было однозначного сопоставления PLI с VPI. Чтобы сохранить существующую программу PLI, я создал эквивалентные подпрограммы, используя VPI (например, tf_getp() -> my_tf_getp()). Как только вы поймете концепции, лежащие в основе VPI, я соглашусь, что VPI чище, чем PLI. - person user2756376; 10.06.2015