基于SystemC的异构多核通信模块设计
该模块用来专门处理各个核之间的通信指令,对其进行解释翻译,并将最终行为直观的 告诉总线,达到核间通信的目的。新架构设计按照SystemC 交易级建模(TLM)原则,为以后 多核功能的扩展性提供可能性。
3.2 通信机制
为了异构多核通信的实现,需要向多核仿真器的每个模拟器内核扩展三条访问共享存储 区的指令,分别是:申请空间、读取和写入。
在内核代码中对共享存储区访问指令进行译码之后,需要对共享存储区发出操作请求, 与操作请求一起发送的是操作的信息,对于申请、读取和写入三种操作,各自的操作信息如 下表所示:
当 CMCCtrl 受到接收到来自Core1/Core2 的访问请求,模块触发。同时随着请求一起接 收下来的其他信息,包括指令编码、请求的数据类型、地址偏移等等。CMCCtrl 对这些请求 信息进行分析,当判断出核间需要数据通信后,将需要的信息提取发送至总线模块。具体模 块描述如下:
SC_MODULE(CMCCtrl)
{ sc_inout isCore1, isCore2; //来自Core1/Core2 的访问请求,是本模块的触发信号
sc_out core1_latency, core2_latency; //返回给Core1/Core2 的延时信息
sc_inout data_value; //需要传递的数据
sc_port bus_port; //通信总线模块接口
/*返回给Core1/Core2 的应答信号,表明CORE1/Core2 获得了共享存储区的访问权,并
且可以继续执行下一个周期的操作*/
sc_inout ackCore1, ackCore2;
/*随着isCore1/isCore2 请求一起接收下来的请求信息,包括指令编码、请求的数据类型、
地址移等等*/
sc_inout data_type, array_capacity, data_index, data_id;
/*随着is Core1/isCore2 请求一起接收下来的,表明当前Core1/Core2 运行的周期数,用
于进行内核调度判断和访存冲突分析*/
sc_in core1_cycle, core2_cycle;
/*对isCore1 或者isCore2 的上升沿敏感的响应函数,它被定义为线程类型,是CMCCtrl
类的实现函数。函数内部需要对两个内核的访问请求进行判断、控制,并调用相应的其它成员函数。
评论