Если известно об использовании интерфейсов SystemVerilog на момент реализации, разделы 3.5 и 25 IEEE 1800-2012 может решить эту проблему.
Интерфейс представляет собой именованный набор цепей, поэтому, если все на пути соединяется с интерфейсом, добавление дополнительной сети к интерфейсу означает, что все экземпляры этого интерфейса получают дополнительный провод.
Добавление сигналов к интерфейсу позволяет модулям нижнего уровня мгновенно подключаться ко всему остальному (верхнему уровню) с помощью этой шины, без каких-либо дополнительных операций с портами для подключения после того, как интерфейс подключен через иерархию.
Интерфейсы и структуры обсуждались ранее.
Учебник Дулоса по интерфейсам.
Для более полного ответа я включаю пример, приведенный в 25.3.3 IEEE 1800, показывающий модули, подключенные через интерфейс:
// memMod and cpuMod can use any interface
module memMod (interface a, input logic clk);
...
endmodule
module cpuMod(interface b, input logic clk);
...
endmodule
interface simple_bus; // Define the interface
logic req, gnt;
logic [7:0] addr, data;
logic [1:0] mode;
logic start, rdy;
endinterface: simple_bus
module top;
logic clk = 0;
simple_bus sb_intf(); // Instantiate the interface
// Reference the sb_intf instance of the simple_bus
// interface from the generic interfaces of the
// memMod and cpuMod modules
memMod mem (.a(sb_intf), .clk(clk));
cpuMod cpu (.b(sb_intf), .clk(clk));
endmodule
Используя модпорты (Раздел 25.5 IEEE 1800), вы можете указать разделы master-slave интерфейса для определения направлений портов.
Как упомянул Тим, я избегаю этого, так как его очень сложно отлаживать. Я работал над одним проектом, где активно использовались интерфейсы. Связи были не один к одному, а распространялись повсюду по иерархии. Представьте, что запись в регистр происходит через LBUS, используя шину WiredOR или тройное состояние для обратного считывания. Инструменты, которые у нас были в то время, не позволяли увидеть, какой модуль управляет шиной. Поэтому, если он пошел X с нескольких дисков, это была игра в догадки о том, что его вызвало.
Мы использовали интерфейсы не только для стандартных протоколов, таких как LBUS, но и новые, которые изменялись на лету, что означало, что модули, которые не были исправлены для изменений протокола, портили шину. Использование интерфейсов значительно ускорило реализацию, поскольку дополнительный сигнал можно было быстро интегрировать. Стоимость отладки была почти невозможна, поскольку источник проблем в интерфейсе не мог быть отслежен.
person
Morgan
schedule
07.07.2014