TLM 2.0 peg_with_get类的使用
一次TLM事务级传输模型主要有三个组成部分:Initiator,Interconnect component,Target。本文关注点在于对Target的行为的描述。以硬件系统中的挂载在总线上的存储器为例。当存储器收到来自总线的读数据请求时,一般会有一个响应时间read_delay,在等待这个响应延时之后,数据才会出现在总线上等待被取走,然后存储开始送出下一个数据(如果有连续的读请求的话)。那么存储器送到总线上的数据什么时候会被取走呢?这个得由请求者来决定,可以将这段时间定义为end_resp_delay,end_resp_delay的时间长短不定,以周期数衡量的话,它可以为零或者非零。如果end_read_delay为零的话,存储器会在当前数据被送到总线之后的下一个周期将下一个数据送到总线;如果end_resp_delay非零的话,当前数据会在总线上多停留end_resp_delay个周期,这样就会阻塞下一个数据的送出end_resp_delay个周期直到当前数据被取走。
peg_with_get类可以模拟出上面所描述的情景,下面通过代码分析
void DeviceProxy::begin_response_thread()
{
wait(mResponsePEQ.get_event())