ESL学习笔记

ESL,全称为electric system level,其主要通途是用于系统建模,和MATLAB相比,它的优势在于软硬件协调和较好的细节关注,调试机制比较全面。
 
而对于海思目前用的ESL平台,包括两个coware和ESL builder。两者的区别不大,但是支持的语法细节有所不同。
 
COWARE平台,可以分成两大部分。
 
一个为ESL模型部分,主要包括抽象化的各个部件模型。使用的语法为system C 编译工具为GCC,每个部件模型可以分成两个大部分,一个为部件功能性描述,另一个为配置参数。配置参数包括模型功能性描述中的某些入参,譬如
 
包括某些位宽,通道数等,还有一些调试用途的参数,譬如debug_level,VC++里也在2010版里引入类似参数。
比较类似verification里wvf平台里
同样debug_level也有分级,决定debug时打印log文件的等级。
 
而功能性描述为使用system C抽象描述,包括*.h的头文件和*.cpp的实体文件。
在头文件中首先是对模板的描述,比较类似class的入参或者宏定义。
其次 是类描述实体,包括调用的子类,输入输出信号描述。重点是以下描述,既是端口和通道的描述,通过实现端口和通道的绑定来实现两个
实体类之间的通讯。这个比较像channel,但是使用方法不同,而把channel的功能扩大,可以实现BFM和Rx_monitor的作用。对于SV来讲是发送方为发送方,接收方为接收方。而对于SC,由于通道与两个端口绑定之后,在Master口和Slave口,可以通过直接调用通道的发送和接收函数。
 
在实体文件里,比较像硬件描述语言,或者像SV里使用一个大的fork将各个线程打包绑定后同时进展。
 
COWARE平台的另外一个部分是平台部分,主要负责连接各个部件模型的例化和链接,以及参数配置。如果有CPU的话还需要负责地址的映射和软硬件的协同。
平台搭建可以通过两种方法,一种是通过PLATFORM CREATER这个工具直接连接,缺点是每次都修改都需要手动修改,容易出错。
 
另一种方法是通过脚本完成相应工作。优势是不用维护,容易修改,准确。
完成的工作包括建立实体,
设置各个模块相应参数值
设置各个模块在系统中放置二维位置
设置连线将需要互联的两个模块进行连接
设置各个模块配置的地址值
 
但是光是设置模块配置的地址值还是不够,还需要说明各个master和slave之间的连接关系,分配空间大小,地址位宽等。
这个平台有支持的命令和相应的脚本处理。
 
在platform平台下,有个memMap,开发有.csh的脚本输入文件为dwaxibus_top文件,而middlemap为中间处理文件,而最终生成文件为RouterInfo.xml文件
 
输入文件的格式为下图所示
 
最终通过调用脚本生成一个用于ESL仿真的*xml文件。而同时使用这个xml文件和之前各个模块的xml文件、源文件生成最终ESL仿真需要的整体文件,通常名字为HARDWARE.h和HARDWARE.cpp文件。
 
 
 

你可能感兴趣的:(ESL)