G06F9/50 G06F9/54
1.一种可编程逻辑器件与微处理器共享内存的管理方法,所述可编程逻辑器件和所述 微处理器电连接至同一动态随机存储器,且所述微处理器运行有操作系统;其特征在于,所 述管理方法包括步骤:
(i)将所述动态随机存储器中由所述可编程逻辑器件与所述微处理器共享的内存块映 射成虚拟内存空间;
(ii)当所述可编程逻辑器件申请写内存时,根据申请的内存块大小在所述虚拟内存空 间中查满足需求的处于空闲状态的内存块并从所述处于空闲状态的内存块中分割出一 符合所述申请的内存块大小的第一目标内存块,标记所述第一目标内存块为已经使用状 态,并将所述第一目标内存块的虚拟起始地址所对应的在所述动态随机存储器中的物理起 始地址回传给所述可编程逻辑器件;以及
(iii)当所述可编程逻辑器件被动使用内存数据时,由所述微处理器在所述虚拟内存 空间中申请一第二目标内存块,标记所述第二目标内存块为已经使用状态,以及由所述微 处理器向所述第二目标内存块写入数据并在完成数据写入后通知所述可编程逻辑器件读 取数据且将所述第二目标内存块的大小和其虚拟起始地址所对应的在所述动态随机存储 器中的物理起始地址传递给所述可编程逻辑器件以供所述可编程逻辑器件读取数据。
2.如权利要求1所述的管理方法,其特征在于,步骤(ii)中标记所述第一目标内存块为 已经使用状态具体为:产生一个描述所述第一目标内存块的链表节点并在所述链表节点的 内容中标记所述第一目标内存块的状态为已经使用状态;其中,所述链表节点的内容还包 括所述第一目标内存块的起始地址、大小和顺序号。
3.如权利要求1所述的管理方法,其特征在于,还包括步骤:
当释放内存块时,在当前释放内存块所对应的链表节点的内容中标记为空闲状态,检 查当前释放内存块所对应的链表节点的相邻链表节点的内容中的内存块状态标记是否为 空闲状态,并在所述相邻链表节点的内容中的内存块状态标记为空闲状态时将所述当前释 放内存块所对应的链表节点和所述相邻链表节点合并。
4.如权利要求1所述的管理方法,其特征在于,所述可编程逻辑器件为FPGA,所述微处 理器为ARM处理器。
5.一种可编程逻辑器件与微处理器共享内存的管理装置,所述可编程逻辑器件和所述 微处理器电连接至同一动态随机存储器,且所述微处理器适于运行操作系统;其特征在于, 所述管理装置包括:
内存地址映射模块,用于将所述动态随机存储器中由所述可编程逻辑器件与所述微处 理器共享的内存块的物理地址映射成虚拟地址以得到虚拟内存空间;
内存块申请模块,用于根据申请的大小在所述虚拟内存空间中查满足需求的处于空 闲状态的内存块并从查到的内存块中分割出一内存块;以及
双向链表维护模块,用于通过链表节点对所述虚拟内存空间中的内存块进行信息描 述,其中所述链表节点的内容包括所描述内存块的起始地址、所描述内存块的大小、所描述 内存块的顺序号和所描述内存块的状态。
6.如权利要求5所述的管理装置,其特征在于,所述双向链表维护模块具体包括用于在 所述内存块申请模块申请内存块时,产生一个新链表节点来描述被分割出的目标内存块并 插入链表上,以及修改与所述新链表节点相邻的链表节点的信息。
7.如权利要求5所述的管理装置,其特征在于,所述双向链表维护模块具体包括用于当 释放内存块时,在当前释放内存块所对应的链表节点的内容中标记为空闲状态,检查当前 释放内存块所对应的链表节点的相邻链表节点的内容中的内存块状态标记是否为空闲状 态,并在所述相邻链表节点的内容中的内存块状态标记为空闲状态时将所述当前释放内存 块所对应的链表节点和所述相邻链表节点合并。
8.如权利要求5所述的管理装置,其特征在于,所述可编程逻辑器件为FPGA,所述微处 理器为ARM。
9.如权利要求5所述的管理装置,其特征在于,所述管理装置应用于LED显示屏异步控 制系统。
本发明涉及内存管理技术领域,尤其涉及一种可编程逻辑器件与微处理器共享内 存的管理方法以及一种可编程逻辑器件与微处理器共享内存的管理装置。
在LED显示屏行业,典型嵌入式系统是采用ARM播放媒体、然后产生一系列的 Bitmap内存图像交给FPGA去做处理显示。FPGA与ARM共享DDR内存这种应用已经越来越广 泛。一般开发思路是定义一些固定大小内存块,FPGA与ARM共享;然而内存块是预先定义好 的,预定义空间大小往往大于实际使用空间,实际利用率往往不高,造成对共享内存的浪 费。
因此,本发明提出可编程逻辑器件与微处理器共享内存的管理方法及管理装置, 以增加共享内存的利用率。
具体地,本发明实施例提出一种可编程逻辑器件与微处理器共享内存的管理方 法,其中所述可编程逻辑器件和所述微处理器电连接至同一动态随机存储器,且所述微处 理器运行有操作系统。所述管理方法包括步骤:(i)将所述动态随机存储器中由所述可编程 逻辑器件与所述微处理器共享的内存块映射成虚拟内存空间;(ii)当所述可编程逻辑器件 申请写内存时,根据申请的内存块大小在所述虚拟内存空间中查满足需求的处于空闲状 态的内存块并从所述处于空闲状态的内存块中分割出一符合所述申请的内存块大小的第 一目标内存块,标记所述第一目标内存块为已经使用状态,并将所述第一目标内存块的虚 拟起始地址所对应的在所述动态随机存储器中的物理起始地址回传给所述可编程逻辑器 件;以及(iii)当所述可编程逻辑器件被动使用内存数据时,由所述微处理器在所述虚拟内 存空间中申请一第二目标内存块,标记所述第二目标内存块为已经使用状态,以及由所述 微处理器向所述第二目标内存块写入数据并在完成数据写入后通知所述可编程逻辑器件 读取数据且将所述第二目标内存块的大小和其虚拟起始地址所对应的在所述动态随机存 储器中的物理起始地址传递给所述可编程逻辑器件以供所述可编程逻辑器件读取数据。
在本发明的一个实施例中,步骤(ii)中标记所述第一目标内存块为已经使用状态 具体为:产生一个描述所述第一目标内存块的链表节点并在所述链表节点的内容中标记所 述第一目标内存块的状态为已经使用状态;其中,所述链表节点的内容还包括所述第一目 标内存块的起始地址、大小和顺序号。
在本发明的一个实施例中,所述管理方法还包括步骤:当释放内存块时,在当前释 放内存块所对应的链表节点的内容中标记为空闲状态,检查当前释放内存块所对应的链表 节点的相邻链表节点的内容中的内存块状态标记是否为空闲状态,并在所述相邻链表节点 的内容中的内存块状态标记为空闲状态时将所述当前释放内存块所对应的链表节点和所 述相邻链表节点合并。
在本发明的一个实施例中,所述可编程逻辑器件为FPGA,所述微处理器为ARM处理 器。
此外,本发明实施例提出一种可编程逻辑器件与微处理器共享内存的管理装置, 其中所述可编程逻辑器件和所述微处理器电连接至同一动态随机存储器,且所述微处理器 适于运行操作系统。所述管理装置包括:内存地址映射模块,用于将所述动态随机存储器中 由所述可编程逻辑器件与所述微处理器共享的内存块的物理地址映射成虚拟地址以得到 虚拟内存空间;内存块申请模块,用于根据申请的大小在所述虚拟内存空间中查满足需 求的处于空闲状态的内存块并从查到的内存块中分割出一内存块;以及双向链表维护模 块,用于通过链表节点对所述虚拟内存空间中的内存块进行信息描述,其中所述链表节点 的内容包括所描述内存块的起始地址、所描述内存块的大小、所描述内存块的顺序号和所 描述内存块的状态。
在本发明的一个实施例中,所述双向链表维护模块具体包括用于在所述内存块申 请模块申请内存块时,产生一个新链表节点来描述被分割出的目标内存块并插入链表上, 以及修改与所述新链表节点相邻的链表节点的信息。
在本发明的一个实施例中,所述双向链表维护模块具体包括用于当释放内存块 时,在当前释放内存块所对应的链表节点的内容中标记为空闲状态,检查当前释放内存块 所对应的链表节点的相邻链表节点的内容中的内存块状态标记是否为空闲状态,并在所述 相邻链表节点的内容中的内存块状态标记为空闲状态时将所述当前释放内存块所对应的 链表节点和所述相邻链表节点合并。
在本发明的一个实施例中,所述可编程逻辑器件为FPGA,所述微处理器为ARM。
在本发明的一个实施例中,所述管理装置应用于LED显示屏异步控制系统。
由上可知,本发明实施例设计有专门的应用程序对可编程逻辑器件与微处理器共 享内存进行管理维护,因此能够使得系统的稳定性得到有效提高以及增加共享内存的利用 率。
通过以下参考附图的详细说明,本发明的其它方面和特征变得明显。但是应当知 道,该附图仅仅为解释的目的设计,而不是作为本发明的范围的限定。还应当知道,除非另 外指出,不必要依比例绘制附图,它们仅仅力图概念地说明此处描述的结构和流程。
下面将结合附图,对本发明的具体实施方式进行详细的说明。
图1为相关于本发明实施例的可编程逻辑器件例与微处理器共享内存的系统模 型。
图2为相关于本发明实施例的内存管理模块的实现原理图。
图3为本发明实施例的一种可编程逻辑器件与微处理器共享内存的管理装置的模 块示意图。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明 的具体实施方式做详细的说明。
参见图1,其为可编程逻辑器件例如FPGA与微处理器例如ARM处理器共享内存的系 统模型,DDR物理内存空间中的上部分为运行于微处理器中的操作系统(例如Linux操作系 统)的专用内存区域,可以使用操作系统的函数进行内存的分配和使用;由于操作系统对于 内存管理比较复杂,访问的往往是虚拟内存,故其也可以不连续。可编程逻辑器件访问的是 物理地址,为了简化应用程序的开发,建议将可编程逻辑器件与微处理器需要共享的内存 块预留出来,例如图1中DDR物理内存空间中的下部分。
假设预留的物理空间(图1中共享内存区域)是连续的,内存管理应用程序调用操 作系统的API(Application Programming Interface,应用程序编程接口)函数,使用某种 映射规则(例如操作系统自带的映射规则,如Linux的mmap()函数)将预留物理内存块映射 进内存管理应用程序的一块连续的虚拟地址空间,也即物理起始地址Start_Addr对应虚拟 起始地址Mapped_start_Addr,物理结束地址End_Addr对应虚拟结束地址Mapped_end_ Addr,如此一来,物理内存与虚拟内存之间的转换,实际就变成了相差一个偏移量。对虚拟 地址空间的读写,即为对物理内存块的读写。
对于内存管理应用程序而言,首先需要做一个映射,将DDR物理内存空间中的共享 内存区域的物理地址映射进自己的虚拟地址空间,而这个空间必须是连续的;然后实现一 个内存管理模块,将映射后得到的虚拟起始地址和虚拟结束地址当作内存管理模块的参 数。
内存管理模块对外暴露的接口例如有两个:获取任意大小的内存和释放内存;具 体地:
a)当可编程逻辑器件需要主动申请内存时:通知微处理器并告诉其需要的大小, 微处理器接收到此命令后,调用内存管理应用程序的内存管理模块申请一块内存,并将虚 拟起始地址对应的物理起始地址回传给可编程逻辑器件,此时可编程逻辑器件便获取到了 一块物理内存,当可编程逻辑器件对这块物理内存写完数据时,则通知微处理器,微处理器 的应用程序再去读;此步骤即为可编程逻辑器件申请写内存的步骤。
b)当可编程逻辑器件被动使用内存数据时:微处理器主动调用内存管理模块申请 一块内存,然后往该内存块中写入数据,当操作完成时,通知可编程逻辑器件读取数据,并 将申请的内存块的物理起始地址以及大小传递给可编程逻辑器件,可编程逻辑器件再根据 上述物理起始地址以及大小读取对应的内存数据。
参见图2,其为本发明实施例的内存管理模块的实现原理图。如图2所示:内存管理 模块内部维护一个双向链表,每个链表的节点例如info1、info2、info3或info4是一个对一 块内存信息的描述,包括所描述内存块的起始地址、所描述内存块的大小、链表节点的顺序 号(即为所描述内存块的顺序号)以及所描述内存块的状态。
1)初始化时,在没有申请内存的情况下,整个内存块就一块,即为空闲(free)状 态,此时链表的节点也只有一个。
2)当申请内存时,则会根据申请的大小查满足需求的一块空闲内存并将查到 这块空闲内存块分割成两块,并标记分配出来的那一块为已经使用(used)状态,此时同时 产生一个链表节点来描述当前内存块的信息;依次类推,每分配一次内存,则将产生一个链 表节点描述,插入相邻的链表节点之间,并修改相邻链表节点的信息。
3)当释放内存时,会在当前释放的内存块对应的链表节点内容中标记为空闲状 态,检查相邻链表节点是否为空闲状态,如果为空闲状态则合并相邻的链表节点,直到相邻 链表节点不为空闲状态为止。
另外,参见图3,本发明实施例还提出一种可编程逻辑器件与微处理器共享内存的 管理装置30,其例如是由前述运行于操作系统的内存管理应用程序实现,而可编程逻辑器 件与微处理器电连接至同一个动态随机存储器例如DDR。具体地,本实施例的可编程逻辑器 件与微处理器共享内存的管理装置30包括:内存地址映射模块31,内存块申请模块33和双 向链表维护模块35。
其中,内存地址映射模块31用于将动态随机存储器中的共享内存区域的物理地址 映射成虚拟地址得到虚拟内存空间,具体可为调用操作系统的API函数,使用某种映射规则 (例如操作系统自带的映射规则,如Linux的mmap()函数)将共享内存区域映射进内存管理 应用程序的一块连续的虚拟内存空间。
内存块申请模块33,用于根据申请的大小在所述虚拟内存空间中查满足需求的 处于空闲状态的内存块并从查到的内存块中分割出一个内存块供可编程逻辑器件读/写 数据,具体细节可参考前述a)和b)部分说明,在此不再赘述。
双向链表维护模块35,用于通过链表节点对虚拟内存空间中的内存块进行信息描 述,其中链表节点的内容包括所描述内存块的起始地址、所描述内存块的大小、所描述内存 块的顺序号(也即链表节点的顺序号)以及所描述内存块的状态;此处的双向链表维护模块 35在内存块申请模块33申请内存块时,产生一个链表节点来描述被分割出的那个内存块并 插入链表上,以及修改相邻链表节点的信息;此外,双向链表维护模块35在释放内存块(例 如当某个内存块处理空闲状态的时间长度超过预设的时间长度,则需要释放该内存块)时, 会在当前释放的内存块对应的链表节点内容中标记为空闲状态,检查相邻链表节点是否为 空闲状态,如果为空闲状态则合并相邻的链表节点,直到相邻链表节点不为空闲状态为止; 具体细节可参考前述1)、2)和3)部分说明,在此不再赘述。
综上所述,本发明实施例设计有专门的应用程序对可编程逻辑器件与微处理器共 享内存进行管理维护,因此能够使得系统的稳定性得到有效提高以及增加共享内存的利用 率。
最后值得一提的是,本发明实施例涉及的可编程逻辑器件并不限于FPGA,也可以 是其它可编程器件;而本发明实施例涉及的微处理器并不限于ARM,也可以是其他微处理器 像DSP等,并且微处理器中运行的操作系统也并不限于Linux操作系统,也可以是其它操作 系统像Android,iOS,WinCE等等。另外,前述实施例的可编程逻辑器件与微处理器共享内存 的管理装置30可应用于LED显示屏异步控制系统,而此种LED显示屏异步控制系统例如包括 LED异步控制卡,且LED异步控制卡上设置有可编程逻辑器件、微处理器、动态随机存储器和 非易失性存储器例如闪存,而用于实现管理装置30的内存管理应用例如安装在与微处理器 电连接的闪存中并可由微处理器中运行的操作系统执行。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽 然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人 员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰 为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对 以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
本文发布于:2023-04-14 10:19:01,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/4/86441.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |