Есть ли способ утверждать, что все сигналы в проекте инициализируются по возрастанию тактовой частоты во время сброса?

Просто из потока тестера (без изменений в дизайне) есть ли быстрый способ утверждать, что все сигналы проекта инициализируются во время сброса?

В конструкции используется синхронный активный низкий сброс.

На переднем фронте сброса я хочу утверждать, что каждый сигнал в проекте не является буквой «U», без необходимости вызывать каждый сигнал или архитектуру.

Использование VHDL 2008, Modelsim 10.1c с HDL Designer.


person Community    schedule 17.10.2014    source источник
comment
Не могли бы вы привести пример кода, который касается вас? Неясно, беспокоит ли вас, что сброс не происходит должным образом, или вы хотите иметь неявный сброс.   -  person Bill Lynch    schedule 17.10.2014
comment
В VHDL спецификация проекта состоит из блоков проекта (включая блок проверки PSL — IEEE Std 1076-2008). Разработка иерархии проекта — это предварительный шаг к моделированию, а правила области действия и видимости ограничивают доступ к именованным объектам. Кроме того, нет способа ограничить область применения суффикса all конкретными именованными классами сущностей. Это означает, что на языке VHDL не существует способа проверки каждого сигнала в разработанном проекте с утверждением или объявлением PSL без его прямого указания. Я добавил тег modelsim, чтобы попытаться привлечь больше ответов на вопросы об инструментах.   -  person    schedule 18.10.2014


Ответы (1)


Вы можете адаптировать использование команды Modelsim when из этого ответа для поиска 'U' в любых сигналах после синхронного сброса выпущен. Поскольку он существует, он работает со скалярами и массивами, но не может проверять элементы записи.

Обратите внимание, что нарастающий фронт сброса не является моментом сброса сброса, поскольку вы используете синхронный сброс. Я бы заставил тест ждать первого спада тактового импульса при высоком уровне сброса, чтобы проверить «U». Это гарантирует, что вы увидите новое состояние сигналов при обновлении их драйверов после сброса. Выражение when будет выглядеть примерно так:

"clk'event and clk = '0' and reset = '1' and $sig = [string repeat U [string length [examine $sig]]]"

Другим вариантом было бы создать в тестовом стенде дозорный сигнал, который оценивается как true при сбросе сброса, и проверить его в выражении when:

signal reset_inactive : boolean;

process(clk) is
begin
  if rising_edge(clk) then
    if reset = '1' then
      reset_inactive <= true;
    else
      reset_inactive <= false;
    end if;
  end if;
end process;

...
When expression:
"reset_inactive'event and reset_inactive = true and $sig = ..."

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

person Kevin Thibedeau    schedule 17.10.2014