получить доступ к двум экземплярам с одинаковым кодом, не повторяя его для каждого - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть два экземпляра с именами (inst_1 и inst_2), и я хочу сделать операцию на обоих из них с одинаковым кодом без повторения кода для каждого экземпляра.

Так, как я могу сделать (для цикла илиесли условие) или что-нибудь для этого?Экземпляр_1 отмечен желтым на следующей фотографии.Я хочу изменить его на instance_2 без повторения кода.

вот изображение для моего кода enter image description here

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Есть несколько способов достичь желаемого, хотя ни один из них не является хорошим.Verilog не предназначен для этого.

1) используйте то, что предложил dave_59: создайте огромный макрос и передайте имя экземпляра в качестве параметра.Это будет работать, но у вас будут проблемы с отладкой этого монстра.

`define MONSTER(INST_NAME) ... tb.INST_NAME.....\
    ...tb.INST_NAME...\
    ...

module top1;
`MONSTER(inst_1)
endmodule
module top2;
`MONSTER(inst_2)
endmodule

2) определите использование этого фрагмента кода в операторе включения, определите имя экземпляра как макрос:

module top1;
`define INSTANCE inst_1
`include "monster_piece.v"
endmodule
module top2;
`define INSTANCE inst_2
`include "monster_piece.v"
endmodule

где monster_piece.v содержит ваш код с `INSTANCE там.Этот метод имеет проблемы с обслуживанием, а некоторые инструменты могут иметь проблемы с отладкой.

3) лучший способ - организовать тестовый стенд по-разному:

  • использовать генерацию блоков для создания экземпляров ваших экземпляров в tb, затем вы можете использовать их в своем коде.
  • вы можете переписать ваш TB, чтобы использовать виртуальные интерфейсы или динамические классы вместо экземпляров.
0 голосов
/ 10 декабря 2018

Вы не можете перебирать имена идентификаторов в Verilog / SystemVerilog.Если бы вы использовали цикл generate-for для создания экземпляров двух экземпляров, вы могли бы использовать аналогичный generate-for с этим кодом.

Лучший вариант, который я могу придумать, это превратить ваш код в гигантский макрос, а затем вызывать макрос для каждого экземпляра.

Существуют способы использования интерфейса PLI / VPI C для доступаидентификаторы при поиске строк, но это слишком сложно, чтобы попасть сюда.

...