Сравнение параллельных массивов SVA

Я новичок в systemverilog и SVA, и я пытаюсь создать утверждение для генератора prbs, сравнивая любой заданный массив (logic [6:0]) с тем же массивом через 127 тактов после. Проблема в том, что операторы, которые я нашел полезными для сравнения массивов, не допускают параллелизма, а операторы, разрешающие параллелизм, работают только с битами.

Попытка проиллюстрировать то, что я хотел сделать, будет примерно такой:

logic [6:0] seq
assert property (@posedge clock) (seq === #127 seq));

person Pedro Martins    schedule 25.08.2016    source источник


Ответы (1)


Что-то вроде:

property DLY;
  logic MEM [6:0];
  ( 1'b1, MEM = seq ) |-> ##127 (seq_OUT == MEM);
endproperty

DLY_CHK : assert property (@(posedge clock) DLY);

должен сделать свое дело. При этом используются конструкции локальная переменная и ( , ) для назначения локальной переменной (MEM). Затем это проверяется через 127 тактов.

С конструкцией ( , ), если левая часть запятой истинна (что в моем примере всегда так), то выполняется правая часть запятой. Возможно, вы захотите изменить 1'b1 на какой-то управляющий сигнал. Справа от запятой можно указать одно из трех:

  • присвоение локальной переменной
  • приращение или уменьшение локальной переменной
  • вызов задачи, метода задачи, функции void, метода функции void или системной задачи

См. Разделы 16.10 и 16.11 документа IEEE 1800-2012.

person Matthew Taylor    schedule 25.08.2016