Monitor Modülü

Gün 7: Bitirme Projesi - Bölüm 2 | DUT çıkışlarını izleyen ve paketleyen modül

Kaynak Kod

// =============================================================================
// GUN 7 - Konu 1: Monitor - Arayuzdeki Hareketleri Izleyen Modul
// =============================================================================

class ALU_Monitor;
  virtual alu_if.monitor vif;
  mailbox #(ALU_Transaction) mon2scb;
  int monitored_count = 0;

  function new(virtual alu_if.monitor vif, mailbox #(ALU_Transaction) mbx);
    this.vif     = vif;
    this.mon2scb = mbx;
  endfunction

  task run();
    ALU_Transaction txn;
    $display("[Monitor] Baslatildi - DUT cikislari izleniyor");

    forever begin
      @(vif.mon_cb);
      if (vif.mon_cb.out_valid) begin
        txn = new();
        txn.operand_a = vif.mon_cb.operand_a;
        txn.operand_b = vif.mon_cb.operand_b;
        txn.opcode    = ALU_Transaction::opcode_e'(vif.mon_cb.opcode);
        txn.result    = vif.mon_cb.result;
        txn.flags     = vif.mon_cb.flags;
        txn.out_valid = 1;
        
        mon2scb.put(txn);
        monitored_count++;
      end
    end
  endtask
endclass