⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xbus_example_master_seq_lib.sv

📁 Open Verification Methodology
💻 SV
字号:
// $Id: //dvt/vtech/dev/main/ovm/examples/xbus/examples/xbus_example_master_seq_lib.sv#5 $//----------------------------------------------------------------------//   Copyright 2007-2008 Mentor Graphics Corporation//   Copyright 2007-2008 Cadence Design Systems, Inc.//   All Rights Reserved Worldwide////   Licensed under the Apache License, Version 2.0 (the//   "License"); you may not use this file except in//   compliance with the License.  You may obtain a copy of//   the License at////       http://www.apache.org/licenses/LICENSE-2.0////   Unless required by applicable law or agreed to in//   writing, software distributed under the License is//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR//   CONDITIONS OF ANY KIND, either express or implied.  See//   the License for the specific language governing//   permissions and limitations under the License.//----------------------------------------------------------------------//------------------------------------------------------------------------------//// SEQUENCE: incr_read_byte_seq////------------------------------------------------------------------------------class incr_read_byte_seq extends ovm_sequence;  function new(string name="incr_read_byte_seq");    super.new(name);  endfunction  `ovm_sequence_utils(incr_read_byte_seq, xbus_master_sequencer)  read_byte_seq read_byte_seq0;  rand int unsigned count;  constraint count_ct { (count < 20); }  rand bit [15:0] start_address;  rand int unsigned incr_transmit_del = 0;  constraint transmit_del_ct { (incr_transmit_del <= 10); }    virtual task body();    `message(OVM_MEDIUM,("Starting sequence with count = %0d", count))    repeat(count) begin : repeat_block      `ovm_do_with(read_byte_seq0,        { start_addr == start_address;          transmit_del == incr_transmit_del; } )      start_address++;    end : repeat_block  endtask : body  endclass : incr_read_byte_seq//------------------------------------------------------------------------------//// SEQUENCE: incr_write_byte_seq////------------------------------------------------------------------------------class incr_write_byte_seq extends ovm_sequence;  function new(string name="incr_write_byte_seq");    super.new(name);  endfunction  `ovm_sequence_utils(incr_write_byte_seq, xbus_master_sequencer)      write_byte_seq write_byte_seq0;  rand int unsigned count;  constraint count_ct { (count < 20); }  rand bit [15:0] start_address;  rand int unsigned incr_transmit_del = 0;  constraint transmit_del_ct { (incr_transmit_del <= 10); }  virtual task body();    `message(OVM_MEDIUM,("Starting sequence with count = %0d", count))    repeat(count) begin : repeat_block      `ovm_do_with(write_byte_seq0,        { start_addr == start_address;          transmit_del == incr_transmit_del; } )      start_address++;    end : repeat_block  endtask : bodyendclass : incr_write_byte_seq//------------------------------------------------------------------------------//// SEQUENCE: incr_read_write_read_seq////------------------------------------------------------------------------------class incr_read_write_read_seq extends ovm_sequence;  function new(string name="incr_read_write_read_seq");    super.new(name);  endfunction  `ovm_sequence_utils(incr_read_write_read_seq, xbus_master_sequencer)  incr_read_byte_seq  read0;  incr_write_byte_seq write0;  virtual task body();    `message(OVM_MEDIUM,("Starting sequence"))    `ovm_do(read0)    `ovm_do(write0)    `ovm_do(read0)  endtask : bodyendclass : incr_read_write_read_seq//------------------------------------------------------------------------------//// SEQUENCE: r8_w8_r4_w4_seq////------------------------------------------------------------------------------class r8_w8_r4_w4_seq extends ovm_sequence;  function new(string name="r8_w8_r4_w4_seq");    super.new(name);  endfunction  `ovm_sequence_utils(r8_w8_r4_w4_seq, xbus_master_sequencer)      read_word_seq read_word_seq0;  read_double_word_seq read_double_word_seq0;  write_word_seq write_word_seq0;  write_double_word_seq write_double_word_seq0;  rand bit [15:0] start_address;  constraint start_address_ct { (start_address == 16'h4000); }  virtual task body();    `message(OVM_MEDIUM,("Starting sequence"))    `ovm_do_with(read_double_word_seq0,       { start_addr == start_address;        transmit_del == 2; } )    `ovm_do_with(write_double_word_seq0,      { start_addr == start_address;        transmit_del == 4; } )    start_address = start_address + 8;    `ovm_do_with(read_word_seq0,      { start_addr == start_address;        transmit_del == 6; } )    `ovm_do_with(write_word_seq0,      { start_addr == start_address;        transmit_del == 8; } )  endtask : bodyendclass : r8_w8_r4_w4_seq  //------------------------------------------------------------------------------//// SEQUENCE: read_modify_write_seq////------------------------------------------------------------------------------class read_modify_write_seq extends ovm_sequence;  function new(string name="read_modify_write_seq");    super.new(name);  endfunction  `ovm_sequence_utils(read_modify_write_seq, xbus_master_sequencer)      read_byte_seq read_byte_seq0;  write_byte_seq write_byte_seq0;  rand bit [15:0] addr_check;  bit [7:0] m_data0;  bit [7:0] m_data0_check;  virtual task body();    begin      `message(OVM_MEDIUM,("Starting sequence"))      // READ      `ovm_do(read_byte_seq0)      addr_check = read_byte_seq0.this_transfer.addr;      m_data0_check = read_byte_seq0.this_transfer.data[0] + 1;      // WRITE      `ovm_do_with(write_byte_seq0,        { start_addr == addr_check;          data0 == m_data0_check; } )      // READ MODIFIED WRITE DATA      `ovm_do_with(read_byte_seq0,        { start_addr == addr_check; } )      m_data0 = read_byte_seq0.this_transfer.data[0];    end  endtask : bodyendclass : read_modify_write_seq//------------------------------------------------------------------------------//// SEQUENCE: loop_read_modify_write_seq////------------------------------------------------------------------------------class loop_read_modify_write_seq extends ovm_sequence;  int itr;  function new(string name="loop_read_modify_write_seq");    super.new(name);  endfunction  `ovm_sequence_utils(loop_read_modify_write_seq, xbus_master_sequencer)      read_modify_write_seq rmw_seq;  virtual task body();    begin      void'(p_sequencer.get_config_int("loop_read_modify_write_seq.itr", itr));      `message(OVM_MEDIUM,("Starting sequence"))      for(int i = 0; i < itr; i++) begin        `ovm_do(rmw_seq)      end    end  endtask : bodyendclass : loop_read_modify_write_seq

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -