在V6 DDR3控制器中,因为写数据通道和命令通道不是简单的FIFO接口,无法通过FIFO的将满信号进行写入的控制,只能根据命令通道和数据通道上的app_wdf_rdy信号和app_rdy信号判断数据是否成功写入,如果没有写入成功则需要重新写入。
为了简化对V6 DDR3控制器的使用,需要对Xilinx提供的DDR3控制器源码做少量修改。DDR3控制器源码中, app_wdf_rdy信号在用户接口侧指示数据是否成功写入,由wdf_rdy_ns延迟一拍产生。wdf_rdy_ns在DDR3控制器内部用于判断数据是否写入有效。wdf_rdy_ns是由一个FIFO写入侧counter计算出来的,counter的值则取决于FIFO的读写状态。如果Counter的值大于设定的将满阈值15,则wdf_rdy_ns为0,写入的数据无效。
为了使app_wdf_rdy信号具有将满指示效果,即把app_wdf_rdy用作反压信号时,每个写入的数据都是写入有效的,必须使app_wdf_rdy信号比wdf_rdy_ns更早的为0。wdf_rdy_ns是在counter值等于15时为0,而app_wdf_rdy应该在counter值等于15以前就为0。保险起见,可以在counter为12将app_wdf_rdy置为0。
以下是在ui_wr_data.v文件中的修改:
将:
always @(posedge clk) app_wdf_rdy_r <= #TCQ wdf_rdy_ns;
assign app_wdf_rdy = app_wdf_rdy_r;
修改为:
wire wdf_ready;
reg App_ready;
assign wdf_ready = !(rst || ~ram_init_done_r || occ_cnt[12]);
always @(posedge clk) App_ready <= #TCQ wdf_ready;
assign app_wdf_rdy = App_ready;
对于命令通道的app_rdy信号,由于产生机制过于复杂,不容易通过修改Xilinx源码来使得app_rdy信号具有提前反压效果。只能根据app_rdy信号的指示,确定上一拍数据是否成功写入。
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取磁力计iis2mdc被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取LPS22HH气压、温度被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取STTS751温度被打赏¥17元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
我要赚赏金
