您的位置:首页 > 运维架构 > 网站架构

OpenRisc-36-ORPSoC整体架构分析

2013-07-19 16:33 197 查看

引言

之前,我们简单分析了ORPSoC的clock子系统,debug子系统,对FPGA的上电,复位,配置,初始化,用户模式等FPGA准备过程有了初步了解。

此外对ORPSoC的启动过程,包括程序的烧写,上电之后的load等过程也有了初步了解。

为了避免犯一叶障目,盲人摸象,本小节就对ORPSoC的整体架构做一个分析,力图能在宏观上把握ORPSoC的整体设计。

关于debug子系统:/article/1353102.html

关于clock子系统:/article/1353103.html

okay,let's go!

1,a general picture

在分析之前,对ORPSoC有一个主观感受,是很必要的事情,也是很有意义的。在用quartusII综合完后的模块连接 图,如下所示。

可能,从下面的图中看不出任何有价值的东西,只看到乱七八糟的一堆线,还有几个模块,模块的名字都看不清。

不过,没关系,先有一个直观的感觉:aha,so tha is what it is!

that's it.





2,ORPSoC的整体架构

1>架构图

经过努力,我画了一个ORPSoC的整体架构图。

需要说明的是,这个架构是基于ordb2a的,与基于ml501或者其他FPGA开发板的ORPSoC的整体架构差不多,主要区别在于时钟(ml501是diff_clock)和mem_ctrl部分(ml501的是DDR2 SDRAM controller),此外可能或多或少一些module。

注意,此图中的虚线的模块表示RTL上是可选的,但ordb2a上并没有实际sentence。



2>分析

1》时钟

整个ORPSoC的时钟有clock_gen模块提供。这个模块的时钟输入有两个,一个是外部的50MHz的工作时钟,另外一个jtag调试时提供的时钟。

2》调试系统

关于debug子系统,之前已经详细分析过了,请参考。

3》整体组织

整个ORPSoC主要由3个总线arbiter,将所有的module联系在一起。

其中ibus_arbiter是CPU的指令总线接口控制的32-bit仲裁器。

d_bus_arbiter是CPU的数据总线接口控制的32-bit仲裁器,此外这个arbiter的master除了CPU外,还有debug_interface,这也是我们之所以能通过gdb将软件load到RAM的物理支持。

bytebus_arbiter是dbs_arbiter的从设备,是一个8-bit的arbiter,主要连接那些对带宽要求比较低的设备控制器。

4》ibus_arbiter

了解完ORPSoC由三个arbiter组成的整体骨架。下面我们就逐个介绍这3个arbiter。

ibus_arbiter:

这个仲裁器的主设备只有一个,就是CPU的指令接口。OpenRISC是harvard architecture,其指令和数据分用不同的总线系统。CPU在取指时,通过指令总线接口来取指。通过之前对ORPSoC的启动过程的分析,我们知道CPU在上电后,会从ROM里面取指。

这个仲裁器的从设备,除了ROM,还有一个RAM_WB,通过对相关的RTL代码分析,我们知道,RAM_WB是一个片内的RAM,这个RAM_WB共有3个wishbone slave接口,这3个接口分别分配给了ibus_arbiter,dbus_arbiter和ethernet_ctrl,前面两个CPU用来取指令和读写数据,第3个是网卡控制器的DMA通道。

RAM_WB的功能就是给CPU的运行提供内存支持。其逻辑功能就相当于mem_ctrl+SDRAM。

5》dbus_arbiter

这个仲裁器的主设备有两个,分别是CPU的数据总线接口和debug接口。前者CPU用来访问内存,后者debug用来查看内存的内容(堆栈信息等)。

这个仲裁器的从设备有3个,分别是mem_ctrl,eth_ctrl,sdc。

mem_ctrl是DDR SDRAM的控制器,共有4个wishbone slave接口,分别分配给了ibus_arbiter,dbus_arbiter,ethernet,sd card controller。其中后两个是DMA通道(只要访存没有通过CPU的data bus,就可认为是DMA)。这里需要说明的是ordb2a板子上的内存是第一代的DDR,即DDR SDRAM,xilinx的ML501上面是DDR2 SDRAM,所以在ML501上需要一个wishbone_to_ddr2的wrapper才行,这个wrapper的RTL写的不错,代码不多,没有用fsm,完全裸写,涉及到了仲裁设计,还有cache结构的设计,跨时钟域的设计等,感兴趣的话可以看一下相关的code。

6》bytebus_arbiter

bytebus_arbiter是dbus_arbiter的从设备。是一个低速的总线仲裁器。如果对ARMBA熟悉的话,在ARMBA里面有高速的AXI,AHB等总线,还有APB等低速总线。wishbone没有高低速的区分,但可以实现高低速的组织架构,ORPSoC就是一个很好的实例,这也说明了wishbone的灵活性之所在。

关于这个仲裁器上的从设备,从模块的名字就可以知道其功能,不比多说,唯一需要提及的就是SPI后面的loader,这个也在ORPSoC的启动分析中深入介绍过了。

7》device

上面说的是ORPoC的整体架构,关于FPGA的片外设备,主要有SDRAM,PHY,还有SD card和spi-flash。这几个设备都是很常见的了,在之前用linux运行hello world时介绍过网卡的使用,在介绍如何烧写外部flash时介绍过FLASH的使用,在介绍基于eCos下的SD卡控制器的验证时也介绍了SD卡控制器的使用。如果有什么疑问,请参考相关内容。

3,小结

整体把握一个SoC是很重要的一项技能,画出其架构图也是对整个ORPSoC的工程的进一步总结和归纳。

本小节对ORPSoC的整体架构进行了分析和总结,希望能对SoC设计有更清晰和深入的理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: