代码之家  ›  专栏  ›  技术社区  ›  Sara p

Specman-BFM已创建,但不应创建

  •  0
  • Sara p  · 技术社区  · 8 年前

    我的tx代理中有一个BFM(没有序列驱动程序)。

    extend uart_tx_agent_u{
       uart_tx_monitor : TX uart_monitor_u is instance;
       uart_tx_scb: uart_tx_scoreboard_u is instance;
       when ACTIVE uart_tx_agent_u {
          uart_bfm : uart_tx_bfm_u is instance;
       };
    };
    

    当我运行测试时(我不更改active\u passive字段),我可以看到uart\u bfm已创建(根据打印的消息)。

    3 回复  |  直到 8 年前
        1
  •  0
  •   user3467290    8 年前

    是否确实要将约束从一个测试更改为另一个测试?代理是主动的并向DUT发送数据,或者是被动的,只收集从DUT发送的数据。

    人们通常做的是将代理定义为活动的,这样它就有一个序列驱动程序和一个BFM。

    在测试文件中,通过定义此代理的序列来定义测试的场景。

    因此,在不希望从该代理向DUT发送任何数据的测试中,请将序列设置为不执行任何操作-

    extend MAIN my_seq {
        body() @drive.clock is only {
            // do nothing, this agent should not send data in this test
        };
    };
    

    如果确实要更改环境拓扑,并且在某些测试中代理是被动的,而在某些测试中代理是主动的,则可以在测试文件中通过约束代理来执行此操作。

    这个约束必须在预运行生成中。 通过测试-代理是否处于活动状态。这在运行期间无法更改。您不能说“我使用被动代理启动测试,但在测试过程中,我希望将其激活”。

        2
  •  0
  •   user3467290    8 年前

    如果已实例化bfm,则必须是uart\u tx\u agent\u处于活动状态。

    当你说你没有改变它-也许它是随机设置为活动的?

        3
  •  0
  •   user3467290    8 年前

    测试开始后将生成序列结构。只有在有驱动程序的情况下才会生成序列。并且,仅当代理处于活动状态时,才会实例化驱动程序。 应自上而下约束环境拓扑,而不是从包含在其中的结构约束单元

    如果您知道希望代理处于活动状态,请约束它-

    extend rx_uart_agent_u {
        keep active_passive == TRUE;
    };
    

    或来自其父级

    extend env {
        keep me.rx_agent.active_passive == TRUE;
    };