首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预定义UVC之间的信号共享策略

预定义UVC之间的信号共享策略
EN

Stack Overflow用户
提问于 2013-11-07 01:31:24
回答 2查看 3.2K关注 0票数 2

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

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

代码语言:javascript
复制
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连接。这意味着有两个接口需要连接到相同的abioready信号。

是否有一种方法将这些UVC连接到相同的DUT而不更改原始UVC?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 18:52:04

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

代码语言:javascript
复制
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可以与tran连接,因为它在接口中被定义为wire。通过使用assign语句,如果未来的接口将输出定义为wire以外的其他东西,则方向是显式的,并且是灵活的。

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-07 05:49:19

这是一个好东西,您的接口有wires的工作-这使他们易于捆绑在一起,并有多个驱动程序。您可以创建一个tie模块,该模块将三根电线折叠为一条。

代码语言:javascript
复制
module tie(inout .a(w), .b(w), .c(w));
   wire w;
endmodule

那么您的测试工作台看起来应该是:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19826342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档