具体实施方式
通过下面结合示例性地示出一例的附图进行的描述,本发明的上述和其他目的和特点将会变得更加清楚。
依照高保真音频(High Definition Audio)规范,所有数据都必须通过直接存储器访问(简称DMA)控制器传输至设备(例如音箱、电话、麦克风等)或由设备输出至系统内存。如图1所示,通常符合高保真音频规范的计算机系统包括中央处理器10、计算机系统的内存11、用以控制内存11各项操作的内存控制器12、用以控制高保真音频传输的高保真音频控制器13、设在高保真音频控制器13内的DMA控制装置14及设备15~17。内存控制器12可以通过系统总线与高保真音频控制器13沟通。设备15~17可以为录音设备,也可以为播放音频的装置,且设备15~17通常分别设有通过高保真音频总线(HighDefinition Audio Link)与高保真音频控制器13沟通的数据信号转换译码器(codec)(例如,音频codec,modem codec等),用于对音频数据进行编译码处理。
如图2所示,可用于放音或录音的设备15~17与内存11通过多个相互独立的音频流(stream)S1~S3传输数据,音频流可以是由内存11输出并分别通向设备15~17(例如音频流S3),也可以由设备15~17其中一个通向内存11(例如音频流S2)。每一音频流必须通过相应的DMA控制器14与内存11连接。为建立DMA控制器音频子系统,内存11设有n个分别供DMA控制器1~n访问的缓冲描述符列表(Buffer Descriptor List)BDL 1~n及n个分别与缓冲描述符列表BDL1~n相对应的数据存储区1~n。每一缓冲描述符列表包含至少两个缓冲描述符列表入口(Buffer Descriptor List Entry)BDLE1~n(n≥2),每一数据存储区包含至少两个数据块1~n(n≥2)。每一缓冲描述符列表入口BDLE1~n包含一数据块基址(内存基址)及该数据块的长度,也就是说,通过读取缓冲描述符列表入口BDLE 1~n可获得一相应数据块的基址及数据块长度。因而,当需要进行数据传输时,DMA控制装置14首先驱使DMA控制器1~n至一相应的缓冲描述符列表BDL1~n读取一缓冲描述符列表入口BDLE,并在通过该缓冲描述符列表入口BDLE获得一数据块的内存基址及数据块长度后驱使DMA控制器依据该内存基址存取一定长度的数据。
图3所示为本发明一个实施例的DMA控制装置14与内存11沟通的框图。假设内存11设有8个缓冲描述符列表110、8个数据存取区111、一响应数据区112及一指令数据区113。DMA控制装置14包含一放音模组20、一录音模组21、一指令模块22、一响应模块23、第一放音DMA控制器241、第二放音DMA控制器242、第三放音DMA控制器243、第四放音DMA控制器244、第一录音DMA控制器251、第二录音DMA控制器252、第三录音DMA控制器253、第四录音DMA控制器254、一指令DMA控制器26、一响应DMA控制器27及一仲裁器28。
放音模组20包含四个放音数据处理模块201~204,其分别与第一放音DMA控制器241、第二放音DMA控制器242、第三放音DMA控制器243、第四放音DMA控制器244相对应。每一放音数据处理模块201~204均设有一暂存器2011、一参数寄存器2012以及一处理逻辑2013。暂存器2011用于存储从内存11读出的数据。参数寄存器2012用于存储各项传输参数。传输参数可包含数据块长度、BDL基址、BDL指针、内存基址、数据块指针及传输数据长度(burst length)。显然,数据块的剩余数据长度=数据块长度-数据块指针。处理逻辑2013到参数寄存器2012中读取传输参数并通过计算数据块的剩余数据长度决定发送一读取数据请求或是一读取BDLE请求。举例来说,若数据块的剩余数据长度=0,则处理逻辑2013发送一读取BDLE请求以驱使相应的放音DMA控制器241~244依据读取BDLE请求至相应的缓冲描述符列表BDL1~4读取一缓冲描述符列表入口BDLE。另一方面,若数据块的剩余数据长度大于0,则处理逻辑2013发送一读取数据请求,则相应的放音DMA控制器241~244依据接收的读取数据请求至内存11中读取一数据块中的数据。处理逻辑2013在通过取回的缓冲描述符列表入口BDLE获得一内存基址及一数据块长度后,随即更新参数寄存器2012中的相应传输参数,即内存基址、数据块指针及数据块长度,并驱使相应的放音DMA控制器241~244依据该内存基址及数据块长度读取相应数据块的数据。
类似地,录音模组21包括四个录音数据处理模块211~214,分别与第一录音DMA控制器、第二录音DMA控制器、第三录音DMA控制器、第四录音DMA控制器相对应。每一录音数据处理模块211~214设有一暂存器2111、一参数寄存器2112以及一处理逻辑2113。暂存器2111用以存储将要写入内存11的数据。处理逻辑2113用以决定发送一写入数据请求或是发送一读取BDLE请求。录音DMA控制器251~254依据录音数据处理模块211~214发出的请求将数据写入相应的数据块或是到内存11中读取缓冲描述符列表入口BDLE。
指令模块22包含一暂存器221、一参数寄存器222及一处理单元223。当中央处理器10(图1)有指令需要发送给设备15~17时,会将指令存储在内存11预先分配的指令数据区113内,而指令数据区113的基址在中央处理器配置DMA控制装置时已写入参数寄存器222中。因而,当设备15~17需要执行中央处理器10发出的指令时,会发出一读取指令请求给指令模块22,指令模块22的处理单元223随后至参数寄存器222中读取传输参数,并驱使指令DMA控制器26依据传输参数中的内存基址至内存11的指令数据区113读取指令。也就是说,处理单元223不需要通过读取BDLE获得内存基址。
与指令模块22相类似,响应模块23也不需要通过读取BDLE获取内存基址。响应可以是对中央处理器10发送的指令做出的响应(solicited)也可以是设备15~17主动发出的响应(unsolicited)。内存11中分配有专用于存储设备15~17写入的响应数据的响应数据区112,且响应数据区112的内存基址已写入参数寄存器232内。当设备15~17需要写入响应数据时,会发送一写入响应请求至响应模块23,并将响应数据暂存入暂存器231中。处理单元233驱使响应DMA控制器27依据响应数据区112的内存基址将响应数据写入响应数据区112。
由以上描述可知,当设备15~17需要读取数据或者需要将数据写入内存11时,放音模组20、录音模组21、指令模块22或是响应模块23将会发出相应的请求,亦即读取BDLE请求、读取数据请求、写入数据请求、读取指令请求或写入响应请求至对应的DMA控制器,而DMA控制器则发出相应的DMA传输请求至仲裁器28。仲裁器28根据各DMA控制器所发出的DMA传输请求的优先级决定执行DMA传输的顺序。
图3所示本发明一实施例的DMA控制装置包括若干独立的DMA控制器,若干放音数据处理模块及若干录音数据处理模块。每一放音、录音数据处理模块均设有一个独立的处理逻辑用于判断发出何种请求以及更新传输参数。由于处理逻辑具备运算传输参数的功能,因而需要较多的逻辑门才能实现。
图4所示为本发明另一实施例的DMA控制装置与内存沟通的框图。
本发明中的内存8可看作第一存储装置,设备9则可看作第二存储装置,DMA控制装置4位于第一存储装置、第二存储装置之间执行第一存储装置、第二存储装置间的DMA数据传输。
如图4所示,本发明的DMA控制装置4包括一数据处理模块6及一DMA控制器5。数据处理模块6设有若干用于判断是否需要发出数据传输请求的处理逻辑。在本实施例中,假设数据处理模块6包含4个放音模块60~63、4个录音模块64~67、一指令模块68及一响应模块69。其中,每一放音模块60~63包含一放音处理逻辑610~613及一用于暂存放音数据的数据暂存器600~603。每一录音模块64~67包含一录音处理逻辑614~617及一用于暂存录音数据的数据暂存器604~607。指令模块68包括一数据暂存器608及一指令逻辑618。响应模块69包括一数据暂存器609及一响应逻辑619。于本发明中,中央处理器10在内存8配置有8个缓冲描述符列表81以及8个分别与缓冲描述符列表相对应的数据存储区82。其中,缓冲描述符列表81的BDL1~4分别对应于4个放音模块60~63,BDL5~8分别对应4个录音模块64~67。
放音处理逻辑610~613或录音处理逻辑614~617通过侦测数据暂存器600~607中的数据存储状况来决定是否发出DMA传输请求至DMA控制器5。于本实施例中,假设当放音处理逻辑610~613侦测到用于暂存放音数据的数据暂存器600~603还差一定长度的数据才满,则发出一读取数据请求。假设当录音处理逻辑614~617侦测到用于暂存录音数据的数据暂存器604~607已存储有一定长度的数据,则发出一写入数据请求。与图3的处理单元223、233相比,指令逻辑618与响应逻辑619不需要自行读取传输参数,只需要在中央处理单元10有指令发出或者设备9有响应数据需要传输时发出响应的DMA请求至DMA控制器5。
DMA控制器5包括:一仲裁器50、一存储模块51以及一运算模块53。运算模块53耦接于存储模块51,包括一计算单元531以及一存取单元532。如本领域的熟练技术人员所知,仲裁器50内可设置一状态机,用于判断数据处理模块6发出的DMA传输请求的优先级。
在本实施例中,DMA控制器5的存储模块51设有10个分别存储传输参数的存储空间511~520。其中,存储空间511~514的所存储的传输参数分别与第一放音模块60、第二放音模块61、第三放音模块62、第四放音模块63发出的读取数据请求相对应,存储空间515~518所存储的传输参数分别与第一录音模块64、第二录音模块65、第三录音模块66、第四录音模块67发出的写入数据请求相对应。存储空间519的传输参数与指令模块68发出的读取指令请求相对应。存储空间520的传输参数与响应模块69发出的写入响应请求相对应。存储模块51可以是静态随机存取存储器(SRAM)也可以是一组寄存器。于本实施例中,存储在存储空间511~520中的参数可包括,但不限于,缓冲描述符列表基址(例如BDL1的基址)、BDL指针(例如,指向BDL1的缓冲描述符列表入口BDLE1)、内存基址(例如BDLE1所对应的第1数据块的基址)、内存指针、数据块长度(第1数据块的长度)、传输数据长度(burst length)及读写标示。在执行第一笔DMA传输前存储空间511~518的BDL指针、内存基址、数据块指针及数据块的长度均为零,BDL基址、传输数据长度、及读写标示则已由中央处理器10(图1)预先写入。存储空间519,520的内存基址与数据块长度,即指令数据区83及响应数据区84的基址与长度,已由在中央处理器10写入。
运算模块53根据仲裁器50的仲裁结果至存储模块51读取一组相应的传输参数。为了使DMA控制器能够依据DMA传输请求存取够一定长度的数据,运算模块53的计算单元531需要做以下的动作:通过计算数据块剩余数据长度来判断需要读取缓冲区描述符列表入口还是直接读取数据;通过计算缺少数据长度Y来判断是否读取新的缓冲描述符列表入口BDLE-New,或是为下一次传输预取(pre-fetch)新的缓冲描述符列表入口BDLE-Pre;在读取缓冲描述符列表入口后更新传输参数;以及在完成数据传输完毕后更新传输参数。
具体来说,计算单元531可通过数据块长度与内存指针计算数据块剩余长度,数据块剩余数据长度X=数据块长度-内存指针。若数据块剩余数据长度X=0,则计算单元53驱使存取单元532依据BDL基址+BDL指针至相应的缓冲描述符列表BDL1~8读取一缓冲描述符列表入口,并更新缓冲描述符列表指针。若数据块剩余数据长度X≠0,则计算单元531驱使存取单元532依据内存基址+内存指针进行数据传输(读取一数据块的数据或是将数据写入数据块中),并在完成数据传输后更新内存指针。
请参阅图5,假设第一放音处理逻辑610发出一放音请求,且其优先级最高,因而计算单元531至存储空间1中取出一组与该放音请求对应的传输参数的值。为方便说明,假设BDL1包含有3个缓冲描述符列表入口BDLE 1、BDLE 2及BDLE 3,分别对应第1数据块、第2数据块及第3数据块,其中第1数据块的长度为D1=4DW(double word),第2数据块的长度为D2=2DW,第3数据块的长度D3=4DW。进一步假设此时存储空间1的传输参数的值如下:数据块长度的值=D1=第1数据块的长度=4DW,BDL基址的值=A=BDL1的基址,BDL指针的值=E=指向缓冲描述符列表入口BDLE1的指针的值,内存基址的值=B1=第1数据块的内存基址,内存指针的值=C=当前第1数据块的内存指针的值=2,传输数据长度的值=F=4DW,及读写标示的值=H。根据以上假设,计算单元531计算出剩余数据长度X=D1-C=2DW,因而计算单元531驱使存取单元532至第1数据块读取剩余的2DW数据,并在完成数据传输后更新内存指针C=C+2。
请继续参阅图4,当数据块剩余数据长度X≠0时,计算单元531还需要通过一所需数据长度M及剩余数据长度X来计算缺少数据长度Y,缺少数据长度Y=所需数据长度M-剩余数据长度X。在运算模块53依据读取的传输参数进行第一笔数据传输时,所需数据长度M=传输数据长度。若缺少数据长度Y=0,则表示这一笔数据传输恰好将当前存取的数据块的数据取完或是写满。计算单元531驱使存取单元532预取新的缓冲描述符列表入口BDLE-Pre,并更新BDL指针,将内存指针清零,同时将预取的缓冲描述符列表入口所对应的数据块的内存基址、数据块长度写入相应的存储空间511~518。若缺少数据长度Y<0,则表示在执行完这一笔数据传输后,当前被存取的数据块还剩余有数据,因而只需要更新内存指针而不需要读取新的缓冲描述符列表入口。若缺少数据长度Y>0,表示在存取第1数据块的剩余数据后还缺少Y长度的数据(还有Y长度的数据未写入内存8)。计算单元531驱使存取单元532读取新的缓冲描述符列表入口BDLE-New,更新BDL指针,并将缓冲描述符列表入口BDLE-New所对应的数据块的数据块长度及内存基址写入相应的存储空间511~518,同时将内存指针清零。此时,所需数据长度M=缺少数据长度Y,计算单元531驱使存取单元532进行第二笔数据传输,即依据新的内存基址+内存指针至缓冲描述符列表入口BDLE-New所对应的数据块中读取Y长度的数据或将Y长度的数据写入数据块中。在完成第二笔数据传输之后,缺少数据长度Y=所需数据长度M-缓冲描述符列表入口BDLE-New对应的数据块的长度。计算单元531将重复以上操作直到缺少数据长度Y≤0,以存取单个DMA传输请求所要求的数据长度。
请再次参阅图5,举例来说,在计算单元531驱使存取单元532存取第1数据块剩余的2DW数据时,所需数据长度M=传输数据长度=F=4DW。也就是说此时的缺少数据长度Y=所需数据长度M(4DW)-剩余数据长度X(2DW)=2DW。缺少数据长度Y>0,因而计算单元531驱使存取单元532读取缓冲描述符列表入口BDLE2,更新BDL指针为E=E+1,更新内存指针为C=0。计算单元531通过描述符BDLE2得知第2数据块的数据块长度的值=D2=2DW及第2数据块的内存基址的值=B2。此时,所需数据长度M=缺少数据长度Y=2DW,剩余数据长度X=D2=2DW,计算单元531驱使存取单元532依据第2数据块的内存基址B2至第2数据块中读取2DW的数据,并在完成数据传输后更新内存指针为C=C+2。这时,缺少数据长度Y=所需数据长度M(2DW)-剩余数据长度X(2DW)=0,计算单元531驱使存取单元532预取BDLE3,将BDLE3对应的第3数据块的内存基址B3、数据块长度D3(4DW)写入存储空间511,并更新存储空间511的BDL指针为E=E+1,更新内存指针为C=0。通过以上操作,DMA控制器5依据第一放音处理逻辑610发出的放音请求读取了4DW数据,并且预取了BDLE 3,因而当第一放音处理逻辑610再次发出一放音请求时,DMA控制器5不需要先读取BDLE3再读取数据。
于本实施例中,内存8中还分配有一DMA存储位置80,中央处理器10可通过访问DMA存储位置80了解DMA传输状况。计算单元531可通过传输参数中的读写标示得知DMA控制器5所接收的DMA传输请求是否为一写入请求,若是,则在依据该请求完成DMA传输后将更新后的内存指针回写(write back)入内存8的DMA存储位置80。然而。若DMA控制器5接收的传输指令为读取(read)指令,则计算单元531在更新内存指针之后不需要回写更新后的内存指针。
如前所述,若DMA传输请求是由指令逻辑618或响应逻辑619所发出,则计算单元531直接依据存储在存储空间519,520的内存基址驱使存取单元532到内存8的指令数据区83中读取数据或是将数据写入响应数据区84,而不需要读取缓冲描述符列表入口。
图6为本发明DMA传输方法的流程图。
在执行DMA传输前,中央处理器需要配置DMA控制装置4,并且将缓冲描述符列表BDL1~8的基址、传输数据长度、读写标示写入相应的存储空间511~518,将指令数据区83及响应数据区84的内存基址写入存储空间519~520。其它传输参数的初始值均为零。
首先,DMA控制器5收到至少一个由数据处理模块6发送的DMA传输请求(步骤S501)。接着,仲裁器50裁决DMA传输请求的优先级并发送仲裁结果至运算模块53(步骤S502)。
运算模块53的计算单元531依据仲裁结果至存储模块51读取一组相应的传输参数(步骤S503)。随后,计算单元531对传输参数进行运算以判断是否需要读取缓冲描述符列表入口(步骤S504)。例如,计算单元531可通过数据块长度、内存基址以及内存指针计算出该数据块的剩余数据长度,若剩余数据长度为零,则读取新的缓冲描述符列表入口,反之,若剩余数据长度不为零,则进行数据传输。若需要读取缓冲描述符列表入口,则执行步骤S511,存取单元532依据计算结果到内存8中读取一缓冲描述符列表入口;若否,则执行步骤S505,计算单元531驱使存取单元532依照传输参数至内存8中读取相应数据块中的数据或将数据写入相应的数据块中。在读取缓冲描述符列表入口后,计算单元531更新传输参数中的BDL指针(步骤S512),并驱使存取单元532进行数据传输(步骤S505)。在完成数据传输后,计算单元531更新传输参数中的内存指针(步骤506)。
其后,执行步骤S507,计算单元53判断是否已存取所需数据长度。若未存取够所需数据长度,即存取的数据长度小于所需要的数据长度,则读取一新的缓冲描述符列表入口(步骤S511),并依序执行步骤S512、S505。若已经存取够所需要数据长度,则执行步骤S508,接着判断当前存取的数据块是否被取空或是写满。若当前存取的数据块已被取空或是写满,则计算单元531驱使存取单元532预取一新的缓冲描述符列表入口(步骤S513),随后更新BDL指针(步骤S514)。
在步骤S508判断结果为否及步骤S514之后执行步骤S509,根据读写标示判断是否需要回写内存位置,若是,则将更新后的内存指针回写到DMA存储位置80(步骤S510)并结束本次DMA传输,若否,则直接结束本次DMA传输。
由以上描述可知,图4所示的数据处理模块6只需要根据数据存取状况决定是否需要发出DMA传输请求,因而不需要设置多个独立的用于计算及更新传输参数的处理逻辑。此外,图3中的多个独立DMA控制器整合为一个独立的DMA控制器5,该整合后的DMA控制器5中存储有多组互相独立的传输参数,运算模块53可根据仲裁结果计算、更新传输参数以控制DMA传输。这使得本发明的DMA控制装置仅设有一个可以被数据处理模块6中的多个放音模块及录音模块共用的运算模块,从而可以减小DMA控制装置的面积,使得成本降低。另外,整合后的DMA控制器支持预取缓冲区描述符列表入口、DMA存储位置回写,使得本发明的DMA控制装置可以进行高效的DMA数据传输。
本发明的DMA控制装置可设在计算机系统的南桥或南北桥整合的芯片组内。本领域的熟练技术人员在进行简单的逻辑设计后即可将本发明的多个独立DMA控制器整合为一个DMA控制器的设计应用到符合其他规范的计算机系统中,例如,串行高级技术附件(SATA),通用串行总线(USB)等。也就是说,在一计算机系统中可以设有多个符合SATA规范的专用DMA控制器,分别用于控制相应SATA设备的数据传输,其中,SATA设备通过相应的SATA总线与计算机系统的DMA控制器相连接以进行数据传输。在这种情形下,可以依据本发明的设计将多个DMA控制器整合为一个可由多个SATA设备复用的DMA控制器。
如图7所示,SATA设备1~N分别通过相应的SATA总线1~N与DMA控制装置70连接,以直接读取内存71中的数据。DMA控制装置包括一DMA控制器72以及若干个SATA接口1~N,分别用以接收SATA设备1~N发出的指令与数据。与图4所示DMA控制器5相类似,本实施例DMA控制器72包含仲裁器73,存储模块74以及运算模块75。存储模块74由存储空间1~N组成,分别存储与SATA设备1~N进行DMA传输有关的参数,例如,BDL基址、传输数据长度等。如本领域技术人员所知,具体参数的设定需要与SATA传输规范相适应。
下面以图7的SATA设备1为例来说明DMA控制装置70如何进行数据传输。当SATA设备1需要将数据写入内存71时,会发出一写入数据请求给DMA控制装置70。随后,DMA控制装置70的SATA接口1由SATA总线1接收写入数据请求,暂存即将写入内存71的数据,并发出一DMA传输请求至仲裁器73。假设此时SATA接口1发出的DMA传输请求优先级最高。运算模块75随即至存储模块74的存储空间1中读取相应的传输参数,并对获得的传输参数进行计算以判定需要发出何种指令至内存控制器(未图示),例如发出一读取BDLE指令,或者发出一将数据写入指定地址的写入指令。与之前描述相类似,内存控制器随后将依据接收的指令读取BDLE或是将数据写入内存71中。若DMA控制装置发出的指令为读取BDLE指令,则运算模块75通过译码读取的BDLE指令获得相应数据区块的参数,并进一步依据该参数发出一写入数据指令,以将SATA设备1送出的数据写入内存71中。
如图8所示,若将本发明的设计应用到符合USB规范的系统中,则其架构与图7所示的SATA系统相类似,不同之处在于多个USB设备1~N是分别通过USB总线与USB接口相连接以进行数据传输。如前所述,存储于DMA控制器的存储模块内的DMA传输参数也会做相应修改以适应USB规范,在此将不再赘述。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。