【发布时间】:2015-04-30 23:21:26
【问题描述】:
我有点困惑,从标准的角度来看,从接口读取参数是否合法。
像这样
interface foo_if #(parameter BAR=5)();
...
logic [BAR-1:0] data;
modport slave(input data, ...);
endinterface
module foobar(foo_if.slave s);
...
logic [s.BAR-1:0] bar;
logic [$bits(s.data)-1:0] m_data;
...
endmodule
我有一个问题,主要的综合工具供应商甚至无法处理这个问题。他们在帮助消息中明确告诉您,不允许将 $bits() 与接口成员一起使用。
但是,其他供应商的模拟工具可以完美地处理这个问题,就像我拥有的另一个综合工具一样。
然而,在 S. Sutherland 等人的 SystemVerilog for Design 中。据说:
因为在设计过程中可能还没有完全解决设计层次结构 详细说明,分配参数、specparam 或 localparam 常量 一个从其他地方派生的值 设计层次结构
但是,如果不允许我使用接口中的参数,那真的会削弱接口的实用性。
另一方面,SystemVerilog 1800-2012 标准规定:
25.10 访问接口对象
对接口中声明的对象的访问应由以下人员提供 分层名称引用,无论接口是否 也可以通过端口连接或通过虚拟 接口,并且无论是否存在任何声明的 modports 那个界面。 modport 可用于限制对对象的访问 在通过端口连接引用的接口中声明 或通过显式列出可访问对象的虚拟接口 模组端口。但是,不允许列出的对象 modport 应保持可访问性。
【问题讨论】:
-
Xilinx Vivado 不支持参数访问,Altera Quartus 也不支持。他们确实支持
$bits(interface.port)解决方法...但是接口仍然受到限制,因为 FPGA 工具不太支持 modport。