Я хочу сказать: ", если происходит последовательность A
, тогда последовательность B
происходит в этой последовательности". Как я могу это сделать?Если последовательность возникает, то внутри нее возникают подпоследовательности в утверждениях System-Verilog
Я бы думал, что я мог бы использовать утверждение:
assert property (@(posedge clk) (A |-> (B within A));
, но это не похоже на работу для моего примера.
Я прочитал, что:
Линейная последовательность называется сопрягать по конечному интервалу последовательных часов клещами при условии, что первое логическое выражение истинно в первом такте, второе булево выражение на true на втором такте и так далее, вплоть до последнего булевского выражения, оценивающего значение true при последнем такте.
но я подозреваю, что циферблат часов перешел в другую сторону от |->
последних часов, когда я хочу, чтобы это было первым.
Мой конкретный пример является аккумулятором, который я ожидал переполнения, если добавить достаточное количество положительных чисел, так что я хочу A = (input == 1)[*MAX_SIZE]
и B = (output == 0)
, поэтому здесь B
последовательность длиной 1, я не знаю, если это вызывает проблемы.
Я очень новичок в system-verilog, поэтому возможно, что это какая-то другая часть моего кода, которая идет не так, но я не видел этот пример нигде.
Что делать, если 'B внутри A' завершается до того, как' A' будет завершено? Я имею в виду, что 'B внутри A' = B должен находиться внутри A и, следовательно, он будет завершен, как только' B' переходит от '1' к' 0', а 'A' все еще активен, но еще не завершен. –
Тогда вы не удовлетворили часть 'inside A', и последовательность пока не будет соответствовать. –
Да, это правда, потому что согласно LRM 'B внутри A' означает' (1 [* 0: $] ## 1 B ## 1 1 [* 0: $]) пересекает A'. –