Thursday, April 25, 2019

[Bài 12][ UVM ] Cấu trúc cơ bản của một môi trường UVM

1. Transaction.

class my_transaction extends uvm_sequence_item;
`uvm_object_utils(my_transaction)

[Khai báo các biến giao tiếp với DUT ở đây]

[Khai báo các constraint cho các biến bên trên ở đây]

function new (string name = "");
    super.new(name);
  endfunction

endclass: my_transaction

Như vậy với transaction ta chỉ cần khai báo các biến giao tiếp với DUT và contrainst của nó.

2. Sequence.

class my_sequence extends uvm_sequence#(my_transaction);

  `uvm_object_utils(my_sequence)
`uvm_declare_p_sequencer (my_sequencer)


  function new (string name = "");
    super.new(name);
  endfunction
task pre_body ();
[Code kiểm tra tín hiệu cờ]
endtask

  task body;
[Tạo tín hiệu random ở đây]
  endtask: body

task post_body();
[Code kiểm tra tín hiệu cờ sau “task body”]
endtask

endclass: my_sequence

Với bộ sequence ta cần code trong task body, pre_body, post_body.
Trong đó task pre_body và post_body là không bắt buộc. Thậm chí nếu bạn sử dụng macros uvm_do* trong “task body” thì “pre_body” và “post_body” là không cần thiết.  Trong thực tế người verify sẽ làm việc nhiều với sequence. Nó thật ra là công việc tạo test pattern trong verify.

3. Driver.

class my_driver extends uvm_driver #(my_transaction);

  `uvm_component_utils(my_driver)

  virtual dut_if dut_vif;

  function new(string name, uvm_component parent);
    super.new(name, parent);
  endfunction

  function void build_phase(uvm_phase phase);
[Add code của bạn ở đây]
  endfunction 

  task run_phase(uvm_phase phase);
[Add code của bạn ở đây]
  endtask

endclass: my_driver

4. Monitor.

class my_monitor extends uvm_monitor;
   `uvm_component_utils (my_monitor)

   virtual dut_if   vif;

   uvm_analysis_port #(my_data)   mon_analysis_port;

   function new (string name, uvm_component parent= null);
      super.new (name, parent);
   endfunction


   virtual function void build_phase (uvm_phase phase);
     [Thêm code tại đây]
   endfunction

   virtual task run_phase (uvm_phase phase);
      [Thêm code tại đây]
   endtask

endclass

5. Scoreboard.

class my_scoreboard extends uvm_scoreboard;
  `uvm_component_utils (my_scoreboard)

  function new (string name = "my_scoreboard", uvm_component parent);
    super.new (name, parent);
  endfunction

  uvm_analysis_imp #(apb_pkt, my_scoreboard) apb_export;

  function void build_phase (uvm_phase phase);
[Thêm code bạn ở đây]
  endfunction

  virtual function void write (apb_pkt data);
[In dữ liệu ra để quan sát]
  endfunction

  virtual task run_phase (uvm_phase phase);
    [Nhận data và gòi hàm so sánh kết quả]
  endtask

  virtual function void check_phase (uvm_phase phase);
    [So sánh kết quả output từ DUT và kết quả dự đoán]
  endfunction
endclass


6. Agent.

class my_agent extends uvm_agent;
      `uvm_component_utils (my_agent)

      my_driver                  m_drv0;
      my_monitor                 m_mon0;
      uvm_sequencer #(my_data)   m_seqr0;
      agent_cfg                  m_agt_cfg;

      function new (string name = "my_agent", uvm_component parent=null);
         super.new (name, parent);
      endfunction

      virtual function void build_phase (uvm_phase phase);
[Thêm code tại đây]
      endfunction



      virtual function void connect_phase (uvm_phase phase);
      [Thêm code tại đây để connect 3 thành phần driver, sequencer, monitor lại với nhau]
      endfunction
   endclass

1 comment:

  1. Công ty xử lý chất thải công nghiệp chuyên vận chuyển chất thải rắn công nghiệp thông thường cho các doanh nghiệp tại tphcm và thu mua phế liệu công nghiệp

    CÔNG TY MÔI TRƯỜNG THÁI AN

    Địa Chỉ: 279 Vườn Lài, Phường An Phú Đông, Quận 12, TP. Hồ Chí Minh (TP.HCM)

    Điện Thoại: 0945 667 887

    Email: xulychatthaithaian@gmail.com

    Web: https://chatthaicongnghiep.org/

    google maps: https://goo.gl/maps/Lg2prKjXrQPq71TMA

    #chatthaicongnghiep.org

    #chatthaicongnghiep

    ReplyDelete

Cách tính BW và latency trong 1 hệ thống SoC sử dụng chuẩn giao tiếp AXI protocol

Tác giả:  TrongTran Ngày:  31/12/2019 Nếu bạn nào đang làm về verification cho system performance (ST) thì bài này sẽ bổ ích cho bạn. Ngày ...