2015-12-02 3 views
0

я следующее свойство:SVA Повторение непоследовательных Операция Отборочные события

property p; 
    @(posedge clk) a |=> b[=2] ##1 c; 
endproperty 

Это говорит нам, что если a утверждается, начните со следующего clk, b следует утверждать, не последовательно два раза с последующим по c утверждается в любое время после последнего b.

Мой вопрос в том, что если c утверждается между первым b и вторым b. Должно ли утверждение терпеть неудачу немедленно или продолжаться? В некоторых справочниках говорится, что это должно потерпеть неудачу, но я в этом сомневаюсь. Каково ожидаемое поведение?

ответ

3

[= или непоследовательный оператор повторения аналогичен Гото повторению, но выражение не должно быть истинным в тактовом цикле, прежде чем c верно.

Скажем, a утверждается. Условие импликации : удовлетворено и далее оценивается утверждение.

После b не проверяется два раза, независимо от того, чтоc есть. После того, как b является , установлено, что для двух непереходных тактовых краев, после этогоc проверяется после 1-тактного цикла (из-за ##1).

Если c является утверждал и -де-утверждал когда b является проверяется на 2 раза, то, что переключение является не считается. Что из c считается после 2 утверждения b.

После шнапс должен дать четкое представление:

Passing оснастки:

Pass

Сбой оснастки:

Fail

Здесь, несмотря на то, был глюк в c , утверждение не прошло.

Для получения более подробной информации обратитесь к A Practical Guide for SystemVerilog Assertions pdf. Doulos tutorial также является хорошим.

+0

Он также работает для 'goto repetition' (я имел в виду, когда' b' проверяется два раза, мы можем игнорировать 'c', т.е. будет ли эта последовательность терпеть неудачу:' a! Bbc! C! Bbc' if мы используем либо 'goto repetition', либо' un-последовательное повторение'? – AldoT

+0

Не смотрите 'c', когда проверяется' b'. Для указанной последовательности 'c' обнаруживается после проверки на' b', два Таким образом, ни один из двух не потерпит неудачу, оба будут ** проходить **. Но если у вас есть что-то вроде 'a! bb! bb! bc', то * goto повторение * будет терпеть неудачу, но * не последовательное повторение * Пройдет. И да, это относится и к повторению goto. – sharvil111

+0

Хорошо, теперь я понимаю и согласен с тобой. Меня просто смутило заявление в приведенной вами ссылке: https://www.doulos.com/knowhow/ sysverilog/tutorial/assertions/где в аналогичном свойстве говорится: «Это означает, что за a следует любое количество часов **, где c is false **, а b истинно между 1 и 3 раза, последний раз является часами до того, как c истинно. 'Они делают неправильный оператор здесь (требуется, чтобы c было false, когда b проверяется)? – AldoT

0

Короче говоря, да, это пройдет. Независимо от того, где c утверждается, после наблюдения двух «b», он будет ждать c == 1. Итак, если c был 1 с самого начала и никогда не доходит до нуля, он тоже пройдет.

Еще один момент, чтобы сделать это, когда это утверждение действительно потерпит неудачу. Он пройдет, когда будет утверждён c, но если нет, он будет продолжать работать до конца теста! Вы увидите сбой только в конце моделирования.