2014-01-09 2 views
2

Я проверяю часть конструкции, которая генерирует импульсы с точно установленными краями. У меня есть базовая поведенческая модель, которая производит результат, который аналогичен, но не совсем такой же, как дизайн. Различия между ними меньше точности, необходимой для дизайна, поэтому моя модель достаточно хороша. Проблема заключается в следующем: как мне провести сравнение между этими двумя сигналами?Как сравнить два сигнала, края которых находятся почти в одном месте?

Я пробовал:

assert(out1 == out1_behav); 

Но это не удается, так как оба сигнала имеют ребра, которые происходят 1ps друг от друга. Конструкция требует только того, чтобы края были размещены с точностью 100ps, поэтому я хочу пройти в этой ситуации.

Я думал об использовании блока с $delay() срочными проверками, однако это вызывает у меня другие проблемы, так как мне нужно запускать с +no_timing_checks, чтобы мои модели барабанов не проваливались в этом RTL-симе.

Есть ли простой способ проверить, что эти края «почти» одинаковы?

+0

Если можно найти относительную разницу и вместо этого проверить абсолютное. Вы можете округлить относительную ценность до необходимой точности. Что-то вроде этого: 'out1 - out1_behav/out1' – Nicolai

ответ

3

С запросом на проектирование для сигналов, которые должны совпадать в пределах 100ps, вы можете добавить логику сравнения. Задержка перехода 100ps будет действовать как фильтр.

bit match; 
assign #100ps match = (out1 == out1_behav); 
always @* 
    assert #0 (match==1); 

Verilog имеет различные способы назначения задержки: переход и транспорт. Задержки перехода управляют временем нарастания, падения и неопределенного/высокочастотного времени. Они могут действовать как фильтр, если сигнал управления дает импульс меньше, чем задержка. Транспортные задержки всегда будут следовать за ведущими сигналами со сдвигом во времени. Когда задержки будут большими, переход и транспорт будут выглядеть одинаково.

assign #delay transition = driver; // Transition delay 
always @(rhs) transport <= #dealy driver; // Transport delay 

пример: http://www.edaplayground.com/s/6/878, нажмите кнопку Выполнить, чтобы увидеть форму сигнала.

+0

Я не понимаю, как это будет работать. Можете ли вы немного расширить его? Похоже, что совпадение будет 0 100ps после сравнения, которое приведет к отказу утверждения. Я все равно попробую. – nguthrie

+0

@nguthrie, я обновил свой ответ, объяснив, как задержка перехода может использоваться как фильтр. – Greg

+0

Вы узнаете что-то новое каждый день. Благодаря! – nguthrie

1

Если вы используете ModelSim/Квесту, вы все еще можете использовать + notimingchecks, а затем использовать команду TCL tchech_set для включения отдельных проверок синхронизации, как $ fullskew В противном случае вам придется написать поведенческий блок, который записывает временные метки от восходящего и спадающего краев двух сигналов и проверяет абсолютное значение разности.

+0

У меня нет моделей, но изучите, возможно ли это с помощью моего инструмента. – nguthrie

Смежные вопросы