英特尔 Quartus Prime Pro Edition用户指南: 设计建议

ID 683082
日期 8/03/2023
Public
文档目录

1.8. HDL代码中的跨模块引用(XMR)

跨模块引用(Cross Module Referencing (XMR),也称为分层引用,默认情况下是使能的。
它是Verilog、SystemVerilog和VHDL中内置的一种机制,用于在任何模块中全局引用层次结构中的网路,这意味着无需通过端口您就可以直接引用不同模块中的特定模块的任何网络(无论层次结构任何)。因此,XMR可以是一个向下引用或者向上引用。
注: XMR也可以用于混合语言设计。

您可以使用XMR从不同层次结构的网路进行读取或写入。XMR对调试和验证很有帮助,例如:

  • 覆盖或强制任何信号。关于更多信息,请参考在HDL代码中使用force语句
  • 为功能覆盖率编写覆盖点(cover point)。
  • 从整个设计的任何地方获取任何信号。

考虑以下在模块a的实例top中的层次结构:

module a  
  net x  
  instance p of module b   
    net x  
    instance m of module d  
      net x  
  instance q of module c  
    net x  
    instance n of module e   
      net x  
  instance r of module b  
     net x  
     instance m of module d  
       net x 

在以上情况中,所有模块都包含一个名为x的网络。通过使用基于完整路径的XMR,您可以在整个层次结构中全局引用每个x网络,如下所示:

  • top.x
  • top.p.x
  • top.p.m.x
  • top.q.x
  • top.q.n.x
  • top.r.x
  • top.r.m

XMR首先在当前模块内进行搜索。然后,它通过子实例逐级向下进行层次搜索。如果XMR未被解析,那么它将在层次结构中向上一级(父模块)搜索并逐级向下进行搜索。它会继续在层次结构中进一步搜索,直到解析为止。为了避免出现意外行为,英特尔建议尽可能使用层次结构路径。

XMR用例示例

从较低模块到较高模块的信号的XMR

在以下示例中,sub模块中的信号d被赋值为top模块的值a

module top (input a, input b, output c, output d); 
  sub inst1 (.a(a), .b(b), .c(c), .d(d));
endmodule

module sub (input a, input b, output c, output d); 
  assign c = a & b;
  assign d = top.a;
endmodule

从较高模块到较低模块的信号的XMR

在以下示例中,给定top模块中的完整路径,sub模块的值a分配给输出值d

module top (input a, input b, output c, output d);
  sub inst1 (.a(a), .b(b), .c(c));
  assign d = inst1.a;
endmodule
module sub (input a, input b, output c);
  assign c = a & b;
endmodule

generate模块中的信号的XMR

考虑以下带有generate模块的示例,其中您将值写入到顶层模块的temp,并从top模块读取out2值:

module top (input [3:0] in1, in2, input clk, output [3:0] out1, out2); 
  generate
    begin:blk1 sub inst (in1, clk, out1, temp); 
  end:blk1
  endgenerate 

//XMR read
assign out2 = top.blk1.inst.temp;
endmodule

always模块内部分的XMR

考虑以下always_comb构造中的信号的XMR的示例,其中top模块中的输出值d是从 sub模块值a进行分配的:

module top (input logic a, input logic b, output logic c, output logic d);
  sub inst1 (.a(a), .b(b), .c(c));
  always_comb d = inst1.a;

endmodule

module sub (input logic a, input logic b, output logic c);
  assign c = b & a;
endmodule

XMR的限制

以下是英特尔Quartus Prime软件中的XMR的一些限制:

  • XMR必须在同一设计分区内。例如,如果有分区A和分区B,那么在分区B中不能有任何对分区A中的内容进行XMR引用,反之亦然。
    注: 对同一分区的要求适用于在一个封装中指定的,并能够在任何模块中使用的全局信号。
  • 不支持多驱动网络。因此,您不能使用XMR来驱动一个已经由另一个信号驱动的网络。
  • 您只能在Verilog、SystemVerilog和VHDL中使用XMR。它不适用Text Design File (TDF)和Block Design File (BDF)。
    注: 英特尔不建议在SystemVerilog接口上使用XMR,因为它们容易出现错误。
  • 您不能使用XMR来引用 Intel® FPGA IP core内部的信号,或者在综合期间自动创建的Signal Tap分区内的信号。