文章目录
前言
TLM是一种基于事务(Transaction)的通信方式,通常在高抽象级语言,例如SystemC、SV/UVM中作为模块间的通信方式。
TLM通信保证了相邻组件间的通信不再通过显式句柄引用,而是独立于组件的通信方式,为验证组件的复用提供了很好地封闭性。
仿真速度是TLM对项目进度的最大贡献,同时TLM传输中的事务又可以保证足够大的信息量和准确性。
提示:以下是本篇文章正文内容,下面案例可供参考
一、简单例子:driver-sequencer组件之间的通信
driver的TLM端口:
uvm_seq_item_pull_port #(REP,RSQ) seq_item_port
sequencer的端口:
uvm_seq_item_pull_imp #(REQ,RSP,this_type) seq_item_export
driver和sequencer的端口连接:
driver::seq_item_port.connect(sequencer::seq_item_export)
二、TLM通信
系统原型阶段和芯片验证阶段均使用了TLM通信方式。前者是为了更快地实现硬件原型之间的数据通信,后者是为了更快地实现验证组件之间的通信。
仿真速度是TLM对项目进度的最大贡献,同时TLM传输中的事务又可以保证足够大的信息量和准确性。
TLM并不是某种语言的产物,而是作为一种提高数据传输抽象级的标准存在的。
TLM是一种基于事务(Transaction)的通信方式,通常在高抽象级语言,例如SystemC、SV/UVM中作为模块间的通信方式。
TLM通信保证了相邻组件间的通信不再通过显式句柄引用,而是独立于组件的通信方式,为验证组件的复用提供了很好地封闭性。
在芯片开发流程中,TLM通信主要在两个方面发挥了重要作用:
① 系统原型中各模块间通过TLM通信可以实现较宽松时间内的数据包传输;
② 验证平台组件之间通过TLM通信,验证平台组件driver与硬件设计模块之间通过TLM通信。
TLM通信基本概念:
TLM通信需要两个通信的对象(分别称为initiator 和 target)。谁先发起通信请求,谁就属于initiator,而作为通信的响应方,称为target。按照Transaction的流向,可以将对象分为 producer 和 consumer。数据从哪里产生,它就属于producer,而数据流向了哪里,它就属于consumer。注意:transaction的流向不一定是从initiator流向target,也可能是target流向initiator。
initiator 与 target 的关系同 producer 与consumer的关系不是固定的 。
有了两个参与通信的对象后,用户需要将TLM通信方法在target一端中实现,以便于initiator将来作为发起方可以调用target的通信方法,实现数据传输。
最后需要将两个对象进行连接,需要在两个TLM对象中创建TLM端口,继而在更高层次中将这两个对象进行连接。
三、TLM通信步骤
分辨出initiator 和 target ,producer 和 consumer;
在 target 中实现TLM通信方法;
在两个对象中创建TLM端口,initiator中创建port端口,target端创建imp端口;
在更高层次对两个对象的端口进行连接。