No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

126 líneas
2.5 KiB

  1. `include "uvm_macros.svh"
  2. import uvm_pkg::*;
  3. class axi_seq_item extends uvm_seq_item;
  4. //'uvm_object_utils(axi_seq_item);
  5. function new(string name="axi_seq_item")
  6. super.new(name);
  7. endfunction
  8. //write adress channel signals
  9. rand bit wr_rd;
  10. rand bit [3:0] awid;
  11. rand logic[31:0] awaddr;
  12. rand logic[2:0] awsize;
  13. rand logic[3:0] awlen;
  14. rand logic[1:0] awburst;
  15. rand logic[1:0] awlock;
  16. logic awvalid;
  17. logic awready;
  18. //write data channel
  19. rand bit [3:0] wid;
  20. rand logic[31:0] wdata[][];
  21. logic[3:0] wstrb;
  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 adress channel
  31. rand bit [3:0] arid;
  32. rand logic[31:0] araddr;
  33. rand logic[2:0] arsize;
  34. rand logic[3:0] arlen;
  35. rand logic[1:0] arburst;
  36. rand logic[1:0] arlock;
  37. logic arvalid;
  38. logic arready;
  39. // read data channel
  40. rand bit [3:0] rid;
  41. logic[31:0] rdata;
  42. logic[3:0]rresp;
  43. logic rlast;
  44. logic rvalid;
  45. logic rready;
  46. `uvm_object_utils_begin(axi_seq_item)
  47. `uvm_field_int(awid,UVM_ALL_ON)
  48. `uvm_field_int(awaddr,UVM_ALL_ON)
  49. `uvm_field_int(awsize,UVM_ALL_ON)
  50. `uvm_field_int(awlen,UVM_ALL_ON)
  51. `uvm_field_int(awburst,UVM_ALL_ON)
  52. `uvm_field_int(awlock,UVM_ALL_ON)
  53. `uvm_field_int(awvalid,UVM_ALL_ON)
  54. `uvm_field_int(awready,UVM_ALL_ON)
  55. `uvm_field_int(wid,UVM_ALL_ON)
  56. `uvm_field_int(wdata,UVM_ALL_ON)
  57. `uvm_field_int(wlast,UVM_ALL_ON)
  58. `uvm_field_int(wstrb,UVM_ALL_ON)
  59. `uvm_field_int(wvalid,UVM_ALL_ON)
  60. `uvm_field_int(wready,UVM_ALL_ON)
  61. `uvm_field_int(bid,UVM_ALL_ON)
  62. `uvm_field_int(bresp,UVM_ALL_ON)
  63. `uvm_field_int(bvalid,UVM_ALL_ON)
  64. `uvm_field_int(bready,UVM_ALL_ON)
  65. `uvm_field_int(arid,UVM_ALL_ON)
  66. `uvm_field_int(araddr,UVM_ALL_ON)
  67. `uvm_field_int(arsize,UVM_ALL_ON)
  68. `uvm_field_int(arlen,UVM_ALL_ON)
  69. `uvm_field_int(arsize,UVM_ALL_ON)
  70. `uvm_field_int(arburst,UVM_ALL_ON)
  71. `uvm_field_int(arlock,UVM_ALL_ON)
  72. `uvm_field_int(arvalid,UVM_ALL_ON)
  73. `uvm_field_int(arready,UVM_ALL_ON)
  74. `uvm_field_int(rid,UVM_ALL_ON)
  75. `uvm_field_int(rdata,UVM_ALL_ON)
  76. `uvm_field_int(rlast,UVM_ALL_ON)
  77. `uvm_field_int(rresp,UVM_ALL_ON)
  78. `uvm_field_int(rvalid,UVM_ALL_ON)
  79. `uvm_field_int(rready,UVM_ALL_ON)
  80. `uvm_object_utils_end
  81. //constraints for axi
  82. constraint aligned_addr{awadd%2**awsize==0;}
  83. constraint wrap_addr{solve awburst before awlen
  84. if(awburst==2'b 10)
  85. awlen inside{1,3,7,15};}
  86. constraint wid_sig{awid==wid;}
  87. constraint rid_sig{arid==rid;}
  88. constraint axi_4kb{awaddr%4096+(2**awsize*(awlen+1))<=4096;}
  89. //:constrain
  90. endclass:axi_seq_item