Что считается недопустимой иерархической ссылкой для виртуального интерфейса? - PullRequest
0 голосов
/ 11 февраля 2019

IEEE 1800-2017 LRM сообщает в разделе 25.9 Виртуальные интерфейсы , что:

Хотя интерфейс может содержать иерархические ссылки на объекты вне его телаили порты, которые ссылаются на другие интерфейсы, запрещается использовать интерфейс, содержащий эти ссылки в объявлении виртуального интерфейса.

Является ли следующий пример такой запрещенной иерархической ссылки?

interface some_other_intf();
  bit some_signal;
endinterface


interface some_intf();

  some_other_intf intf();

  task foo();
    intf.some_signal <= 0;
  endtask

endinterface


virtual some_intf some_vif;

У меня есть инструмент, который жалуется на строку, содержащую intf.some_signal <= 0.Хотя intf.some_signal является иерархической ссылкой, это относительная ссылка, поэтому я не понимаю, почему это было бы запрещено.

intf является частью тела интерфейса.Я не уверен, как интерпретировать порты , которые ссылаются на другие интерфейсы часть.

1 Ответ

0 голосов
/ 11 февраля 2019

Вот пример порта, который ссылается на другой интерфейс

interface some_other_intf();
  bit some_signal;
  parameter T = int;
endinterface

interface some_intf(some_other_interface intf);    
  task foo();
    intf.some_signal <= 0;
  endtask
typefef intf.T myT;
myT another_signal;
endinterface
virtual some_intf some_vif;

Проблема возникает со ссылкой на some_vif.another_signal Его тип может меняться в зависимости от того, какая параметризация T подключена к intf.

Для большинства случаев использования это не проблема, но комитет SystemVerilog никогда не тратил время на выяснение конкретных случаев, которые могли быть разрешены;только что сделал широкий запрет.

...