System verilog 如何使用特定的序列器附加UVM序列?

System verilog 如何使用特定的序列器附加UVM序列?,system-verilog,sequences,uvm,System Verilog,Sequences,Uvm,我有3个序列和4个序列器 我想要 sequencer 1运行sequence1 定序器2运行定序器1 sequencer 3以串行顺序运行sequence2和sequence3 sequencer 4以串行顺序运行sequence1、sequence2 这样做的一个方法是在测试类内部 task run_phase(uvm_phase phase); fork sequence1.start(sequencer1); sequence1.start(sequencer2); be

我有3个序列和4个序列器

我想要

  • sequencer 1运行sequence1
  • 定序器2运行定序器1
  • sequencer 3以串行顺序运行sequence2和sequence3
  • sequencer 4以串行顺序运行sequence1、sequence2
  • 这样做的一个方法是在测试类内部

    task run_phase(uvm_phase phase);
    fork
       sequence1.start(sequencer1);
       sequence1.start(sequencer2);
       begin
         sequence2.start(sequencer3);
         //wait for request....
         sequence3.start(sequencer3);
       end
       begin
         sequence2.start(sequencer4);
         //wait for req....
         sequence1.start(sequencer4);
       end
    join
    endtask
    

    除了进行内部测试之外,我如何在每个序列器内部执行相同的操作?

    您所编写的是做您想做的事情的最佳方法(在
    fork
    之前提出异议,在
    join
    之后放弃异议)。所有其他方法都使得在
    fork
    之前或
    join
    之后添加额外序列变得困难

    您可以使用uvm_config_db设置每个sequencer的“默认_序列”,但需要为sequencer3和Sequencer4创建另一个序列层,以所需顺序启动sequence1和Sequence2。您还需要在每个默认序列中处理提出/降低异议的问题

    另一个选项是,您可以定义一个sequencer并覆盖run_阶段来启动每个序列或序列,而不是使用通用序列器