Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

103 rader
3.2 KiB

  1. class wrap_txn extends uvm_sequence_item;
  2. function new(string name ="wrap_txn");
  3. super.new(name)
  4. endfunction
  5. rand bit wr_rd;
  6. //write address channel
  7. rand logic[31:0]awaddr;
  8. rand bit[3:0]awid;
  9. rand logic[3:0]awlen;
  10. rand logic[2:0]awsize;
  11. rand logic[1:0]awburst;
  12. rand logic[3:0]awcache;
  13. rand logic[2:0]awprot;
  14. rand logic[1:0]awlock;
  15. logic awvalid;'
  16. logic awready;
  17. '
  18. //write data channel
  19. rand bit[3:0]wid;
  20. logic[3:0]wstrb;
  21. rand logic[31:0]wdata[$];
  22. logic wlast;
  23. logic wvalid;
  24. logic wready;
  25. //write response channel
  26. rand bit[3:0]bid;
  27. logic[1:0]bresp;
  28. logic bvalid;
  29. logic bready;
  30. //read address channel
  31. rand logic[31:0]araddr;
  32. rand bit[3:0]arid;
  33. rand logic[3:0]arlen;
  34. rand logic[2:0]arsize;
  35. rand logic[1:0]arburst;
  36. rand logic[3:0]arcache;
  37. rand logic[2:0]arprot;
  38. rand logic[1:0]arlock;
  39. logic arvalid;
  40. logic arready;
  41. //read data channel
  42. rand bit[3:0]rid;
  43. logic[31:0]rdata[$];
  44. logic rlast;
  45. logic[1:0]rresp;
  46. logic rvalid;
  47. logic rready;
  48. constraint write_id {awid == wid; wid == bid;}
  49. constraint read_id {arid == rid;}
  50. constraint wr_data {wdata.size()==awlen+1;}
  51. constraint write_unalign {awaddr%(2**awsize)!=0;}
  52. constraint wrap {awburst ==2'b10; arburst ==2'b10;}
  53. constraint read_unalign {araddr%(2**arsize)!=0;}
  54. function void post_randomize();
  55. if(wr_rd = 1)
  56. begin
  57. for(int i=1;i<=(2**awsize);i++)
  58. wstrb[i] = 1;
  59. end
  60. endfunction
  61. `uvm_object_param_utils_begin(wrap_txn)
  62. `uvm_field_int(wr_rd,UVM_ALL_ON)
  63. `uvm_field_int(awaddr,UVM_ALL_ON)
  64. `uvm_field_int(awid,UVM_ALL_ON)
  65. `uvm_field_int(awlen,UVM_ALL_ON)
  66. `uvm_field_int(awsize,UVM_ALL_ON)
  67. `uvm_field_int(awburst,UVM_ALL_ON)
  68. `uvm_field_int(awcache,UVM_ALL_ON)
  69. `uvm_field_int(awprot,UVM_ALL_ON)
  70. `uvm_field_int(awlock,UVM_ALL_ON)
  71. `uvm_field_int(awvalid,UVM_ALL_ON)
  72. `uvm_field_int(awready,UVM_ALL_ON)
  73. `uvm_field_int(wid,UVM_ALL_ON)
  74. `uvm_field_queue_int(wdata,UVM_ALL_ON)
  75. `uvm_field_int(wstrb,UVM_ALL_ON)
  76. `uvm_field_int(wlast,UVM_ALL_ON)
  77. `uvm_field_int(wvalid,UVM_ALL_ON)
  78. `uvm_field_int(wready,UVM_ALL_ON)
  79. `uvm_field_int(bid,UVM_ALL_ON)
  80. `uvm_field_int(bresp,UVM_ALL_ON)
  81. `uvm_field_int(araddr,UVM_ALL_ON)
  82. `uvm_field_int(arid,UVM_ALL_ON)
  83. `uvm_field_int(arlen,UVM_ALL_ON)
  84. `uvm_field_int(arsize,UVM_ALL_ON)
  85. `uvm_field_int(arburst,UVM_ALL_ON)
  86. `uvm_field_int(arcache,UVM_ALL_ON)
  87. `uvm_field_int(arprot,UVM_ALL_ON)
  88. `uvm_field_int(arlock,UVM_ALL_ON)
  89. `uvm_field_int(arvalid,UVM_ALL_ON)
  90. `uvm_field_int(arready,UVM_ALL_ON)
  91. `uvm_field_int(rid,UVM_ALL_ON)
  92. `uvm_field_queue_int(rdata,UVM_ALL_ON)
  93. `uvm_field_int(rlast,UVM_ALL_ON)
  94. `uvm_field_int(rresp,UVM_ALL_ON)
  95. `uvm_field_int(rvalid,UVM_ALL_ON)
  96. `uvm_field_int(rready,UVM_ALL_ON)
  97. `uvm_object_utils_end
  98. endclass