一种基于CPLD的DMA控制器IP核设计
扫描二维码
随时随地手机看文章
1、前言
单片机以其高可靠性,高性能价格比,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用。在单片机家族的众多成员中,MSC一51系列单片机占领了广阔的市场,成为国内单片机应用领域的主流。
但是由于8013硬件结构和指令系统的限制,当需要高速率大批量数据传送时,数据吞吐速率往往不能满足设计要求。即使采用提升振荡器频率的办法,结果仍不尽如人意,所以寻找一种新的数据传输方法显得很有必要,这不仅使人想到通用计算机的DMA数据传输技术。
2、DMA简介
DMA数据传送是由DMA控制器完成的。进行数据传输时,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和FO设备之间进行。DMA控制器将向内存发出地址和控制信号,修改地址,对传送字的个数计数,并且以中断方式向CPU报告传送操作的结束。
DMA方式的主要优点是速度快。由于CPU不参与数据传送操作,因此就省去了CPU取指令、取数、送数等操作。在数据传送过程中,没有保存现场、恢复现场之类的工作。内存地址修改、传送字个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。所以DMA方式能满足高速FO设备的要求,也有利于CPU效率的发挥。
3、标准8031数据传输与DMA数据传输对比
MCS一15单片机读写外部数据存储器的时序如图1所示。
在图(1)a的外部数据存储器读周期中,P2口输出外部RAM单元的高八位地址,P0口分时传送低八位地址及数据。当地址锁存信号ALE为高电平时,印口输出的地址信息有效,A比的下降沿将此地址打人外部地址锁存器,接着即口变为输人方式,读信号RD有效,选通外部RAM,相应存储单元的内容送到印口上,由CPU读人累加器。
外部数据存储器的写周期波形如图(1)b所示,其操作过程与读周期类似。写操作时,在A比下降为低电平以后,WR信号才有效,PO口上出现的数据写人相应的RAM单元。
CPU把数据从存储器传输到FO口,需要以下步骤:
·MovxA,@DPrR;从存储器读取一字节数据(24个振荡周期)
·MOVX@DPrR,A;将数据写人到FO口(24个振荡周期)
DMA控制器把数据从存储器传输到FO设备称为读传送,在这个周期里,产生存储器地址,并输出存储器读(MEMR)和10口写(row)信号。其时序如图2所示。
当数据准备好以后,设备向DMA控制器发出DMA请求DREQ信号,DMA控制器接到请求后向CPU发出总线请求信号HRQ,CPU在现行的机器周期结束后,发出总线保持信号HLDA,于是DMA控制器就接管总线,向地址总线发出地址信号,给出存储器读和ro口写的命令,就可把存储器中的数据送到FO口上。然后修改地址指针,增或减数据宽度计数器,检查传送是否结束,若未结束则循环至整个数据传送完。
整个数据传送完后,DMA控制器撤销总线请求信号HRQ,同时输出传送结束信号EOP。CPU接收到EOP信号后,在下一个周期就可以重新控制总线。
从以上对比分析可以看出,从存储器往FO口传送一字节数据,使用标准8031至少需要48个振荡周期,而用DMA控制器仅需2个振荡周期,效率大大高于前者,尤其是在做块传送时,效果更为显著。
4、用CPLD实现DMA传输在显示屏扫描卡上的应用
显示屏扫描卡的功能是将存储在RAM中的图像数据按照预定的显示方式进行处理,再发送到比D显示屏上。其中绝大部分时间,CPU的工作是将处理好的数据以很高的速率发送到LED显示屏上,来保证良好的视觉效果。
考虑到系统的简化、灵活、高集成度,这里选择用CPLD实现CPU停机方式DMA读传输功能来完成数据从存储器到LED显示屏的传送工作。
整个数据传输工作分以下几个步骤:①CPu准备数据;②CPU配置DMA控制器。例如数据传送首地址,传送字节数;③CPU向DMA控制器提出DMA请求(DREQ)。由于数据准备工作是由CPU完成的,所以传送请求也由CPU提出;④DMA接到请求后,向CPU提出总线请求(HRQ);⑤CPU释放总线,同时向DMA发出总线保持信号(HLDA);⑥DMA接管总线,进行数据传输。
由于本系统中准备数据是由CPU完成的,也就是说CPU完全清楚何时需要释放总线进行DMA传送,所以可将步骤3、4省略,即DREQ和HRQ信号省略。其原理图如图3所示。
图3中,CTRL为中心控制核,它按照设定的传输字节数产生地址计数脉冲CLK,读信号MR(该信号经742科驱动后成为存储器读和FO口写信号),传输结束信号EOP。CTRL内部定义了一个8位锁存器和一个9位减法计数器。WIDTH为置数控制端,当饥DTH为低电平时,数据总线上的传送字节数送入CTRL中,WID仪为高电平时数据锁存。EN为计数使能,为高时传送字节数送人9位减法计数器的高8位中,减法计数器的最低位置0,同时CTRL将EOP脚(传送结束信号)置高,EN变低后,减法计数器在时钟XT下降沿作用下做减1计数,计数值减到0时CTRL停止减计数并将EOP信号置低,通知CPU传送结束。其控制时序如图4所示。
cTRL的vHDL程序
BEGIN
cKL<=cnt(0);一地址计数脉冲输出
MEMR<=NOTcnt(0);一RAM读信号输出
PROCESS(WIDTH)
BEGIN
FIiwDTH=0’THEN一置人传送字节数
图3中,COUNT16是16位加法计数器。DPH、DPL是地址高8位和低8位置数控制端,低电平有效。EN为计数使能,为低时,在由CTRL产生的脉冲作用下做加1计数。
平时CPU具有地址总线的控制权,DMA控制器的地址线A15一AO、存储器读MEMR、FO口写IOW输出均为高阻。当需要做DMA数据传送时,首先CPu将传送的数据宽度、被传送数据在存储器的首地址写人DMA控制器,然后将HDLA置高,让出地址总线控制权。DMA控制器检测到HLDA变高后,cTRL按照预定的传送数据宽度,输出地址计数脉冲和数据存储器读信号MEMR,couN1T6在地址计数脉冲作用下,在首地址基础上做加1计数,输出16位地址。当数据传送完毕,EOP输出低电平,通知CPU数据传送结束。CPU通过查询或中断方式检测到EOP的低电平信号后,将HLDA拉低,DMA控制器接到HDLA变低的信号后将EOP信号置高,释放地址总线控制权,结束整个DMA传送过程。图5是DMA控制器的仿真波形图。
8031操作DMA控制器的5C1程序
void DMA(unsigned int address,unsignedcha
len){
WIDTH
ADDL
=len;/*设置传送数据宽度*/
=(unsi卯edchar)address%256;/*设置传送数据首地址*/
ADDH=(unsignedchar)address/256;
EN=0;/*启动DMA传送*/
while(IN功==1);/*等待传输结束*/
EN=1;
5、结束语
以上所阐述的只是DMA控制器的一种使用特例,真正的DMA控制器功能要更为强大,但对于显示屏扫描卡来说,这些已经完全能够实现系统要求了,并且使数据传输速率有了显著的提高。