Coo1Runner-Ⅱ器件实现SRAM控制器

时间:2008-09-19
  DMA传输时,16位的SRAM用来存储来自CPU/IDE的数据。SRAM分为两个块,分别是Buffer1(0x00~0xff)和Buffer2(0x100~Oxlff)。
  如图所示为SRAM控制器状态机,读写SRAM都是由此状态机完成的。

SRAM控制器状态机


  如图 SRAM控制器状态机
  DMA访问SRAM的优先级高于CPU。当DMA状态机正在访问SRAM时,如果发生CPU请求SRAM访问,连接到CPU的ready信号将一直保持低电平,等待DMA完成;当DMA访问SRAM时,ready信号有效,告诉CPU可以操作。每个状态描述如下。
  (1)IDLE
  没有读/写操作时,SRAM状态机默认在空闲状态。在此状态下,读/写使能信号及片选信号都将处于无效状态,并且用于控制SRAM读/写周期访问时间的计数器被复位为0。
  (2)READ
  如果CPU/DMA有读请求,状态机进入READ状态。在此状态下,计数器在每个时钟上升沿加1。 SRAM读使能信号、片选信号有效及地址线在读周期有效。当计数值为5时,从SRAM中读出的数据被锁存,状态机再次进入IDLE状态。
  (3)WRITE
  如果CPU/DMA有写请求,状态机进入WRITE状态。在此状态下,计数器在每个时钟上升沿加1。SRAM读使能信号及片选信号有效,将要被写入到SRAM的数据被送到SRAM数据总线。一旦计数器计数值为5,状态机再次进入IDLE状态,写操作完成。
  (4)PIO状态机和DMA状态机
  PIO状态机和DMA状态机控制CPU与IDE间的数据传输,如图所示为PIO状态机。

PIO状态机


  如图 PIO状态机
  PIO模式通过操作寄存器块实现对IDE的读/写,一个循环周期为614 ns,共有8个状态,各状态描述如下。
  ● IDLE:复位时状态机进入空闲状态,此时DIOW_N/DIOR_N为高电平。如果CPU发
  送读/写命令给命令寄存器,状态机将会转入SETUP_START状态。
  ●SETUP_START:在此状态下,Count计数器装入初值0x8,以确定地址与DIOR_N/DIOW_N之间建立时间关系。DIOR_N/DIOW_N保持高电平,此状态持续一个时钟周期。
  ● SETUP:此状态一直持续到地址与DIOR_N/DIOW N之间建立时间关系满足(计数器值
  为0)。每个时钟下降沿计数值减1,一旦计数器值为0,状态机转入Pt凡SE START状态。
  ● PULSE_START:在此状态下,计数器装入初值0xlD,以确定DIOR_N/DIOW_N脉冲宽
  度(297 ns)。如果命令寄存器中写命令位被置位,则DIOW_N有效;如果命令寄存器中读命令位被置位,则DIOR_N有效,此状态持续一个时钟周期后进入PULSE状态。
  ●PULSE状态:此状态一直持续到DIOR_N/DIOW_N宽度满足(计数器值为0)。在此状态下,每个时钟下降沿计数器减1,一旦计数器值为0,状态转入HOLD_START状态。并且如果是写,则CPU数据被送到DE数据总线;如果是读,当DIOR_N变高,来自IDE总线的数据被锁存到PIO读/写数据寄存器。
  ●HOLD_START:在此状态下,计数器装入0x15,以确定DIOR_N/DIOW_N与地址总线之间的保持时间关系(144 ns),并且DIOR_N和DIOW_N驱动为高电平。此状态持续一个时钟周期,之后转入HOLD状态。
  ●HOLD:HOLD状态一直持续到DIOR_N/DIOW N与地址总线之间的保持时间满足(计数器值为0)。在此状态下,每个时钟下降沿计数器减1。DIOR_N和DIOW_N保持高电平。一旦计数器值为0,则转入END状态。
  ●END:在此状态下,DIOR N和DIOW_N保持高电平,自动转入IDLE状态。
  如图所示为DMA状态机。

DMA状态机


  如图 DMA状态机
  DMA模式有个DMA时序模型,它随用户的不同参数配置而具有不同时序性能。DMA状态机通过管理控制状态寄存器块和SRAM控制器来执行对IDE的读/写操作,有3种操作模式,即模式0、模式1和模式2。这个状态机共有11种状态,分别描述如下。
  ● IDLE:复位时,状态机进入IDLE状态。在此状态下,DIOR N、DIOW N和DMACK N信号保持为高。此时如果DMARQ有效,并且DMA模式使能,状态机会检测命令寄存器的读/写命令是否有效。如果是写命令位为1并且SRAM状态位为1,则读使能被发送到SRAM控制器,从SRAM读出数据写入到IDE。一旦数据有效,SRAM状
  态机转入SETUP_START状态;如果读命令位为1,并且SRAM状态位为0,则状态机转入SETUP_START状态。
  ● SETUP_START:在此状态下,Count计数器装入初值(模式不同,则初值不同),以确定DMACK N与DIOR N/DIOW_N之间的建立时间关系,并且DMACK N被置为高。如果写命令位和SRAM状态位均为1,那么状态机会产生一个读使能给SRAM控制器。如果读地址为Buffer1的一个地址,则SRAM状态寄存器的Bit0被清零;如果读地址为Buffer2一个地址,则SRAM状态寄存器的Bit1被清零。SETUP_START状态持续一个时钟周期后转入SETUP状态。
  ● SETUP:状态机保持在SETUP状态,直到满足地址与DMACK_N及DIOR_N/DIOW_N之间的建立时间。在此状态下,每个时钟计数器减1。一旦计数值为0,状态转入PULSE_START状态。
  ● PULSE_START:在此状态下,计数器装入初值(模式不同,则初值不同),以确定D10R-N/DIOW_N脉冲宽度。如果是写命令位为1,DIOW工N变为有效;如果读命令位为1,DIOR_N变为有效。状态机持续一个时钟周期后转入PULSE状态。
  ● PULSE:PULSE状态持续时间与DIOR -N/DIOW_N时间相同,计数器在每个时钟减1计数。一旦为0,状态机转入HOLD_START状态。在此状态下,如果是写操作,写数据将会被送到IDE数据总线;如果是读操作,当DIOR_N为高时,IDE数据总线上的数据被锁存,控制SRAM控制器的写使能信号有效。如果SRAM的写地址为0xff,SRAM状态寄存器Bit0将会被置1;如果地址为Oxlff,则SRAM状态寄存器Bit1被置1。
  ● HOLD_START:此状态保持一个时钟周期,DIOW_N和DIOR_N信号将被上拉为高电平。对于模式2,下一个状态将为HOLD_LAST状态;对于其他模式,下一个状态为HOLD状态。
  ● HOLD:此状态保持一个时钟周期,DIOR_N/DIOW N为高电平,下一个状态为HOLD_LAST状态。
  ● HOLD_LAST:在此状态下,状态机检测DMARQ是否仍然有效。如果有效,并且写命令位为1,SRAM状态位为1,状态机将会转入DELAY START状态;如果有效,并且读命令位为1,SRAM状态位为0,状态机将会转入DELAY_START状态;如果以上两种状态都不成立,状态机将会转入END状态。在此状态下,DIOR N/DIOW N保持高电平。
  ● DELAY START:对于DMA模式0,下一个状态为DELAY状态;对于其他模式,下一个状态为SETUP_START状态。在此状态下,对于模式0,计数器装入0x15(44 ns)并且DIOR_N/DIOW_N保持高。
  ● DELAY:此状态持续到计数器为0,DIOR_N/DIOW_N保持高。一旦计数器为0,状态转入SETUP_START状态。
  ● END:DMACK N信号失效,此状态持续一个时钟周期后转入IDLE状态。在此状态下DIOR∶N/DIOW_N保持高。
  

  
上一篇:算术运算指令组
下一篇:滤波器设计前面板控件的布局和美化

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料