1、知识点
为什么需要仲裁模块?
在前面的博文中,已经对初始化操作、自动刷新操作、写操作、读操作进行了详细的讲解与验证。假设我们现在直接使用这四个模块对SDRAM操作,那么SDRAM控制模块的整体示意框图(没有引出具体信号,仅作示意)应该如下:
可以看到,4个模块都直接与SDRAM建立了双向接口进行操作或者数据交互,这就会引发一个严重的问题:操作冲突。SDRAM在一个时钟周期内只能执行一个操作,如果这4个模块中的两个或以上同时发出了操作命令,那么SDRAM就会工作错误。所以我们就需要引入仲裁模块对4个模块对SDRAM的操作请求作一个统一管理,根据事先设定的优先级来规定某段时间内,哪个模块能对SDRAM进行操作。示意简图如下图:
2、设计
仲裁模块:
状态机实现:
首先需要确定4种操作的优先级:
- 初始化优先级最高,只有上电初始化完成后才能进行其他操作
- 自动刷新操作次之,保证芯片工作正常
- 为了防止写入数据不及时&#x