专利名称:一种总线仲裁仿真装置和方法
技术领域:
本发明涉及一种总线仲裁仿真算法,特别是一种基于ARMulator仿真平台的AMBA总线仲裁仿真算法。
背景技术:
一个复杂的SOC芯片系统,是以系统总线为核心的,所有设备,包括CPU,都参加总线资源的竞争。这时,为了能够有效的管理系统总线的带宽,并能有效的使得各总线主设备有序的访问总线,使整个系统的性能最优,就必须有一个总线仲裁器。
以ARM为核心的芯片,片内都有一个系统总线。有的是各SOC厂家自己定义的总线规范,更多的直接使用ARM公司的AMBA总线。
然而,现有的采用基于AMBA总线的ARMulator仿真模型,如果想仿真一个像DMA这样的一个可以独立访问从设备的总线主设备,根据现有的ARMulator提供的接口,总线主设备访问从设备,是不花费总线周期的。比如一个DMA设备要访问内存并从内存中取回数据,这在ARMulator仿真模型里是一次完成的,但事实上发送本身就占用了一个总线周期,接收数据的时候根据数据内容的不同还有可能占用一个或者多个总线周期。具体的请参看图1所示,图中线1为ARMulator提供的,外部设备可以访问内存的函数接口。如果用这个函数接口访问内存,实际的仿真路径是图2所示的路径,而且这种访问方法是不消耗总线时钟的。具体为总线主设备模块发送一个内存访问指令给ARM Core,也就是ARMulator仿真ARM Core的核心模块,ARM Core访问内存后将返回值直接返回给总线主设备,看上去好像总线主设备直接访问内存一样,这在ARM程序看来总线主设备是在同一个时钟周期取得了所有应取得的数据,而事实上如前所述,总线主设备发送访问命令就占用了一个总线周期,接收数据过程中,根据数据内容的不同和协议的不同会消耗一个或多个时钟周期。这样,如果总线主设备A在第一时刻提出读取内存指令,而总线主设备B在第二时刻提出读取内存指令,这样基于ARMulator仿真模型的话总线主设备B是可以获取总线并读内存的,这明显与实际不符。因此ARMulator仿真模型就不能比较准确仿真一个多总线主设备的SOC系统,因此亟待需要有一种能够控制各个总线主设备访问从设备的仲裁机制,可以真实地反映实际中总线使用的情况。
发明内容
有鉴于此,本发明的目的在于提供一种基于ARMulator仿真平台的AMBA总线仲裁仿真算法,本方法的目的在于添加了一个总线仲裁机制,对一个多总线主设备的SOC系统进行仿真,使之更接近真实的情况。
为了达到上述目的,本发明一种总线仲裁仿真装置,包括用于基于AMBA总线的ARMulator模型下方针ARM Core的ARM Core核心模块、总线主设备、系统总线和总线从设备,所述ARM Core核心模块、总线主设备和总线从设备都一端连接在系统总线上另一端连接在总线仲裁器上,所述总线主设备和ARM Core核心模块在通过系统总线访问总线从设备前都先通过总线仲裁器请求总线使用权,在获得总线之后才允许通过总线访问总线。
进一步地,所述总线主设备是一个DMA。
进一步地,所述装置还包括一个或多个总线主设备,所述一个或多个总线主设备一端连接在系统总线上另一端连接在所述总线仲裁器上,所述总线仲裁器内保存着所有总线主设备和ARM Core核心模块的优先级列表,所述总线仲裁器根据所述优先级列表判断具体哪个总线主设备或者ARM Core核心模块能够获得总线使用权。
进一步地,在请求总线的过程中,总线仲裁器需要判断是否应该给当前请求总线的总线主设备或者ARM Core核心模块以总线使用权,当总线空闲的时候,率先访问总线仲裁器的总线主设备或者ARM Core核心模块将获得总线;如果同时有多个总线主设备或者ARM Core核心模块同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将总线使用权给优先级最高的总线主设备;
当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
进一步地,所述总线从设备接收到ARM Core核心模块的访问请求后不直接访问该总线从设备,而是对总线仲裁器发出ARM Core核心模块的总线请求。
进一步地,所述总线从设备对总线仲裁器发出ARM Core核心模块的总线请求的过程同前所述请求总线过程一致,当总线空闲且只有ARM Core核心模块请求,则令ARM Core核心模块访问总线从设备;当总线空闲且多个总线主设备也要同时访问内存时总线仲裁器会根据优先级的不同分配或者不予分配总线;当总线繁忙的时候则不允许访问总线。
本发明还包括一种总线仲裁仿真方法,包括以下步骤所有总线主设备和ARM Core核心模块都连接到总线仲裁器上,总线仲裁器连接到系统总线上并通过系统总线访问总线从设备;对所有的总线主设备和ARM Core核心模块建立总线主设备优先级列表并存于总线仲裁器上;总线仲裁器根据总线主设备优先级列表和总线状态判断哪个总线主设备获取总线;和获取总线的总线主设备通过总线仲裁器访问总线。
进一步地,其特征在于在请求总线的过程中,总线仲裁器需要判断是否应该给当前请求总线的总线主设备以总线使用权,当总线空闲的时候,率先访问总线仲裁器的总线主设备或者ARM Core核心模块将获得总线;如果同时有多个总线主设备或者ARM Core核心模块同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将总线使用权给优先级最高的总线主设备;当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
本发明提供一种总线仲裁仿真装置和方法通过引入一个总线仲裁机制,将每一个对总线的访问操作都通过总线仲裁机制控制,避免了一个周期内完成总线操作的弊端,更符合实际情况,这样可以更准确地对一个多总线主设备系统仿真。
图1是本发明模拟量控制装置的结构框图;图2是本发明模拟量控制装置的逻辑时序图;及图3是本发明模拟量控制装置的解码表。
具体实施例方式
请参看图2所示,本发明提供了一种总线仲裁仿真装置100,其包括ARMCore核心模块10、系统总线、总线主设备例如DMA、总线仲裁模块40和总线从属设备模块例如内存接口模块20。如图所示,所有的总线主设备和ARM Core一端被连接到总线仲裁器模块40上,一端连接在总线上,他们都有可能在任何时刻对总线仲裁器访问并操作系统总线。所有的总线从属设备模块一端被连接在总线仲裁器40上,另一端连接在总线上,所有的总线从属设备都不会主动访问总线仲裁器。现在以一个总线主设备31访问内存为例具体解释本发明总线仲裁仿真装置的工作流程。
具体信息交互过程如下请参看图3所示,当总线主设备需要访问总线时总线主设备30向总线仲裁器40发送请求总线事件,并携带参数事件ID、总线主设备的设备ID和携带访问信息的数据结构指针;总线总裁器40在接收到请求总线事件后,进行总线仲裁,如果可以给予总线占用,就给总线主设备发送获得事件,并携带参数传递事件ID、给予总线的总线主设备ID,总线主设备接收到事件后,判断设备ID是否与自己的ID一致,如果一致,就认为自己得到总线;总线主设备30得到总线仲裁后,给总线仲裁器40发送访问总线事件,并携带参数事件ID、主设备ID,真正访问内存;总线仲裁器40得到事件后,向内存模块20发送访问内存事件,并携带参数事件ID、总线主设备ID和总线主设备的访问信息数据结构指针;
内存模块20在得到访问内存事件后,访问内存,并判断是何种操作。在读内存时,将读到的数据写入总线主设备的数据结构里;写内存时,将总线主设备数据结构的数据写到该结构指定的地址里。访问内存后,内存模块发送内存访问结束事件;总线仲裁器40得到内存访问结束事件后,发送访问总线结束事件给总线主设备;总线主设备得到访问总线结束事件后,如果是读总线,就在访问信息数据结构里取读到的数,如果是写总线,就进行下一步的操作。
所有图3中的信息交互都是通过ARMulator平台提供的发送事件的接口函数ARMulif_RaiseEvent实现的。该函数可以带4个参数,其中最有用的有三个事件的ID、datal和data2。对于图3中的四种信息交互,定义了四个不同的事件ID;datal传递的是每一个总线主设备的ID;data2在请求总线时,携带了一个数据结构的指针,该数据结构包含总线主设备要访问的地址、访问总线的属性(如word访问还是harlfword或byte访问,Burst访问还是single access等)和一个存放被访问地址数据的指针,读总线时,该地址存放总线上读到的数据,写总线时,该地址存放要放到总线上的数据。
在请求总线的过程中,总线仲裁器需要判断是否应该给当前请求总线的总线主设备以总线使用权。具体来说,在总线仲裁器40中存有一个总线主设备优先级列表,当总线空闲的时候,率先访问总线仲裁器的总线主设备将获得总线;如果同时有多个总线主设备同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将获得总线事件发送给优先级最高的总线主设备;当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
在本发明中,ARM Core的地位被弱化了,其本身也作为一种总线主设备,同其他的总线主设备一样竞争总线使用权。在现有技术中,ARM Core是可以直接访问从属设备的,现在在内存接口模块中加入一个规则,当ARM Core访问内存接口时不再令其直接访问物理内存,而是令总线仲裁器对内存接口模块进行访问,同前所述请求总线过程一致,当总线空闲且只有ARM Core请求,则令ARM Core访问内存;当总线空闲且多个总线主设备也要同时访问内存时总线仲裁器会根据优先级的不同分配或者不予分配总线;当总线繁忙的时候则不允许访问总线。经过这样的改动,ARM Core的地位同其他总线主设备地位无异。都需要经过总线仲裁器的裁定。
以上介绍的是以总线主设备访问内存为例,总线主设备访问其他总线从属设备的情况也是类似的,在这里就不一一赘述。
本发明还提供了一种总线仲裁仿真方法,该仿真方法在一个优选的实施例中用于前述总线仲裁仿真装置100中,但这种方法并不绝对依附于前述总线仲裁仿真装置100。下面就以用于总线仲裁仿真装置100中为例来说明本发明的总线仲裁方针方法。该方法包括所有总线主设备都连接到总线仲裁器上;对所有的总线主设备建立优先级列表并存于总线仲裁器上;总线仲裁器根据总线主设备优先级列表和总线状态判断哪个总线主设备获取总线;和获取总线的总线主设备通过总线仲裁器访问总线,并从总线设备处获得返回值。
所述总线主设备获取总线的方法具体为当总线空闲的时候,率先访问总线仲裁器的总线主设备将获得总线;如果同时有多个总线主设备同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将总线使用权发送给优先级最高的总线主设备;和当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
获得总线的总线主设备通过总线仲裁器访问主线并从总线设备获取返回值的方法具体为所述获得总线的总线主设备发送访问总线事件,所述总线仲裁器访问内存接口并访问总线设备;所述总线设备将访问结束事件返回给总线仲裁器并返回一定的返回值;和所述总线仲裁器将访问总线结束事件返回给总线主设备并将总线设备的返回值返回给总线主设备。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。
权利要求
1.一种总线仲裁仿真装置,包括用于基于AMBA总线的ARMulator模型下仿真ARM Core的ARM Core核心模块、总线主设备、系统总线和总线从设备,所述ARM Core核心模块、总线主设备和总线从设备都一端连接在系统总线上另一端连接在总线仲裁器上,所述总线主设备和ARM Core核心模块在通过系统总线访问总线从设备前都先通过总线仲裁器请求总线使用权,在获得总线之后才允许通过总线访问总线。
2.根据权利要求1所述的装置,其特征在于,所述总线主设备是一个DMA。
3.根据权利要求1所述的装置,其特征在于,所述装置还包括一个或多个总线主设备,所述一个或多个总线主设备一端连接在系统总线上另一端连接在所述总线仲裁器上,所述总线仲裁器内保存着所有总线主设备和ARM Core核心模块的优先级列表,所述总线仲裁器根据所述优先级列表判断具体哪个总线主设备或者ARM Core核心模块能够获得总线使用权。
4.根据权利要求3所述的装置,其特征在于,在请求总线的过程中,总线仲裁器需要判断是否应该给当前请求总线的总线主设备或者ARM Core核心模块以总线使用权,当总线空闲的时候,率先访问总线仲裁器的总线主设备或者ARM Core核心模块将获得总线;如果同时有多个总线主设备或者ARM Core核心模块同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将总线使用权给优先级最高的总线主设备;当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
5.根据权利要求4所述的装置,其特征在于,所述总线从设备接收到ARMCore核心模块的访问请求后不直接访问该总线从设备,而是对总线仲裁器发出ARM Core核心模块的总线请求。
6.根据权利要求5所述的装置,其特征在于,所述总线ARM Core对总线仲裁器发出ARM Core核心模块的总线请求的过程同前所述请求总线过程一致,当总线空闲且只有ARM Core核心模块请求,则令ARM Core核心模块访问总线;当总线空闲且多个总线主设备也要同时访问内存时总线仲裁器会根据优先级的不同分配或者不予分配总线;当总线繁忙的时候则不允许访问总线。
7.一种总线仲裁仿真方法,包括以下步骤所有总线主设备和ARM Core核心模块都连接到总线仲裁器上,总线仲裁器连接到系统总线上并通过系统总线访问总线;对所有的总线主设备和ARM Core核心模块建立总线主设备优先级列表并存于总线仲裁器上;总线仲裁器根据总线主设备优先级列表和总线状态判断哪个总线主设备或者ARM Core核心模块获取总线;和获取总线的总线主设备或ARM Core核心模块通过总线仲裁器访问总线。
8.根据权利要求7所述的方法,其特征在于,在请求总线的过程中,总线仲裁器需要判断是否应该给当前请求总线的总线主设备以总线使用权,当总线空闲的时候,率先访问总线仲裁器的总线主设备或者ARM Core核心模块将获得总线;如果同时有多个总线主设备或者ARM Core核心模块同时在总线空闲的时候访问总线仲裁器,则总线仲裁器根据查其内部的总线主设备优先级表将总线使用权给优先级最高的总线主设备;当总线忙碌的时候,所有总线主设备对总线的仲裁器的访问都被忽略。
全文摘要
本发明提供了一种总线仲裁仿真装置和方法。在ARMulator的仿真模型中通过加入一个总线仲裁器,将包括ARM Core在内的所有总线主设备访问总线的操作都先通过所述总线仲裁器的仲裁,当获取总线后才可以访问总线从设备,并获取需要的返回值。本发明提供一种总线仲裁仿真装置和方法通过引入一个总线仲裁机制,将每一个对总线的访问操作都通过总线仲裁机制控制,避免了一个周期内完成总线操作的弊端,更符合实际情况,这样可以更准确地对一个多总线主设备系统仿真。
文档编号G06F13/20GK101075220SQ20071009891
公开日2007年11月21日 申请日期2007年4月29日 优先权日2007年4月29日
发明者李连波 申请人:北京中星微电子有限公司