title: UVM ports: put,get,export, analysis
body: <p>I am trying to master in UVM, and completely lost in UVM ports. Please help better understand the ports.</p>
  
  <p>So as I understood there are 3 main types of ports</p>
  
  <ol>
  <li>Put-> get    : producer put data and consumer gets the data. This is blocking statement.</li>
  <li>Put-> Export->Imp</li>
  <li>Analysis->Subscriber : producer transmit the data and other subscribers gets it. This is non-blocking statement.</li>
  </ol>
  
  <p>Also there are TLM_FIFOs  which allows to buffer the transaction for later usage. It has 2 types:  <code>uvm_tlm_fifo</code> and <code>uvm_tlm_analysis_fifo</code>.</p>
  
  <p>And my questions are:</p>
  
  <ol>
  <li>Is my understanding right?</li>
  <li>What is the difference between get and export?</li>
  <li>What is the difference between <code>uvm_tlm_fifo</code> and <code>uvm_tlm_analysis_fifo</code>?</li>
  </ol>
  
  <p>Thanks<br>
  Hayk</p>