Я использую блок синхронизации в моем интерфейсе для псевдонимов сигналов. Я хочу объединить некоторые из бит вместе, чтобы сформировать шину, а затем диск этой шины из моего драйвера. Так, например:Ускорение вывода при использовании блоков синхронизации
interface bus_intf (clk);
input logic clk;
logic[1:0] x_lsb;
logic[1:0] x_msb;
clocking driver_bus @(posedge clk)
default input #1step output #0;
output x_bus = {x_msb, x_lsb};
endclocking
endinterface
Теперь проблема с этим, в одном из моих утверждений, мне нужно прочитать bus_intf.driver_bus.x_bus. Как указано в руководстве SV, выходная переменная из блока синхронизации не должна считываться тестовым узлом, и если это так, то симулятор выплевывает ошибку (или предупреждение в моем случае).
Так я изменил интерфейс:
interface bus_intf (clk);
input logic clk;
logic[1:0] x_lsb;
logic[1:0] x_msb;
clocking driver_bus @(posedge clk)
default input #1step output #0;
inout x_bus = {x_msb, x_lsb};
endclocking
endinterface
Проблема теперь, в моей форме волны я вижу два сигнала создается - x_bus и x_bus__o. Я понимаю, почему Questasim сделал это - он должен отделить объявление inout, чтобы я мог просматривать обе версии. Однако проблема заключается в том, что мой тактовый диск задерживается на один такт! поэтому x_bus__o, который подключен к тестируемому устройству, является одним тактовым циклом позже, чем x_bus. Это воодушевляет меня, явным образом заявляя, что выходное отклонение равно # 0.
Любая идея, почему это происходит? Я что-то делаю неправильно или неправильно понял?