【问题标题】:Invoking write/read_reg vr_ad macro from a virtual sequence in Specman从 Specman 中的虚拟序列调用 write/read_reg vr_ad 宏
【发布时间】:2015-02-16 01:02:41
【问题描述】:

有没有一种方法可以让虚拟序列直接调用 vr_ad write_regread_reg 宏,而无需我创建具有相同功能的 vr_ad_sequence

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

<'
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;
    };
};

提前感谢您的任何解释。

【问题讨论】:

    标签: specman uvm e


    【解决方案1】:

    这可以从 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

    【讨论】:

    • 我正要评论该解决方案对我不起作用。我只有一个不正确的 vr_ad 设置。它现在工作得很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2020-02-15
    相关资源
    最近更新 更多