Я пытаюсь реализовать поддержку параметризованного интерфейса, как описано здесь . Я построил простой пример, но теперь я думаю, что parameterized interface
должно основываться на parameterized sequence_item
.
Папка из приведенной выше ссылки объясняет, как передавать параметризованный интерфейс через config_db, но не объясняет, каким образом я должен справиться с параметризацией элементов последовательности, которые должны быть параметризованы соответствующим интерфейсом.
То, что я спрашиваю, это: «я должен просто не параметризировать элементы seq и просто установить ширину их полей на максимальный размер, или мне нужно параметризовать их, и если да, то как мне это сделать?»
Как я понимаю, мне не нужно просто устанавливать seq_item
поля на максимальную длину, мне нужно переопределить базовый класс seq_item
для определенной параметризованной версии, как я делал с классом base_if
.
Я не совсем понимаю эту магию set_override, кроме set_type_override
, которая просто заставляет фабрику создавать определенные объекты дочерних классов вместо родительских. Но если я перенаправлю один тип первому драйверу, а другой тип - второму драйверу, он не будет работать.
Я думаю, что мне нужен какой-то override function
, который использует путь к отдельным классам переопределения, но я не знаю его (кроме переопределения экземпляра со страницы выше).
Поваренная книга тоже не дала мне решения.
например, у меня есть такой класс:
class my_driver extends uvm_driver(my_seq_item);
Если я хочу параметризовать интерфейс, мне нужно параметризовать my_seq_item, в этом случае я должен параметризовать my_driver для передачи параметров в my_seq_item # (), и я должен параметризовать все другие компоненты, которые используют my_seq_item. Я не верю, что я должен идти по этому пути, я думаю, что я должен создать дочерний параметризованный класс и использовать некоторую функцию переопределения для обновления всех классов, которые используют my_seq_item.