2017-01-30 39 views
2

我已经建立了一个(正常工作)记分牌/监视器环境:的Specman UVM记分牌基本问题

// Scoreboard : like uvm_scoreboard 
    scbd_port packet_add : add packet_s; 
    scbd_port packet_match : match packet_s; 

我添加流:

// Monitor: 
    expected_packet_o : out interface_port of tlm_analysis of packet_s is instance; 

    connect_ports() is also { 
     expected_packet_o.connect(Scoreboard.packet_add); 
    }; 

    add_to_Scoreboard() is { 
     // ... collecting packet logic ... 
     // Actually adding the packet to SB: 
     expected_packet_o$write(expected_packet); 
    }; 

我的匹配流程:

// Monitor: 
    collect_DUT_output() is { 
     // ... receiving packet logic ... 
     Scoreboard.match_in_scbd(received_packet); 
    }; 

我的问题是:是否应该使用Specman的UVM scrb端口? 为什么我不能直接通过packet_add添加预期的数据包,如下所示:Scoreboard.packet_add$.write(expected_packet)?我发现将数据包添加到Scoreboard的唯一方法是将另一个TLM端口连接到packet_add,因为它是用代码编写的。 比赛流程中是否有像match_in_scbd这样的添加方法?

多谢您的Specman记分添加任何澄清和匹配流的它

回答

0

这样的想法,在TLM端口是“函数指针”只是一个花哨的包装(如C++)指向实现方法。没有什么能阻止你直接调用记分板实例实例的实现方法。唯一的问题是你必须知道记分牌的哪个实例要在调用者中调用。