适应多种时序的DMA控制器设计
态1、状态2、状态3、状态4。在状态4中,其会检查基带芯片的写信号host_dma_wr是否有效,如无效,其将从DMA存储器中读取当前地址的数据,然后再将DMA存储器的地址加1并进入状态5;如 host_dma_wr有效,则DMA控制器将等待一个时钟周期,在下个时钟的上升沿再去判断host_dma_wr的极性,若其失效再读DMA存储器。也就是说基带芯片对DMA存储器的操作有更高优先级,利用这个办法就可以使基带芯片和SD卡控制器可以尽量并行工作以加快写卡速度。在状态5中,DMA读状态机做如状态4的操作,这是因为dma_rdata的数据线宽度为32位,而dma_memory_data-out的数据线宽度是16位,所以必须要读2次DMA存储器再做一次DMA读传送。在状态6中,DMA状态机将向SD卡控制器发出dma_ack(数据使能信号)和dma- rdata[31:0],随后进入状态7。在状态7中,DMA状态机将做3个重要判断,首先其判断dma-cnt是否等于dma_num,如相等则意味着 SD卡控制器在本次多block操作中已经读取了全部5 120个字节数据,状态机将回到初始状态以准备下一次DMA操作;若不相等,则判断dma_c-nt是否等于dma_in_cnt,若dma_cnt等于 dma_in_cnt,则意味着基带芯片写入DMA存储器的所有数据均已被SD卡控制器读出,DMA存储器已经为空,但数据量还没有达到5 120字节,DMA状态机将进入状态8即等待状态,只有基带芯片写入新的数据后,SD卡控制器才能回到状态4继续读取数据,这个分支主要是应用于SD卡控制器写卡速度快于基带芯片写DMA存储器的情况;若dma_cnt不等于dma_in_cnt,则DMA状态机将检查dma_req信号的极性,如其为 1,状态机将转至状态4读取下一个32位数据,如为0则意味着此时SD卡控制器写卡的速度要慢于DMA读数据的速度,其前面通过DMA接口读出的数据还没有完全写入SD卡,所以SD卡控制器将暂停从DMA存储器中读取数据,DMA控制器的状态机也将在状态7处于等待状态,等待dma_req重新为1。当 dma_req再次为1后,状态机将回到状态4开始新的32位数据的DMA读操作。最后,当第5 119和5 120个字节被从DMA存储器读出后,DMA状态机将在状态7中检查到dma_cnt=dma_num,标志至此,DMA状态机完成了一次DMA读操作的全过程。SD卡控制器将向基带芯片发出中断信号,基带芯片响应该中断后将启动下一个读卡或写卡的命令。其读状态流程图如图2所示。
2.2.2 multiple block read
在该图像协处理器中每次multiple block read要从卡读出10个block数据并将其全部写入DMA存储器当中。当处于初始状态(状态0)的DMA状态机发现dma_req为1且 dma_write信号为1时,即明确SD卡控制器将开始DMA写操作,其将依次进入状态1、状态2、状态3、状态4。在状态1中,DMA状态机会向SD 卡控制器发出dma_ack信号,由于存储器读存在延时,SD卡控制器将在此后的第二个时钟上升沿(即DMA状态机在状态3时)送出dma_wdata。 DMA控制器将dma_wdata暂存一个时钟周期后,会在状态4和状态5中把此32位数据依次写入DMA存储器,dma_memory_addr也将在这两个状态分别加1。在状态7中,DMA控制器也将做2个判断,首先会判断dma_cnt和dma_num是否相等,若相等说明本次 multipleblock read的全部5 120字节数据已经写入DMA存储器中,DMA状态机将回到状态0等待下一次DMA操作指令;若不相等,则判断dma_req是否为1,如果为1则意味着继续做本次DMA写操作,DMA状态机也将回到状态1,开始下一个32位数据的写入;如果dma_req为0则说明SD卡控制器读卡的速度较慢,暂时还没有新的32位数据要写入,DMA状态机也将在状态7处于等待状态,直至dma_req再次为1,状态机才回状态1,开始写入下一个32位的数据。最后当 DMA控制器在状态7时发现dma_cnt和dma_num相等,意味这本次DMA操作已经完成,SD卡控制器也将向基带芯片发出中断信号,基带芯片响应该中断后将从DMA存储器中读取此5 120字节数据。其写状态流程图如图3所示。
- 基于TPS65105 的TFT-LCD电源设计方案(06-10)
- 轻松实现复杂电源时序控制(07-11)
- 基于单片机的模拟开关时序设计与仿真(05-16)
- 理论与实践:随机噪声对时序抖动的影响(06-22)
- 如何收敛高速ADC电路(08-28)
- 利用MEMS惯性传感器改善控制(09-08)