Specman:如何设置event_port的hdl_path关联至另一单元的event?
Specman event_port绑定内部event的正确实现
错误原因
你原代码中使用hdl_path()绑定的方式是错误的,因为hdl_path()的作用是将event_port关联到HDL层次中的硬件信号,而clk_e是Specman/e语言内部定义的event,不属于HDL信号范畴,因此无法通过HDL路径引用它。
正确实现方式
要将phy_master_core_arbiter_u的in_clk_sig event_port绑定到phy_master_bfm_u的clk_e event,需要使用Specman/e的connect_event()方法,而非HDL路径绑定。
方式1:在bfm单元内部直接绑定
修改phy_master_bfm_u的定义,添加循环绑定逻辑:
unit phy_master_bfm_u like uvm_bfm { event clk_e is rise (p_smp.clk$) @sim; core_arbiters[4] : list of phy_master_core_arbiter_u is instance; // 批量绑定每个arbiter的event_port到clk_e keep for each (arbiter) in core_arbiters { connect_event(arbiter.in_clk_sig, clk_e); } }
方式2:在agent中绑定
如果需要在实例化bfm的agent中处理,可使用如下代码:
// agent中的绑定逻辑 keep for each (arbiter) in bfm.core_arbiters { connect_event(arbiter.in_clk_sig, bfm.clk_e); }
额外注意
需要移除phy_master_core_arbiter_u中的keep bind(in_clk_sig, external);语句,因为该语句是声明event_port要绑定到外部HDL信号,现在改为绑定内部event,无需保留该约束。
内容的提问来源于stack exchange,提问作者Zeev Gal
相关产品推荐
相关产品推荐

