随着集成电路工艺的进一步发展,在一个芯片中集成多个核的情况,已经可以实现,并且成为超大规模集成电路发展的一个重要分支。多核技术主要运用于一些实时性能要求比较高,计算量比较大,对功耗和开销有严格要求的应用中,比如在多媒体技术中,通常要进行大量的并行计算,就可以选用多核系统(MPSOC)来解决。但目前MPSOC设计还有很多软硬件方面的问题需要解决,如处理器的可配置性,互联架构的选用以及软硬件的并行设计等。
2、基于C/C++的硬件设计
考虑到软硬件并行设计的要求,我们在系统中嵌入ISS(一般由C/C++构成)来运行软件,系统中其它模块的建模在早期的软硬件并行仿真框架中采用HDL建模,这样就形成了一个不同语言的仿真环境,但此环境仿真性能欠佳并且软硬件的集成困难。目前出现的基于C/C++硬件描述方法在软硬件的并行仿真过程中有很好的优势,它使用相同的语言来描述软硬件,这样能弥补软硬件用不同语言来描述所带来的差距。我们在设计中选用SYS-TEMC来描述硬件模块。在这种结构中必须解决两个问题,一是软硬件之问如何有效地进行通讯,另一个是二者之间如何保持仿真的同步。目前主要存在两种解决方法,一种是SYSTEMC和ISS在主机上作为不同进程运行,如图1所示,它们之间的通讯通过进程通讯(Inter-Process Communication IPC)完成,同步通过SYSTEMC模块的封装来实现;第二种方法是并行仿真,在单独的SYSTEMC进程中完成,ISS被嵌入到SYSTEMC的封装模块中,此时的通讯是通过SYSTEMC模块的端口以及信号完成。前者在ISS和系统中的其余部分通讯比较少时,较为有效,当通讯加大时仿真性能不佳,同时也引入了大量的IPC开销。本设计将后一种方法引入到MPSOC的设计中,这能加快应用程序和硬件模块之间的通讯的能力,以便更快的确定系统的性能。
3、MPSOC的架构
MPSOC的仿真平台如图2所示,包括可配置的ISS,对于不同的应用,系统可以通过匹配ISS的数目来达到的性能,从而确定它的架构,另外还有私有存储器、共享存储器以及同步存储器和中断器件。其中每个处理器都对应一个私有存储器,用来存储处理器所要运行的程序;共享存储器用来协调多个处理器的通讯,使它们之间可以进行数据交互;同步存储器是为了同步多个处理器对共享资源的访问,使它们不发生冲突。同步存储器设计时采用双态信号量(binary semaphore)的形式,利用semaphore互锁机制去达到处理器之间的通讯同步。中断器件是可写不可读的,它表明有中断产生。另外平台中的互连架构对于整个平台的性能和开销也有非常大的影响,本平台采用的是共享总线的方式,此方式可以降低功耗。具体的系统总线采用的是AMBA的AHB总线,因为AHB总线在工业中使用非常普及。根据AMBA规范它支持多个主设备,但任意时刻只有一个主设备被允许访问总线,其它的主设备被仲裁器禁止。为了能够容易的扩张主设备和从没备,构造了主从设备的总线接口。另外总线支持突发传输、分段传输、单字节传输等多种功能。在总线上传输事务时,主设备首先向仲裁器发出请求信号,经仲裁器按照某种算法(本文循环算法)仲裁后,发出准许使用总线信号。主设备在等到拥有总线使用权后,发出地址和控制信号,在下一个时钟周期发出数据,在等到从设备发Ready信号后,主或从设备就可以对总线上的数据进行采样。期间使用多路复用器来对多个主从设备进行连接,使用译码器对发出的地址信号进行译码,用来选择从设备。
4、ISS与SYSTEMC的集成
设计中构造了周期的ISS,它内部包含了取址、译码、执行三级流水线,并且模拟了时钟的行为,因此它可以进行详细的平台性能分析。对于ISS和硬件模块的集成,我们将ISS嵌入到SYSTEMC的封装模块Wrapper中,作为此模块中的一个类成员。
如图3所示Wrapper模块所要完成的任务是要接受来自于ISS类或AHB主设备接口的控制和数据信号,经过模块的处理后再传递时序匹配的信号到ISS或AHB主设备接口。由于需要传递的信号比较多,所以我们采用了结构体的方式,这样可以同时发送一组信号,我们声明了一个结构体PINOUT,它包括AHB总线和处理器的一些必须的控制和数据信号。之后在Wrapper模块和ISS中声明此结构体类型的端口和中间变量。因为ISS和Wrapper模块之间的通讯是通过调用函数中的参数传递的方式来完成的,所以将ISS中需要和Wrapper进行通讯的结构体变量定义为指针类型,同时在Wrapper模块中对调用函数的结构体类型参数采用引用调用(Cy-cle(&pinout)。这样就可通过输入端口将ISS所需要的信号赋给中间变量,然后通过对ISS驱动函数的调用将中间变量的地址传递给ISS,等ISS执行完成后将中间变量的新值赋给输出端口,而Wrapper模块的端口又与AHB主设备的接口对应,从而完成了ISS与硬件模型的通讯。
另一方面为了使得ISS和SYSTEMC硬件模块的仿真时序匹配,我们定义了一个进程用于驱动ISS的运行,同时完成信号的同步。在SYSTEMC中提供了三种进程定义方式:方法进程、线程进程和钟控线程进程。当方法进程被调用后,进程就一直执行到结束,中间不能被停止,进程中也不能插入wait()语句。线程进程中可以插人wait()使进程被挂起,直到敏感信号再发生变化。钟控线程进程只对时钟敏感。Wrapper模块中采用线程的方式,定义了一个进程simulation,如图4所示是所定义的线程的一个局部情况,它是对时钟上升沿敏感的,我们用wait()语句在必要的位置使其挂起,这样就能进行时序操作。我们在此进程中调用上文提到的ISS的驱动函数,在每一个时钟沿,对此函数进行触发。由于ISS是周期的,处理器模型能在封装模块中给出每个时钟周期流水线的运行效果,所以与其进行交互的中间变量和端口只要在每个周期进行赋值就可以达到时序的匹配。另外对于Wrapper和AHB主设备接几之间的同步,我们采用握手机制,如图4中的ready_from_ahb_master和re-quest_to_ahb_master信号,这两个信号可以确保Wrapper和AHB主设备接受到正确的数据。
5、仿真结果
为了验证平台的性能,我们开发了一个矩阵的流水线乘法程序。因为平台的处理器模型的数目是可配置的,这里我们先后选用4个核和8个核的平台进行仿真,用来比较不同架构的性能。我们首先将乘数矩阵读人到每个处理器的私有存储器中,个被乘数矩阵读入共享存储器中,然后个处理器从共享存储器中读入被乘数矩阵,经过相乘计算结果再返回给共享存储器。下一个处理器再从共享存储器中取出上返回矩阵作为被乘数矩阵,处理后同样输出结果。这样各处理器之间按照流水线的方式进行操作,一个处理器的输出结果就是我们所需要的结果。仿真结果如表1和表2所示。从表中可以看出,处理器的开始执行时间和结束时间一个比一个延迟,这是由于后续的处理操作要用到前一个的结果,造成了大量的等待时问,所以在小规模的计算中并不适合用多核平台。但在复杂的应用中,比如此应用程序中,虽然八核所处理的计算量是四核的一倍,但仿真时间只增加了大约37%。可见MPSOC所处理的计算量越大就越能体现MPSOC的并行处理优势。
6、结语
MPSOC平台开发中应使平台尽可能的灵活,以便能应用于多种领域,来达到节约开发成本。本文引入的ISS和硬件模块的集成方式,可以很方便地进行平台扩展,而不需要对接口或ISS做过多的修改。所以能够快速有效地进行MPSOC的开发。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。