首页 百科知识 分析端口和分析组件

分析端口和分析组件

时间:2022-10-16 百科知识 版权反馈
【摘要】:分析端口构成操作域和分析域之间的边界。分析端口和分析组件一起实现大名鼎鼎的面向对象的图案observer pattern。通过让分析端口的订购人成为一个无大小限制的FIFO,我们可以保证它永远不会在单个的delta周期内被填满或阻塞,那样分析组件就能访问在同一个delta周期内被发送的所有事务。这种情况下,你可以用analysis FIFO来作为一个分析端口和分析组件之间的FIFO缓冲器。分析FIFO是一个带有分析接口的tlm_fifo。

7.1 分析端口和分析组件

分析端口构成操作域和分析域之间的边界。分析域通过监视器负责分析观察到的行为。分析组件接收来自分析端口的输入,监视器通过分析端口把事务信息发送到分析组件。

分析端口和分析组件一起实现大名鼎鼎的面向对象的图案observer pattern。在这幅图里,发行人提供数据,订购人接受数据。就像订阅杂志,每个订购人必须向发行人订购之后才能收到数据,只有当发行人发行某些东西时数据才会传送到订购人,每个订购人同时收到来自发行人同样的一份数据拷贝。图7-1显示分析端口里单元的组织架构

测试开始前,每个订购人必须向发行人登记,发行人维护订购人名单。同时在工作期间包含分析端口的设备如监视器调用write(),传递事务对象。分析端口转发写(write)调用到每一个订购人,把事务对象的拷贝传递给订购人。

img208

图7-1 分析端口组织结构图

分析组件(订购人)通过analysis interface和分析端口连接,分析接口包括单个函数write()。Write()是一个SystemVerilog函数(不是任务);因此,它绝不阻塞。想象一下如果write()换成是一个阻塞性的任务会发生什么。如你所见,它不是阻塞性的原因,而是当调用write()的时候订购人必须在同一个delta周期接收数据。Analysis FIFOS确保支持这些特性。分析FIFO是无大小限制的TLM FIFO,它带有一个write()接口而不是普通的put()和get()接口。通过让分析端口的订购人成为一个无大小限制的FIFO,我们可以保证它永远不会在单个的delta周期内被填满或阻塞,那样分析组件就能访问在同一个delta周期内被发送的所有事务。

一些分析组件可以在单个delta周期内通过分析端口发送一个以上的事务。write()必须立即返回,但订购人可以做任何事,包括消耗时间。如果订购人没有在一个delta周期准备好处理多个事务,数据就会丢失。这种情况下,你可以用analysis FIFO来作为一个分析端口和分析组件之间的FIFO缓冲器。分析FIFO是一个带有分析接口(也就是write())的tlm_fifo。和任何组件连接到FIFO的方式一样,分析组件连接到分析FIFO不用通过分析接口。它用get()或try_get()(SystemC中用nb_get())来取回事务。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈