1. 观察者模式:TLM通信、sequence机制
在运用TLM通信、读sequence机制源码的时候有些方法调用感觉很别扭,果然是某种设计模式在作怪。下面说一说。
对于TLM通信而言,是否想过为什么为什么控制流和数据流方向可能不一样?最直观的想法不应该是:两个端口,谁想向对方发数据就put
过去不就好了?为什么initiator可以从target端get
回数据,而且get
是initiator调用,却由target来实现?
对于sequence机制而言,从源码中可以看出,很多地方明明是sequence调用自己的方法,但其内部有很多sequencer在运行。例如start_item
和finish_item
,在源码中做了这些事情:申请仲裁、缓存trans、等待driver反馈,但你会发现这些全是sequencer在做的,很奇怪申请仲裁不应该是类似seq.request_arb(sqr,item);
这种形式嘛?