Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

OVM Configuration and Virtual Interface Extensions(その2)


UVMでも基本的には、同じ。


OVMにおけるConfigurationは、
    function void set_config_int    (string inst_name, string field_name, ovm_bitstream_t value);
    function void set_config_string (string inst_name, string field_name, string value);
    function void set_config_object (string inst_name, string field_name, ovm_object value, bit clone=1);
    function bit get_config_int     (string field_name, inout ovm_bitstream_t value);
    function bit get_config_string  (string field_name, inout string value);
    function bit get_config_object  (string field_name, inout ovm_object value, input bit clone=1);
によって行うことができます。

それから、ovm_containerクラスを使います。
    class ovm_container #( type T = int ) extends ovm_object;
      typedef ovm_container #( T ) this_t;

      T t;

      static function void set_value_in_global_config( string config_id , T t );
        …
      endfunction

      static function T get_value_from_config( ovm_component c , string config_id );
       …
      endfunction
    endclass

ovm_containerクラスの関数は、共にクラス関数なのね!
だから、Page.5の例では、'''set_value_in_global_configクラスを使っている。。。

    module top();
      import ovm_pkg::*;
      import test_pkg::*;
      import ovm_container_pkg::*;

      typedef ovm_container #( virtual ready_valid_if ) container_t;
      ready_valid_if m_ready_valid_if1( clk );
      ready_valid_if m_ready_valid_if2( clk );

      // instantiate the DUT
      // connect the interfaces to the DUT

      initial begin
        // tell the test about the virtual interfaces
        container_t::set_value_in_global_config(“READY_VALID_IF_1” , m_ready_valid_if1);
        container_t::set_value_in_global_config(“READY_VALID_IF_2” , m_ready_valid_if2);

        // start the test
        run_test(“test”);
      end
    endmodule

検証、Verification、SystemVerilog、OVM、Open Verification Methodology