You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 4 месеци
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. class axi_base_test extends uvm_test;
  2. `uvm_component_utils(axi_base_test)
  3. // Components
  4. axi_env env;
  5. axi_write_seq#(.D_WIDTH(D_WIDTH), .A_WIDTH(A_WIDTH)) wr_seq;
  6. axi_read_seq#(.D_WIDTH(D_WIDTH), .A_WIDTH(A_WIDTH)) rd_seq;
  7. // variables
  8. env_config env_cfg;
  9. test_config test_cfg;
  10. function new(string name, uvm_component parent);
  11. super.new(name, parent);
  12. test_cfg = new("test_cfg");
  13. test_cfg.no_write_cases = 1;
  14. test_cfg.no_read_cases = 1;
  15. endfunction //new()
  16. // Function: build_phase
  17. extern function void build_phase(uvm_phase phase);
  18. // Function: end_of_elaboration_phase
  19. extern function void end_of_elaboration_phase(uvm_phase phase);
  20. // Function: run_phase
  21. extern task run_phase(uvm_phase phase);
  22. endclass //axi_base_test extends uvm_test
  23. function void axi_base_test::build_phase(uvm_phase phase);
  24. test_cfg.burst_type = 2;
  25. uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg);
  26. wr_seq = new("wr_seq");
  27. rd_seq = new("rd_seq");
  28. env = axi_env::type_id::create("env", this);
  29. endfunction: build_phase
  30. function void axi_base_test::end_of_elaboration_phase(uvm_phase phase);
  31. super.end_of_elaboration_phase(phase);
  32. uvm_top.print_topology();
  33. endfunction: end_of_elaboration_phase
  34. task axi_base_test::run_phase(uvm_phase phase);
  35. phase.raise_objection(this);
  36. fork
  37. wr_seq.start(env.master.w_seqr);
  38. #200
  39. rd_seq.start(env.master.r_seqr);
  40. // end
  41. join
  42. phase.drop_objection(this);
  43. endtask: run_phase
  44. // ****************************************************************************************
  45. // Directed Test Cases
  46. // ****************************************************************************************
  47. class axi_write_test extends axi_base_test;
  48. `uvm_component_utils(axi_write_test)
  49. function new(string name, uvm_component parent);
  50. super.new(name, parent);
  51. endfunction //new()
  52. function void build_phase(uvm_phase phase);
  53. super.build_phase(phase);
  54. endfunction: build_phase
  55. function void end_of_elaboration_phase(uvm_phase phase);
  56. super.end_of_elaboration_phase(phase);
  57. endfunction: end_of_elaboration_phase
  58. task run_phase(uvm_phase phase);
  59. phase.raise_objection(this);
  60. wr_seq.start(env.master.w_seqr);
  61. phase.drop_objection(this);
  62. endtask: run_phase
  63. endclass //write_test extends axi_base_test
  64. class axi_read_test extends axi_base_test;
  65. `uvm_component_utils(axi_read_test)
  66. function new(string name, uvm_component parent);
  67. super.new(name, parent);
  68. endfunction //new()
  69. function void build_phase(uvm_phase phase);
  70. super.build_phase(phase);
  71. endfunction: build_phase
  72. function void end_of_elaboration_phase(uvm_phase phase);
  73. super.end_of_elaboration_phase(phase);
  74. endfunction: end_of_elaboration_phase
  75. task run_phase(uvm_phase phase);
  76. phase.raise_objection(this);
  77. wr_seq.start(env.master.w_seqr);
  78. // rd_seq.start(env.master.r_seqr);
  79. phase.drop_objection(this);
  80. endtask: run_phase
  81. endclass //write_test extends axi_base_test
  82. class axi_fixed_test extends axi_base_test;
  83. `uvm_component_utils(axi_fixed_test)
  84. function new(string name, uvm_component parent);
  85. super.new(name, parent);
  86. endfunction //new()
  87. function void build_phase(uvm_phase phase);
  88. test_cfg.burst_type = 0;
  89. uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg);
  90. wr_seq = new("wr_seq");
  91. rd_seq = new("rd_seq");
  92. env = axi_env::type_id::create("env", this);
  93. endfunction: build_phase
  94. task run_phase(uvm_phase phase);
  95. super.run_phase(phase);
  96. endtask: run_phase
  97. endclass //axi_fixed_test extends axi_base_test
  98. class axi_incr_test extends axi_base_test;
  99. `uvm_component_utils(axi_incr_test)
  100. function new(string name, uvm_component parent);
  101. super.new(name, parent);
  102. endfunction //new()
  103. function void build_phase(uvm_phase phase);
  104. test_cfg.burst_type = 1;
  105. uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg);
  106. wr_seq = new("wr_seq");
  107. rd_seq = new("rd_seq");
  108. env = axi_env::type_id::create("env", this);
  109. endfunction: build_phase
  110. task run_phase(uvm_phase phase);
  111. super.run_phase(phase);
  112. endtask: run_phase
  113. endclass //axi_fixed_test extends axi_base_test
  114. class axi_wrap_test extends axi_base_test;
  115. `uvm_component_utils(axi_wrap_test)
  116. function new(string name, uvm_component parent);
  117. super.new(name, parent);
  118. endfunction //new()
  119. function void build_phase(uvm_phase phase);
  120. test_cfg.burst_type = 2;
  121. uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg);
  122. wr_seq = new("wr_seq");
  123. rd_seq = new("rd_seq");
  124. env = axi_env::type_id::create("env", this);
  125. endfunction: build_phase
  126. task run_phase(uvm_phase phase);
  127. super.run_phase(phase);
  128. endtask: run_phase
  129. endclass //axi_fixed_test extends axi_base_test