在网上看到关于Altera的SCFIFO核的介绍中,都提到了它可以支持同时读写的功能,但未看到具体的仿真情况。Altera官方的ug中,也未看到关于此的明确描述(也可能是我读文档不仔细)。因此,对该问题进行modelsim仿真,将仿真情况记录于此,大家一起探讨。
首先生成一个256B的SCFIFO核,其主要参数如下:
defparam
scfifo_component.add_ram_output_register = "ON",
scfifo_component.almost_empty_value = 64,
scfifo_component.almost_full_value = 128,
scfifo_component.intended_device_family = "Cyclone III",
scfifo_component.lpm_numwords = 256,
scfifo_component.lpm_showahead = "OFF",
scfifo_component.lpm_type = "scfifo",
scfifo_component.lpm_width = 8,
scfifo_component.lpm_widthu = 8,
scfifo_component.overflow_checking = "ON",
scfifo_component.underflow_checking = "ON",
scfifo_component.use_eab = "ON";
生成的模块外形如下图所示。

编写测试代码如下
`timescale 1ns / 1ns
module fifo_buf_tb;
reg hclk;
reg [7:0] data;
reg rdreq;
reg sclr=0;
reg wrreq;
w

本文通过modelsim仿真探究了Altera SCFIFO在同时读写时的问题。发现当wrreq、rdreq与data同时跳变时,数据无法正常读取。解决方法是遵循下降沿跳变、上升沿采样的原则,调整时序,避免直接使用全局时钟,以实现正常读写。强调了正确理解和遵循官方文档的重要性。

1703

被折叠的 条评论
为什么被折叠?



