2

我试图弄清楚如何将多个 UVC(UVM 验证组件)连接到同一个 DUT,其中 UVC 不共享接口但连接到 DUT 上的相同信号。

DUT 可以对公共信号在不同协议上运行,并且可以在接收到特定序列后在协议之间切换。每个协议都独立开发成自己的UVC;让我们称它们为低速和高速。假设接口和 DUT 如下:

interface lowspeed_if( input bit clock, reset );
  logic       a;
  logic       b;
  logic       c;
  logic [7:0] io_drv;  wire  [7:0] io = io_drv;
                       wire        ready;
  initial {a,b,c,io_drv} = 'z;
endinterface : lowspeed_if

interface highspeed_if( input bit clock, clk2, reset );
  logic       a;
  logic       b_drv;   wire        b = b_drv;
  logic [7:0] io_drv;  wire  [7:0] io = io_drv;
                       wire        ready;
  initial {a,b_drv,io_drv} = 'z;
endinterface : highspeed_if

module device_to_test(input a, inout b, input c, inout [7:0] io, output ready);
  /* RTL */
endmodule : device

因为 UVC 的设计没有考虑其他协议,所以低速驱动器/监视器只能连接,lowspeed_if高速驱动器/监视器只能连接highspeed_if. 这意味着有两个接口需要连接到相同a的 、bioready信号。

有没有办法在不改变原始 UVC 的情况下将这些 UVC 连接到同一个 DUT?

4

2 回答 2

1

在顶层将连接信号定义为导线。对仅驱动 DUT 的信号使用assign语句。用于tran双向。对于仅监控 DUT 的信号,使用assign语句

bit clock,clk2,reset;
wire a,b,c;
wire ready;
wire [7:0] io;

lowspeed_if  ls_if(.*);
highspeed_if hs_if(.*);
device dut( .* );

assign {a,b,c} = {ls_if.a, ls_if.b, ls_if.c};
tran link_io_ls[7:0](io, ls_if.io);
assign ls_if.ready = ready;

assign a = hs_if.a;
tran link_b_hs(b,hs_if.b);
tran link_io_hs[7:0](io, hs_if.io);
assign hs_if.ready = ready;

ready可以与 a 连接,tran因为它在接口中被定义为 a wire。如果将来的接口将输出定义为 then 以外的内容,则使用该assign语句可以明确方向并且是灵活的wire


我发现assign {a,a} = {ls_if.a,hs_if.a};也适用于分配驱动程序。

于 2013-11-07T18:52:04.053 回答
0

您的接口必须使用它是一件好事wires- 这使得将它们连接在一起并拥有多个驱动程序变得容易。您可以创建一个连接模块,将三根线合为一根。

module tie(inout .a(w), .b(w), .c(w));
   wire w;
endmodule

然后您的测试台将如下所示:

module top;

  wire a,b;
  wire [7:0] io;
  wire clk, clk2, reset, ready

  lowspeed_if  ls_if(clk, reset);
  highspeed_if hs_if(clk,clk2,reset);

  tie tie_a(ls_if.a, hs_if.a, a);
  tie tie_b(ls_if.b, hs_if.b, b);
  tie tie_rdy(ls_if.ready, hs_if.ready, ready);
  tie tie_a[7:0](ls_if.io, hs_if.io, io);

  device_to_test DUT(a, b, ls_if.c, io, ready);

endmodule
于 2013-11-07T05:49:19.100 回答