sdram 控制器

2019-03-25 09:35发布

求解一下 sdram 控制器代码段中的 command 中一段 关于仲裁 的 代码,怎么实现的?代码段如下: // set command_delay shift register and command_done flag
// The command delay shift register is a timer that is used to ensure that
// the SDRAM devices have had sufficient time to finish the last command.
                if ((do_refresh == 1) | (do_reada == 1) | (do_writea == 1) | (do_precharge == 1)
                     | (do_load_mode == 1))
                begin
                        command_delay <= 8'b11111111;
                        command_done  <= 1;
                        rw_flag <= do_reada;                                                 
                end
               
                else
                begin
                        command_done        <= command_delay[0];                // the command_delay shift operation
                        command_delay  <= (command_delay>>1);
                end
               
 
 // start additional timer that is used for the refresh, writea, reada commands              
                if (command_delay[0] == 0 & command_done == 1)
                begin
                 rp_shift <= 4'b1111;
                 rp_done <= 1;
                end
                else
                begin      
     if(SC_PM == 0)
     begin
      rp_shift <= (rp_shift>>1);
                     rp_done  <= rp_shift[0];
     end
     else
     begin
      if( (ex_read == 0) && (ex_write == 0) )
      begin
       rp_shift <= (rp_shift>>1);
                      rp_done  <= rp_shift[0];
      end
      else
      begin
       if( PM_STOP==1 )
       begin
        rp_shift <= (rp_shift>>1);
                        rp_done     <= rp_shift[0];
        ex_read  <= 1'b0;
        ex_write <= 1'b0;
       end     
      end
     end
                end
   end
        end
end
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
小霍
2019-03-25 17:48
你好,这是一个DE2—70 板子的做视频图像处理的程序,这一段代码仅仅是关于 sdram 的控制器代码中的一段。网上很多sdram的控制器的代码也和这个也一样,说的时实现sdram控制器的仲裁作用,大体解释如下:
 命令模块由1个简单的仲裁器、命令发生器及命令时序器组成。它接收从控制接口模块来的译码后的命令,接收刷新控制逻辑发来的刷新请求命令并产生正确的命令给DDR。仲裁器在控制接口发来的命令(也就是MCU通过控制接口译码后的命令)和刷新控制逻辑发来的刷新请求命令之间进行仲裁。刷新请求命令的优先级高于控制接口来的命令。如果控制接口来的命令和刷新请求命令同时到达,或者同在一个刷新操作期间,则仲裁器就会拖延向MCU发CMDACK命令的时间直到刷新操作完成。如果刷新命令正在进行操作期间发出,则要一直等待到操作全部完成。

  在仲裁器收到MCU发来的命令后,该命令就传送到命令发生器,命令时序器即用3个移位寄存器产生正确的命令时序后发给DDR。1个移位寄存器用来控制激活命令时序,1个用来控制READA和WRITEA命令,1个用来计时操作命令的持续时间,为仲裁器确定最后的请求操作是否完成。

我不明白的是里面的这些延迟数据是怎么设置的,谢谢。不知道您还需要什么信息。

一周热门 更多>