У меня есть массив длины x. Выходными сигналами для данного тестового стенда будет каждое значение в массиве в соответствующем порядке от 0: x-1.
В частности, в моей проблеме массив - это коэффициенты фильтра, а тестовая среда - это импульсная характеристика. Тест должен быть самоконтролируемым, для чего потребуется последовательность с динамической длиной, так как коэффициенты будут меняться от теста к тесту.
Последовательность, которую я хотел бы, должна выглядеть примерно так:
always @(posedge clk) begin
assert_sequence : assert property (
(data_out == array_1[0])
|=> (data_out == array_1[1])
|=> (data_out == array_1[2])
|=> (data_out == array_1[3])
|=> (data_out == array_1[4])
|=> (data_out == 0) )
$info("Seen the sequence");
else
$error("Sequence was incorrect");
end
Можно ли это делать динамически? Я пробовал использовать цикл genvar for, но он выдает ошибки. Я искал на форумах и не нашел ничего, что соответствовало бы моим требованиям.
Возможно, что-то подобное могло дать правильный ответ?
always @(posedge clk) begin
assert_sequence : assert property (
(data_out == array1[0][0])
for(genvar i = 1; i < 5, i++) begin
|=> (data_out == array1[i])
end
|=> (data_out == 0) )
$info("Seen the sequence");
else
$error("Sequence was incorrect");
end
|=>
), вероятно, не означает то, что вы думаете. Вероятно, он не отвечает на этот вопрос, но, тем не менее, я думаю, вам следует использовать простой##1
, т.е.assert_sequence : assert property ( <some_trigger> |=> (data_out == array_1[0]) ##1 (data_out == array_1[1]) ##1 (data_out == array_1[2]) ...
- person Matthew Taylor   schedule 21.05.2020... ##1 (data_out == array_1[3]) || mask[3] ##1 ...
, и вы бы сделали все дополнительные элементы массива масок (которые не требуются для более короткого импульса ответ) 1 (т.е. ИСТИНА). Но я бы подумал, что выпишу эту проверку в SystemVerilog, а не в SVA. - person Matthew Taylor   schedule 21.05.2020