以下内容摘自《步步惊芯——软核处理器内部设计分析》一书
在本书第2章建立了最小系统,最小系统只由CPU、QMEM模块组成,借助于最小系统,我们分析了OR1200各类指令的执行过程、熟悉了流水线的工作原理以及CPU内部各个模块的代码实现,第10章在最小系统上增添了IMMU、DMMU模块,借此分析了OR1200中内存管理单元的实现原理。本章将建立一个基于OR1200的简单SOPC,后面的示例程序将运行在这个简单SOPC之上,借助于该SOPC分析OR1200中ICache、DCache、Wishbone总线接口单元等模块。
简单SOPC由OR1200、互联矩阵WB_CONMAX、RAM组成,11.1节给出了简单SOPC的结构,11.2、11.3节分别介绍了互联矩阵WB_CONMAX、RAM,11.4节介绍了SOPC的顶层文件。有了前面的准备, 11.5节新建ModelSim工程min_or1200_sopc用来仿真简单SOPC。本章最后编写了一个示例程序,并使用ModelSim仿真观察其在简单SOPC上的执行效果。
11.1 简单SOPC的结构
第3章介绍Wishbone总线的时候提及Wishbone总线有四种互联方式:点对点、数据流、共享总线、交叉互联。
点对点方式在OR1200内部广泛使用,一般有一个主设备、一个从设备,比如CPU与IMMU、QMEM之间,CPU与DMMU、QMEM之间,QMEM与ICache之间,QMEM与Store Buffer(SB)之间,SB与DCache之间等,在分析QMEM模块时都已介绍,读者可以参考图3.7-3.12。
但是对于一个片上系统,存在多个模块,并且某一模块能够访问其余多个模块,比如存在CPU、DMA控制器、Flash、RAM、GPIO等,其中CPU、DMA控制器作为主设备,Flash、RAM、GPIO作为从设备,主设备CPU可以访问Flash、RAM、GPIO,主设备DMA控制器也可以访问Flash、RAM、GPIO,当两者对同一设备发出访问请求时,需要一个仲裁机制判断哪个主设备占用总线,所以片上系统一般使用共享总线或者交叉互联方式。
1、共享总线
共享总线互联方式适合于系统中有两个或者多个主设备需要与一个或者多个从设备通信的情况,它们通过共享的总线进行通信。主设备在需要与一个从设备通信时,需要先向仲裁器申请总线占有权,获得允许后开始占用总线并与目标从设备开始通信,通信结束后释放总线。当多个主设备同时希望占有总线时,仲裁器通过一定的优先级逻辑分配总线使用机会。其典型框图如图11.1所示。共享总线的缺点是同一时刻只能有一对主、从设备建立通信。
2、交叉互联
交叉互联主要使用在多个主设备同时访问多个从设备的情况,其典型框图如图11.2所示。在这种连接方式下,主设备发出地址总线请求对某个从设备进行访问,仲裁器查看总线和从设备是否空闲,从而决定是否给主设备总线访问权。交叉互联方式允许多对主设备和从设备同时进行通信,而共享总线互联方式在同一时刻只允许一对主、从设备进行通信。