25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.6 KiB

  1. // axi write sequence
  2. class axi_write_sequence extends uvm_sequence#(axi_seq_item);
  3. `uvm_object_utils(axi_write_sequence);
  4. function new(string name="axi_write_sequence");
  5. super.new(name);
  6. endfunction
  7. task body();
  8. req=axi_seq_item::type_id::create(req);
  9. start_item(req);
  10. assert(req.randomize()with{req.wr_rd==1;req.awaddr==0x08;req.awburst==2'b 10;req.awlen==3;req.awsize==2;req.wdata==0x22fb;});
  11. finish_item(req);
  12. endtask
  13. endclass
  14. // axi_read_sequence
  15. class axi_read_sequence extends uvm_sequence#(axi_seq_item);
  16. `uvm_object_utils(axi_read_sequence);
  17. function new(string name="axi_read_sequence");
  18. super.new(name);
  19. endfunction
  20. task body();
  21. req=axi_seq_item::type_id::create(req);
  22. start_item(req);
  23. assert(req.randomize()with{req.wr_rd==0;req.araddr==0x08;arlen==3;arburst==2'b 10;});
  24. finish_item(req);
  25. endtask
  26. endclass
  27. // axi aligned sequence
  28. class axi_aligned_sequence extends uvm_sequence#(axi_seq_item);
  29. `uvm_object_utils(axi_aligned_sequence);
  30. function new(string name="axi_aligned_sequence");
  31. super.new(name);
  32. endfunction
  33. task body();
  34. req=axi_seq_item::type_id::create(req);
  35. start_item(req);
  36. assert(req.randomize()with{req.wr_rd==1;req.awaddr==0x08;req.awsize==3;req.awburst==2'b 10;req.wdata==0xfa30;});
  37. finish_item(req);
  38. endtask
  39. endclass
  40. // write followed by read
  41. class write_read_sequence extends uvm_sequence#(axi_seq_item);
  42. `uvm_object_utils(write_read_sequence);
  43. axi_write_sequence axi_wr_seq;
  44. axi_read_sequence axi_rd_seq;
  45. function new(string name="write_read_sequence");
  46. super.new(name);
  47. endfunction
  48. task body();
  49. `uvm_do(axi_wr_seq);
  50. `uvm_do(axi_rd_seq);
  51. end
  52. endclass