I'm trying to figure out how to connect multiple UVCs (UVM Verification Components) to the same DUT where the UVC's do not share an interface but do connect to the same signals on the DUT.
The DUT that can operate on different protocols on common signals and can switch between protocols after a receiving a specific sequence. Each protocol was developed independently into is its own UVC; lets call them low-speed and high-speed. Assume the interfaces and DUT are the follows:
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
Because the UVC's were not designed considering the other protocols, the low-speed driver/monitor can only connect with lowspeed_if
and the high-speed driver/monitor can only connect with highspeed_if
. This means there are two interfaces that need to connect to the same a
, b
, io
, and ready
signals.
Is there a way connect these UVCs to the same DUT without changing the original UVCs?