Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

5 meses atrás
12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. class axi_tx extends uvm_sequence_item;
  2. rand bit wr_rd;
  3. rand bit [`ADDR_WIDTH-1:0] addr;
  4. rand bit [`WIDTH-1:0] dataQ[$]; //to support burst of data
  5. rand bit [3:0] burst_len;
  6. rand bit [2:0] burst_size;
  7. rand burst_type_t burst_type;
  8. rand bit [3:0] txid;
  9. bit [1:0] resp;
  10. bit [31:0] wrap_lower, wrap_upper;
  11. int tx_size;
  12. `uvm_object_utils_begin(axi_tx)
  13. `uvm_field_int(addr, UVM_ALL_ON|UVM_NOPACK);
  14. `uvm_field_queue_int(dataQ, UVM_ALL_ON|UVM_NOPACK);
  15. `uvm_field_int(wr_rd, UVM_ALL_ON|UVM_NOPACK);
  16. `uvm_field_int(burst_len, UVM_ALL_ON|UVM_NOPACK);
  17. `uvm_field_int(burst_size, UVM_ALL_ON|UVM_NOPACK);
  18. `uvm_field_enum(burst_type_t, burst_type, UVM_ALL_ON|UVM_NOPACK);
  19. `uvm_field_int(txid, UVM_ALL_ON|UVM_NOPACK);
  20. `uvm_field_int(wrap_lower, UVM_ALL_ON|UVM_NOPACK);
  21. `uvm_field_int(wrap_upper, UVM_ALL_ON|UVM_NOPACK);
  22. `uvm_object_utils_end
  23. `NEW_OBJ
  24. function void post_randomize();
  25. if (burst_type == WRAP) begin
  26. tx_size = (burst_len+1) * (2**burst_size);
  27. wrap_lower = addr - (addr%tx_size);
  28. wrap_upper = wrap_lower + tx_size - 1;
  29. end
  30. endfunction
  31. //constraint
  32. constraint dataQ_c{
  33. dataQ.size() == burst_len+1;
  34. }
  35. constraint burst_type_c{
  36. burst_type != RSVD_BT;
  37. }
  38. constraint wrap_aligned_c{
  39. (burst_type) == WRAP -> (addr%(2**burst_size)==0);
  40. }
  41. endclass