#system-verilog #uvm
#system-verilog #uvm
Вопрос:
Я расширил использование my virtual task body()
в классе sequence, и в объявлении родительского класса body()
я объявил переменную. Однако, при использовании ее в расширенном классе’ body()
, я столкнулся с ошибкой компиляции Identifier 'q' has not been declared yet.
Вот пример:
// Inside a base sequence class
virtual task body();
byte q [$];
...
.. // rest of the code
.
endtask : body
// Inside extended sequence class
virtual task body();
super.body();
q.push_back('hFF); // X Compilation error: Identifier 'q' has not been declared yet.
...
.. // rest of the code
.
endtask : body
Я не вижу никакой логической причины, по которой переменная не была замечена.
Я могу, конечно, объявить ее вне области задачи как члена класса, но я хочу исправить эти незначительные пробелы в моем понимании SV.
Пожалуйста, любая помощь? Заранее спасибо.
Ответ №1:
q
является локальной для body
задачи в суперклассе. body
Задача в производном классе — это другая задача и, следовательно, другая область видимости. Вы не сможете увидеть ее из body
задачи в производном классе, так же как вы не смогли бы увидеть ее из любой другой задачи.
Комментарии:
1. Хорошо, если я правильно понял: вызов
super.body()
не просто копирует / вставляет код предыдущей реализации, но выполняет родительский кодbody
как другую задачу, в которой его переменные выделяются и освобождаются только во времяsuper.body()
выполнения?2. Правильно. Наследование класса касается только членов класса.
q
является переменной с автоматическим временем жизни,