一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种DMA驱动系统、方法、设备及可读存储介质与流程

2022-12-02 21:54:49 来源:中国专利 TAG:

一种dma驱动系统、方法、设备及可读存储介质
技术领域
1.本发明属于计算机领域,具体涉及一种dma驱动系统、方法、设备及可读存储介质。


背景技术:

2.bmc(baseboard management controller,基板管理控制器)芯片在服务器系统中用于系统硬件监视和控制的功能,供上层管理软件查询或主动上报故障问题,如监测服务器的温度,电压,风扇,电源,重启服务器等。 bmc芯片是一个独立的soc系统,接通电源即可启动运行,不受服务器开关机影响,独立于业务系统之外。bmc芯片对外表现形式为标准的网口,一是将压缩后的服务器系统的视频数据通过网口发送到远端,实现远程监控管理的功能。二是远程控制端通过网络将鼠标、键盘等信息发送给bmc系统。随着显示系统分辨率越来越大,视频数据对网络实时性和带宽要求越来越高。
3.传统的技术实现中一般使用bmc芯片的soc系统中的cpu进行以太网控制器模块中的dma的配置和以太网参数等的配置。这种方案完全依赖于cpu,对cpu造成较大的负担。且bmc系统需要cpu对多个设备进行管理控制,如pcie接口的视频数据,vga显示模块,视频数据压缩模块,外部多达十几个的i2c设备,uart设备等,因此,通过cpu配置dma时有较大的时间延迟。其主要过程包括:系统启动时,cpu根据dma控制器的要求进行初始化和参数配置,如接口速率,用户侧数据总线接口类型,总线宽度等。
4.系统运行过程中:在ddr内存中需要两种类型的缓存用于存储dma控制器相关的数据,一类是发送/接收的数据缓存:tx/rx buffer,另一类是用于缓存发送/接收的描述符。当在tx buffe中有数据需要发送时,cpu在内存中按照描述符的结构准备发送描述符,描述符结构是固定的,包括数据存放的地址,数据长度,描述符的控制信息,如是否第一个描述符或者最后一个描述符,优先级,是否生成中断等。然后把描述符相关信息发送给dma,最后启动dma从内存搬运数据到rgmii(reduced gigabit media independent interface,吉比特介质独立接口)接口,连接外部的以太网phy芯片,通过rj45发送到远端。数据接收和数据发送的过程类似。
5.如何提升bmc芯片或者bmc整体网络的性能,提高soc系统性能成为当前需要解决的重要问题。


技术实现要素:

6.为解决以上问题,本发明提出一种dma驱动系统,包括控制模块、驱动模块,其中:所述控制模块用于与所述驱动模块和dma控制器相连,并将描述符发送到所述驱动模块和/或dma控制器或将描述符在内存中的地址发送到所述驱动模块;所述驱动模块用于接收所述控制模块发送的描述符并基于所述描述符驱动所述dma控制器对内存进行数据访存和/或监控所述dma控制器的状态并根据所述状态向所述dma控制器发送使能命令。
7.在本发明的一些实施方式中,驱动模块包括:第一缓存模块,所述第一缓存模块用于缓存所述控制模块发送到所述驱动模块的描述符;接口模块,所述接口模块用于接收所述控制模块发送的描述符并将所述描述符发送到所述第一缓存模块,以及基于所述第一缓存模块缓存的描述符按照预定策略将所述描述符中的内容发送到所述dma控制器。
8.在本发明的一些实施方式中,驱动模块还包括:dma使能模块,所述dma使能模块用于根据所述dma控制器的状态向所述dma控制器发送使能命令。
9.在本发明的一些实施方式中,接口配置模块进一步用于:获取所述dma控制器的运行状态将所述运行状态发送到所述dma使能模块,以及接收所述dma使能模块发送的使能命令并将所述使能命令发送到所述dma控制器。
10.在本发明的一些实施方式中,驱动模块还包括:dma控制器初始化模块,所述dma控制器初始化模块用于通过所述接口模块对所述dma控制器进行初始化。
11.在本发明的一些实施方式中,驱动模块还包括:第二缓存模块,所述第二缓存模块用于保存所述dma控制器的初始化时的配置信息。
12.在本发明的一些实施方式中,还包括:接口仲裁模块,所述接口仲裁模块与所述控制模块和所述驱动模块相连用于根据描述符优先级或控制优先级对所述控制模块和所述驱动模块与dma控制器的通信进行仲裁。
13.本发明的另一方面还提出一种dma驱动方法,包括:通过控制模块将描述符发送到驱动模块和/或dma控制器或将描述符在内存中的地址发送到所述驱动模块;通过驱动模块基于所述描述符驱动所述dma控制器对内存进行数据访存和/或监控所述dma控制器的状态并根据所述状态向所述dma控制器发送使能命令。
14.在本发明的一些实施方式中,通过驱动模块基于所述描述符驱动所述dma控制器对内存进行数据访存包括:接收所述控制模块发送的描述符并将所述描述符发送到第一缓存模块,以及基于所述第一缓存模块缓存的描述符按照预定策略将所述描述符中的内容发送到所述dma控制器。
15.在本发明的一些实施方式中,监控所述dma控制器的状态并根据所述状态向所述dma控制器发送使能命令包括:通过dma使能模块根据所述dma控制器的状态向所述dma控制器发送使能命令。
16.在本发明的一些实施方式中,方法还包括:通过接口模块获取所述dma控制器的运行状态将所述运行状态发送到所述dma使能模块,以及接收所述dma使能模块发送的使能命令并将所述使能命令发送到所述dma控制器。
17.在本发明的一些实施方式中,方法还包括:通过所述接口模块对所述dma控制器进行初始化。
18.在本发明的一些实施方式中,方法还包括:通过第二缓存模块保存所述dma控制器的初始化时的配置信息。
19.在本发明的一些实施方式中,方法还包括:根据描述符优先级或控制优先级对所述控制模块和所述驱动模块与dma控制器的通信进行仲裁。
20.本发明的又一方面还提出一种计算机设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现上述实施方式中任意一项所述方法的步骤。
21.本发明的再一方面还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述实施方式中任意一项所述方法的步骤。
22.通过本发明提出的一种dma驱动系统,实现了一种区别于传统方式的dma启动方式,且保留cpu配置总线,满足灵活配置的需求。这种方式可降低总线配置延迟,提升系统性能,满足更大分辨率的远端监控功能,提升网络性能。
附图说明
23.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1为本发明实施例提供的一种dma驱动系统的结构示意图;图2为本发明实施例提供的一种dma驱动方法的方法流程示意图;图3为本发明实施例提供的一种计算机设备的结构示意图;图4为本发明实施例提供的一种计算机可读存储介质的结构示意图;图5为本发明实施例提供的一种dma驱动系统的一种实施方式的结构示意图;图6为本发明实施例提供的一种dma驱动系统的一种实施方式的结构示意图;图7为本发明实施例提供的传统的dma驱动系统的结构示意图;图8为本发明实施例提供的一种dma驱动系统运行时dma使能模块的处理流程示意图。
具体实施方式
25.为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
26.需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
27.本发明旨在解决以soc芯片应用场景下dma的使用效率问题。在很多领域的soc芯
片设计中,大都借助dma(direct memory access,直接存储器访问)模块进行数据的访存,dma技术本身就是解决大量io任务对cpu工作的占用而设计的一种io方案,实现将io任务与cpu执行脱离,即应用程序在cpu中运行但应用程序在从其他存储介质(一般指非内存的低速存储介质)获取数据时不再通过cpu从其他存储介质中读取和写入,而是通过对应的dma模块来完成数据的读取和写入。以此来防止io型应用程序的进程对cpu的占用导致cpu的运算单元空闲,降低使用率。但即便如此仍然需要由cpu向dma模块发送对应的数据访存任务,通常是以描述符的方式实现,即由cpu将对应的io任务的描述符发送到dma模块,dma模块根据描述符执行对应的io任务。由于常用的cpu都是分时处理机制,负责处理io任务的应用程序的进程和其他应用程序的进程在理论上要按照时间片轮转的方式共享cpu,因此通过cpu向dma模块发送描述符时常常存在一个时间片(指某个应用程序的进程获取到了cpu的执行权限的若干个时钟周期)内无法完成对应的描述符配置(指发送到dma)需要等待若干周期直到处理io任务的应用程序的进程再次获得cpu的执行权继续完成在上一个时间片未完成的描述符配置工作。而对应的在处理io任务的应用程序的进程在未获得cpu的执行权时,dma一直处于闲置状态,既而造成dma的使用效率降低。
28.在本发明中,dma控制器3是指bmc芯片中实现网络功能处理模块即以太网控制器中的dma控制器,是bmc芯片中独立的网络数据处理模块,通常情况下通过总线与cpu相连,dma控制器3内部具有对应的dma模块,并通过dma模块访问ddr内存,可直接从内存中获取数据或者向内存中写入数据,因此dma控制器3的dma功能受cpu发送的描述符控制。如前所述在传统的实现方式上,需要由cpu通过与dma控制器3相连的总线将描述符内容配置到dma控制器3对应的寄存器上以启动对应的dma功能。
29.描述符分两种,一种发送描述符,是指通过dma从dma控制器向cpu发送数据的索引信息,一种是接收描述符是指通过dma模块从cpu接收数据的索引信息。所谓向cpu发送数据和从cpu接收数据是指以dma的方式从内存中对应的tx_buffer读取cpu发送给dma控制器3的数据,以及以dma的方式将dma控制器3发送给cpu的数据写入到内存中对应的rx_buffer。
30.在传统的实现方式中bmc芯片中的cpu发送给dma控制器3的描述符结构包括四个32bit的数据对应四个寄存器:如tdes0、tdes1、tdes2、tdes3,其中,tdes0表示:数据在内存中的低32位地址;tdes1表示:数据在内存中的高32位地址;tdes2:第31位表示dma传输完成时是否产生中断:1:生成中断,0:不生成中断;[30]位:描述符优先级,第30位值为1:表示该描述符具有高优先级;第30位值为0:表示该描述符为正常描述符,无高优先级;[29]位:描述符是否有效;第29位值为1:表示该描述符是有效的;第29位值为0:表示此描述符无效,已被使用;第13到第0共14位表示内存中数据的长度;其他位预留。
[0031]
tdes3:一次dma操作可以操作一个描述符链表,包括多个描述符。
[0032]
第31位指示这个描述符是否第一个描述符,第31位值为1:表示该描述符是此次dma任务的第一个描述符;第31位值为0:不是第一个描述符;第30位指示这个描述符是否最后一个描述符,第30位值为1:表示该描述符是此次
dma任务的最后一个描述符,第30位值为0:表示不是最后一个描述符;[29:28]位:表示用于控制dma控制器3发送时是否添加crc校验和数据填充;[27:26]位:表示用于控制是否更换以太网数据包中的mac地址;[14:0]位:表示通过dma发送/接收的数据的长度;也即,一个dma任务需要发送四个描述符到dma控制器3。一个描述的数据长度是32位,cpu与dma控制器3通过总线连接,通常情况下数据总线的位宽一般选择32位的数据总线,因此在一个总线时钟周期内只能传递1个描述符,一个dma任务至少需要4个总线周期。进一步,由于cpu的时钟周期和总线的时钟周期并不同步,一般情况下都高于总线的时钟频率,因此在总线上经过4个总线时钟周期的时间内,在cpu上已经经过了几十个甚至上百个cpu的时钟周期了,在cpu上执行dma任务分配的进程需要从内存读取描述符发送到总线上,如果总线频率低于cpu频率,在cpu上执行dma任务分配的进程在传输一个描述符后需要等待一定的cpu时钟周期,而在此过程中可能存在cpu上的进程的时间片轮转发生,使得在cpu上执行dma任务分配的进程在一定时间内并不具备cpu的使用权,导致在分发一个或多个描述符后被终止执行,使得dma控制器3闲置等待。
[0033]
如图1所示,为解决上述问题,本发明提出一种dma驱动系统,包括控制模块1、驱动模块2,其中:所述控制模块1用于与所述驱动模块2和dma控制器3相连,并将描述符发送到所述驱动模块2和/或dma控制器3或将描述符在内存中的地址发送到所述驱动模块2;所述驱动模块2用于接收所述控制模块1发送的描述符并基于所述描述符驱动所述dma控制器3对内存进行数据访存和/或监控所述dma控制器3的状态并根据所述状态向所述dma控制器3发送使能命令。
[0034]
在本实施例中,控制模块1是指由cpu和cpu上执行dma任务分配的进程构成的整体,dma任务的描述符实际是由cpu上执行dma任务分配的进程控制cpu向对应的总线发送。cpu上执行dma任务分配的进程实质上是对应的驱动程序运行后的进程。驱动模块2是本发明在bmc对应的soc芯片上实现的硬件电路,驱动模块2分别与cpu和dma控制器通过总线相连,cpu上执行dma任务分配的进程可以将对应dma任务的描述符发送给驱动模块2或者发送到dma控制器3中。进一步,控制模块1可以根据自身实现的程序逻辑将描述符发送给驱动模块2,在将描述符发送给驱动模块2时可同时发送多个描述符或者将多个dma任务的描述符全部发送给驱动模块2。控制模块1在将描述符发送给dma控制器3时依然采用原有的方式,即通过总线一个一个的将dma任务的描述符发送给dma控制器3。
[0035]
特别地,在本发明的一些实施例中,控制模块1将描述符在内存中的地址发送给驱动模块2,驱动模块2从内存中批量读取多个描述符。即cpu上执行dma任务分配的进程将对应的多个描述符的内存地址直接发送给驱动模块,驱动模块2根据内存地址从内存指定区域读取描述符。
[0036]
在本发明的实施例中,驱动模块2由独立的硬件电路实现,其工作模式可分为两种,一种是完全代理控制模块1的工作,即从控制模块1获取dma任务的描述符,并按照先入先出的机制将每个dma任务对应的描述符发送到dma控制器3,并实施通过总线获取dma控制器3的任务状态(可执行dma任务),如果dma控制器3的状态空闲则向dma控制器发送下一个dma任务的描述符。
[0037]
另外一种工作模式为辅助模式,在此模式下驱动模块2依然通过总线监控dma控制器3的状态。当dma控制器3接收到对应的dma任务之后已准备就绪,但还未收到cpu下发的执行命令(如前所述,cpu向dma控制器发送描述符一个总线时钟周期只能发送一个),则驱动模块2代替控制模块1向dma控制器3发送使能指令。在此模式下仍然需要对cpu上执行dma任务分配的进程的逻辑进行更改。
[0038]
在本发明的一些实施方式中,驱动模块包括:第一缓存模块5,所述第一缓存模块用于缓存所述控制模块发送到所述驱动模块的描述符;接口模块4,所述接口模块4用于接收所述控制模块1发送的描述符并将所述描述符发送到所述第一缓存模块5,以及基于所述第一缓存模块5缓存的描述符按照预定策略将所述描述符中的内容发送到所述dma控制器3。
[0039]
在本实施例中,如图5所示,驱动模块2进一步包括第一缓存模块5和接口模块4,第一缓存模块5用于缓存控制模块1发送给驱动模块2的描述符。接口模块4作为驱动模块2的数据接口实现驱动模块2与dma控制器3和cpu通过总线相连,一方面与cpu相连获取控制模块1发送的描述符,并将描述符缓存到第一缓存模块。另外对dma控制器3,则按照第一缓存模块5中对应描述符的存储顺序,从第一缓存模块5 读取对应的描述符发送到dma控制器3配置dma控制器3上对应的寄存器。即在总线上发起写操作,具体过程如下:接口模块4作为总线的master(主端)在总线发起写操作之前先通过ready信号查看从端(dma控制器3上对应的数据接口)是否准备好,如果ready信号为低表示从端处于忙碌状态,主端需要等待;如果ready为高表示从端准备好接收数据,此时主端可以发起写操作:拉高选择信号,拉高写信号,给出要写入的地址数据和数据大小,传输类型和burst类型等控制信号。传输过程中ready信号拉低,写操作完成后,从端总线拉高ready信号,给出resp响应信号,主端根据响应信号的值判断数据是否写入成功。重复上述步骤将描述符发送到dma控制器3。
[0040]
需要说明的是,在描述符发送到dma控制器3后,dma控制器3则根据从总线上得到的描述符数据自动配置相关寄存器(本实施例中是以bmc芯片上的以太网控制器中的dma模块为例进行说明,可以理解的是具有dma模块的不同功能模块可能存在细节实现的差异,在将本发明应用到其他dma模块时需根据对应模块的具体功能进行适应性调整),用于实现dma操作的寄存器包括:mac控制寄存器;以太网数据包源mac地址更换寄存器;发送数据低32位起始地址寄存器;发送数据高32位起始地址寄存器;接收数据低32位起始地址寄存器;接收数据高32位起始地址寄存器;发送描述符长度寄存器;接收描述符长度寄存器;发送dma控制寄存器;发送dma状态寄存器;
接收dma控制寄存器;接收dma状态寄存器;发送描述符寄存器;接收描述符寄存器。
[0041]
在本发明的一些实施方式中,驱动模块2还包括:dma使能模块6,所述dma使能模块6用于根据所述dma控制器3的状态向所述dma控制器3发送使能命令。
[0042]
在本发明的一些实施方式中,接口配置模块进一步用于:获取所述dma控制器的运行状态将所述运行状态发送到所述dma使能模块,以及接收所述dma使能模块发送的使能命令并将所述使能命令发送到所述dma控制器。
[0043]
在本实施例中,驱动模块2中还包括dma使能模块6,dma使能模块6用于根据dma控制器3的状态发送对dma控制器3dma功能的使能命令。具体地,借助接口模块4通过总线实时获取发送描述符寄存器和接收描述符寄存器的值,将二者的值发送到dma使能模块6,dma使能模块6判断发送描述符寄存器和接收描述符寄存器的值是否有效。如果发送描述符寄存器的值有效,说明当前的dma任务是向内存中发送数据。如果描述符寄存器的值有效,说明当前的dma任务是从内存中接收数据,即读数据。
[0044]
在本发明的一些实施例中,dma使能模块6无论驱动模块2处于哪种模式均实现对dma控制器3的使能命令,具体过程如图8所示,包括:s21:读取发送描述符寄存器;s22:判断发送描述符是否有效,若发送描述符有效则执行s23,如果发送描述符无效,则执行s24;s23:配置发送dma使能;s24:读取接收描述符寄存器;s25:判断发送描述符是否有效,如果发送描述符有效则执行步骤s26,否则执行步骤s21;s26:配置接收dma使能。
[0045]
在步骤s21和s24中,dma使能模块6生成总线读请求信号和读请求的地址;并将读请求信号和读请求的地址发送给接口模块4,由接口模块4将读请求和读请求地址通过总线数据的形式发送到dma控制器3。并将dma控制器3反馈的数据发送给dma使能模块6。
[0046]
需要说明的是,在驱动模块2启动后,dma使能模块6的功能一直有效,无论是由控制模块2中的cpu分配描述符还是由驱动模块2中的接口模块 4分配描述符,dma使能模块6均对dma控制器3的dma功能进行使能控制。
[0047]
在本发明的一些实施方式中,驱动模块2还包括:dma控制器初始化模块7,所述dma控制器初始化模块7用于通过所述接口模块4对所述dma控制器3进行初始化。
[0048]
在本实施例中,如图5所示,驱动模块2中还设有dma控制器初始化模块7,dma控制器初始化模块7用于在soc系统上电或者是dma控制器3复位后对dma控制器3进行初始化。具体步骤如下:响应于soc系统启动/复位,延时预定时钟周期,例如512个时钟周期,等待系统稳
定后,获取dma控制器初始化正常工作的配置信息,基于配置信息逐一生成总线写请求信号、写地址和写数据,并发送到接口模块4,由接口模块4将配置信息通过总线发送到dma控制器4。并等待接口模块4反馈dma控制器3的配置结果。如果配置成功则从配置信息中配置下一个配置数据,重复生成总线请求信号、写地址和写数据通过接口模块4发送到dma控制器3。直到琐碎的配置数据均发送到dma控制器3并生效。则通过接口模块4以预定时钟周期的方式监控dma控制器3的复位信号。若检测到复位则重新执行上述过程。
[0049]
在本发明的一些实施方式中,驱动模块2还包括:第二缓存模块8,所述第二缓存模块8用于保存所述dma控制器3的初始化时的配置信息。
[0050]
在本实施例中,如图5所示,驱动模块2中还包括第二缓存模块8,第二缓存模块8保存有用于配置dma控制器3初始化的配置信息。在对dma控制器初始化时dma控制器初始化模块7从第二缓存模块8中逐一读取对应的配置数据。
[0051]
在本发明的一些实施方式中,还包括:接口仲裁模块9,所述接口仲裁模块9与所述控制模块1和所述驱动模块2相连用于根据描述符优先级或控制优先级对所述控制模块和所述驱动模块与dma控制器的通信进行仲裁。
[0052]
在本实施例中,如图5所示,控制模块1中的cpu和驱动模块2中的接口模块4都会对dma控制器3进行配置/读取,而dma控制器3中的配置总线接口只有一套,因此,需要接口仲裁模块9对两路总线接口进行仲裁。保证同一时刻只有一个master对dma控制器进行配置,规避总线操作冲突。
[0053]
进一步,在驱动模块2代替cpu对dma控制器的dma功能进行配置时,理论上是按照描述符的顺序由接口模块4执行对应的dma配置工作。为满足bmc网络传输数据的需要,对于bmc中的某些关键数据在通过以太网传输到远端时,提供优先传输的功能,如果对应的应用数据需要将数据优先通过网络数据发送,则可以通过控制模块1在操作系统层对应的驱动程序将其数据对应描述符的等级提高,然后通过cpu直接将对应的描述符发送到dma控制器3,此时接口仲裁模块9则优先与cpu建立总线连接,由cpu对dma控制器3的dma功能进行配置。
[0054]
实施例1:如图5所示,图5示出的是本发明提供的一种dma驱动系统的结构示意图。在该系统中,有两个master对dma控制器3配置,分别是控制模块1中的cpu和驱动模块2中的接口模块4,因此,需要通过接口仲裁模块9进行仲裁,保证同一时刻只有一个master(主端)对dma控制器进行配置,规避总线操作冲突。
[0055]
cpu在上层驱动程序的控制下的功能为配置发送/接收描述符相关的寄存器,如数据的起始地址,数据长度,描述符是否有效等,供查询和dma操作。cpu在发送描述符时可以向dma控制器3发送,也可以向驱动模块2发送。
[0056]
在本实施了中,接口模块4作为总线的master,功能是根据dma控制器初始化模块7和dma使能模块6输入的总线操作读写请求信号,地址信号和数据信号生成配置总线接口的信号和时序,并输出读/写操作完成信号给dma控制器初始化模块7和dma使能模块6,并输出总线读/写状态信号给两个模块,用于判断寄存器读/配置是否完成。实现用户侧总线接口
配置的功能。
[0057]
dma控制器初始化模块7通过配置一系列的寄存器(dma控制器3上的寄存器)完成dma控制器3的初始化操作,包括dma的初始化、mtl的初始化和mac的初始化。在该模块中使用第二缓存模块8存储初始化配置信息,初始化配置基本固定不变,可以相应的rom实现。rom的数据位宽为64,高32bits为配置的寄存器地址,低32bits为寄存器配置数据,深度为512。如果在系统运行中某个寄存器需要根据特别需求修改配置,比如版本信息等,那么可以使用cpu进行配置,配置方式灵活。dma使能模块6,由于dma控制器中只有一套配置总线接口,因此,发送dma启动操作和接收dma启动操作在一个状态机中配置,两个操作交替执行。首先判断是否有有效的描述符标志信号,在启动dma后清除该标志信号,然后配置dma启动。状态流程图如图8所示。
[0058]
在本实施例中,bmc系统中以太网控制的工作流程如下所示:(1)首先,系统上电启动或复位重启;(2)dma控制器初始化模块进行初始化操作;(3)内存中有数据需要发送或者接收远端数据到内存中,cpu在内存中按照以太网控制描述符的格式配置发送/接收描述符到驱动模块2或dma控制器3;(4)配置dma控制器3中dma寄存器,启动发送/接收dma;(5)dma从内存搬运数据或者把数据搬运到内存;(6)dma搬运数据完成,产生中断,cpu响应中断;(7)开启下一次操作。
[0059]
实施例2:如图6所示,图6示出的是本发明提供的一种dma驱动系统的结构示意图。同样地,在该系统中,有两个master对dma控制器3配置,分别是控制模块1中的cpu和驱动模块2中的接口模块4,因此,需要通过接口仲裁模块9进行仲裁,保证同一时刻只有一个master(主端)对dma控制器进行配置,规避总线操作冲突。
[0060]
cpu在上层驱动程序的控制下的功能为配置发送/接收描述符相关的寄存器,如数据的起始地址,数据的长度,描述符是否有效等,供查询和dma操作。cpu在发送描述符时可以向dma控制器3发送,也可以向驱动模块2发送。
[0061]
在本实施例中只需cpu将描述符在内存中的地址信息发送给驱动模块2,由驱动模块2根据描述符在内存中的地址信息读取指定区域的描述符数据保存到第一缓存模块5中,然后由接口模块4从第一缓存模块5中读取对应的描述符对dma控制器3的dma功能进行配置。
[0062]
另外,在本实施例中,接口模块4功能仍然包括根据dma控制器初始化模块7和dma使能模块6输入的总线操作读写请求信号,地址信号和数据信号生成配置总线接口的信号和时序,并输出读/写操作完成信号给dma控制器初始化模块7和dma使能模块6,并输出总线读/写状态信号给两个模块,用于判断寄存器读/配置是否完成。实现用户侧总线接口配置的功能。
[0063]
dma控制器初始化模块7通过配置一系列的寄存器(dma控制器3上的寄存器)完成dma控制器3的初始化操作,包括dma的初始化、mtl的初始化和mac的初始化。在该模块中使用第二缓存模块8存储初始化配置信息,初始化配置基本固定不变,可以相应的rom实现。
rom的数据位宽为64,高32bits为配置的寄存器地址,低32bits为寄存器配置数据,深度为512。如果在系统运行中某个寄存器需要根据特别需求修改配置,比如版本信息等,那么可以使用cpu进行配置,配置方式灵活。dma使能模块6,由于dma控制器中只有一套配置总线接口,因此,发送dma启动操作和接收dma启动操作在一个状态机中配置,两个操作交替执行。首先判断是否有有效的描述符标志信号,在启动dma后清除该标志信号,然后配置dma启动。状态流程图如图8所示。
[0064]
在本实施例中,bmc系统中以太网控制的工作流程如下所示:(1)首先,系统上电启动或复位重启;(2)dma控制器初始化模块进行初始化操作;(3)内存中有数据需要发送或者接收远端数据到内存中,cpu在内存中按照以太网控制描述符的格式配置发送/接收描述符到驱动模块2或dma控制器3;(4)驱动模块2从内存中获取对应的描述符,并通过接口模块4根据对应的描述符配置dma控制器3中dma寄存器,启动发送/接收dma;(5)dma从内存搬运数据或者把数据搬运到内存;(6)dma搬运数据完成,产生中断,cpu响应中断;(7)开启下一次操作。
[0065]
需要说明的是,本发明仅仅是以以太网控制器中的dma模块进行举例说明,对于soc系统上的其他模块的dma功能同样适用,另外本发明中提出的dma驱动系统可以原生的方式融合到芯片领域中的其他具有dma功能的模块中作为其他模块的一部分。也可以通过驱动模块2实现soc芯片中多个具有dma功能的其他模块的配置工作。
[0066]
通过本发明提出的一种dma驱动系统,实现了一种区别于传统方式的dma启动方式,且保留cpu配置总线,满足灵活配置的需求。这种方式可降低总线配置延迟,提升系统性能,满足更大分辨率的远端监控功能,提升网络性能。
[0067]
如图2所示,本发明的另一方面还提出一种dma驱动方法,包括:步骤s1、通过控制模块将描述符发送到驱动模块和dma控制器;步骤s2、通过驱动模块基于所述描述符驱动所述dma控制器对内存进行数据访存和/或监控所述dma控制器的状态并根据所述状态向所述dma控制器发送使能命令。
[0068]
在本发明的一些实施方式中,通过驱动模块基于所述描述符驱动所述dma控制器对内存进行数据访存包括:接收所述控制模块发送的描述符并将所述描述符发送到第一缓存模块,以及基于所述第一缓存模块缓存的描述符按照预定策略将所述描述符中的内容发送到所述dma控制器。
[0069]
在本发明的一些实施方式中,监控所述dma控制器的状态并根据所述状态向所述dma控制器发送使能命令包括:通过dma使能模块根据所述dma控制器的状态向所述dma控制器发送使能命令。
[0070]
在本发明的一些实施方式中,方法还包括:通过接口模块获取所述dma控制器的运行状态将所述运行状态发送到所述dma使能模块,以及接收所述dma使能模块发送的使能命令并将所述使能命令发送到所述dma控制器。
[0071]
在本发明的一些实施方式中,方法还包括:通过所述接口模块对所述dma控制器进行初始化。
[0072]
在本发明的一些实施方式中,方法还包括:通过第二缓存模块保存所述dma控制器的初始化时的配置信息。
[0073]
在本发明的一些实施方式中,方法还包括:根据描述符优先级或控制优先级对所述控制模块和所述驱动模块与dma控制器的通信进行仲裁。
[0074]
如图3所示,本发明的又一方面还提出一种计算机设备,包括:至少一个处理器21;以及存储器22,所述存储器22存储有可在所述处理器21上运行的计算机指令23,所述指令23由所述处理器21执行时实现上述实施方式中任意一项所述方法的步骤。
[0075]
如图4所示,本发明的再一方面还提出一种计算机可读存储介质401,所述计算机可读存储介质401存储有计算机程序402,所述计算机程序402被处理器执行时实现上述实施方式中任意一项所述方法的步骤。
[0076]
以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
[0077]
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
[0078]
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
[0079]
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0080]
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献