求解一下 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
此帖出自
小平头技术问答
命令模块由1个简单的仲裁器、命令发生器及命令时序器组成。它接收从控制接口模块来的译码后的命令,接收刷新控制逻辑发来的刷新请求命令并产生正确的命令给DDR。仲裁器在控制接口发来的命令(也就是MCU通过控制接口译码后的命令)和刷新控制逻辑发来的刷新请求命令之间进行仲裁。刷新请求命令的优先级高于控制接口来的命令。如果控制接口来的命令和刷新请求命令同时到达,或者同在一个刷新操作期间,则仲裁器就会拖延向MCU发CMDACK命令的时间直到刷新操作完成。如果刷新命令正在进行操作期间发出,则要一直等待到操作全部完成。
在仲裁器收到MCU发来的命令后,该命令就传送到命令发生器,命令时序器即用3个移位寄存器产生正确的命令时序后发给DDR。1个移位寄存器用来控制激活命令时序,1个用来控制READA和WRITEA命令,1个用来计时操作命令的持续时间,为仲裁器确定最后的请求操作是否完成。
我不明白的是里面的这些延迟数据是怎么设置的,谢谢。不知道您还需要什么信息。
一周热门 更多>