※ testbench.sv |
`timescale 1ns/1ns `include "uvm_macros.svh" `include "pipe_pkg.sv" module tb_top; import uvm_pkg::*; import pipe_pkg::*; // Clock, Reset generation reg r_rstn; reg r_clk = 0; always #10 r_clk = ~r_clk; initial begin #10 r_rstn = 0; #30 r_rstn = 1; end // Instantiate DUT pipe dut ( .i_clk(r_clk), .i_rstn(r_rstn), .i_en(), .i_cf(), .i_data0(), .i_data1(), .o_data0(), .o_data1() ); // Instantiate interface module `include "intf_insts.sv" initial begin // Set interface into uvm_config_db uvm_config_db#(virtual pipe_if)::set(null, "uvm_test_top.tb.pipe_env.pipe_agent*", "vif", pipe_intf); uvm_config_db#(virtual pipe_if)::set(null, "uvm_test_top.tb.vseqr*", "vif", pipe_intf); run_test("pipe_basic_test_c"); end // Dump waves initial begin $dumpfile("dump.vcd"); $dumpvars(0, tb_top); end //initial begin // #1us $finish; //end endmodule |
※ intf_insts.sv |
pipe_if pipe_intf(); assign pipe_intf.CLK = r_clk; assign pipe_intf.RSTN = r_rstn; assign dut.i_en = pipe_intf.I_ENABLE; assign dut.i_cf = pipe_intf.I_CF; assign dut.i_data0 = pipe_intf.I_DATA_IN0; assign dut.i_data1 = pipe_intf.I_DATA_IN1; assign pipe_intf.O_DATA_OUT0 = dut.o_data0; assign pipe_intf.O_DATA_OUT1 = dut.o_data1; reg r_o_en; reg [1:0] r_o_cf; always @(posedge r_clk) begin r_o_en <= pipe_intf.I_ENABLE; r_o_cf <= pipe_intf.I_CF; end assign pipe_intf.O_ENABLE = r_o_en; assign pipe_intf.O_CF = r_o_cf; |