1

有没有一种方法可以让虚拟序列直接调用 a vr_ad write_regorread_reg宏,而无需我创建vr_ad_sequence做同样事情的 a ?

为了更清楚地说明,这是我当前的实现:

<'
extend vr_ad_sequence_kind : [WR_DMA_POLL];
extend WR_DMA_POLL vr_ad_sequence {
    !dma_poll : DMA_POLL vr_ad_reg;

    body() @driver.clock is only {
        write_reg dma_poll val 0xdeadbeef;
    };
};

extend MAIN soc_tb_virtual_sequence {
    !write_dma_poll : WR_DMA_POLL vr_ad_sequence;

    body() @driver.clock is only {
        message(LOW, "TEST START");
        do write_dma_poll on driver.reg_driver;
    };
};
'>

为什么不能,或者有可能以这种方式实现?

extend MAIN soc_tb_virtual_sequence {
    !dma_poll : DMA_POLL vr_ad_reg;

    body() @driver.clock is only {
        message(LOW, "TEST START");
        write_reg {.dest_driver == driver.reg_driver} dma_poll;
        read_reg {.dest_driver == driver.reg_driver} dma_poll;
    };
};

预先感谢您的任何解释。

4

1 回答 1

3

这可以从vr_ad 13.20(或者可能稍旧)开始。你几乎在你的问题中有它。正确的语法是:

extend MAIN soc_tb_virtual_sequence {
    !dma_poll : DMA_POLL vr_ad_reg;

    body() @driver.clock is only {
        message(LOW, "TEST START");
        write_reg {.driver == driver.reg_driver} dma_poll;
        read_reg {.driver == driver.reg_driver} dma_poll;
    };
};

第一组{...}分隔操作生成块,您可以在其中约束如何访问寄存器。这些约束将传递给vr_ad_operation作为访问的一部分生成的。

于 2015-02-16T06:06:04.763 回答