在对FIFO操作的时候,读写使能要掌握好时序,而读写数据可以提前一些赋值,不要卡太死,这是因为总要有读写使能才能写入数据的,早到一点总比晚到了写不进去要好。
其次,在先入先出模式中。RD_DATA会和RD_EN的变化同步,建议是:
标准模式下,在延迟读使能一拍以后的时刻可以调用这部分数据;
标准模式:
而首字下降模式可以同步进行:
assign WRITE_SDRAM_DQ = FIFO_RD_DATA;
//FIFO_RD_EN
always @(posedge Sys_clk or negedge Rst_n) begin
if(Rst_n == 'd0) begin
FIFO_RD_EN <= 'd0;
end else if(STATE == STATE_WR_NOW) begin
FIFO_RD_EN <= 1'b1;
end else begin
FIFO_RD_EN <= 'd0;
end
空满信号和计数信号在vivado 中的控制要比在ISE里精确很多。
对于使用更准确的数据计数(使用额外逻辑)的 FWFT 实现,当 FIFO 中存在字时,data_count 保证准确,但当其接近空或几乎为空或在空 FIFO 上发生初始写入时除外。在这些情况下,data_count 最多可能有两个字不正确。
从写入接口的角度来看,data_count 始终准确,一旦第一个字写入 FIFO,就会立即报告。
然而,从读取接口的角度来看,data_count 输出可能会过量报告最多两个字,直到almost_empty 和empty 均已置低为止。
这是由于第一个字失效 FIFO 中空置低的延迟造成的(参见表 3-18)。此延迟允许 data_count 反映可能尚无法读取的写入字。
从读取接口的角度来看,数据计数在置空到空时开始从多报到准确报转变。此转换在almost_empty 解除断言后完成。在almost_empty 置低之前,data_count 信号可能会表现出以下行为:
• 从读取接口的角度来看,data_count 可能会过度报告最多两个字。
先入先出模式和标准模式之间也有差异。
标准模式的空满信号:
首字下降: :
可见:
空信号在首字下降模式下要晚一个时钟周期拉低。
标准模式
首字下降: :
对于满信号,标准模式下的判断要更苛刻,这是因为:
同样设置128深度,而首字下降的实际深度要比标准模式深一些(130),所以直接使用full来判断不太好。
同样可以看出两种模式的区别,读信号的给予时间和信号出来的时间。
标准模式:
首字下降:
这一点在PG057中有体现