10.1.03 Spartan 3E xc3s1600e-4fg400
我们使用coregenertated fifo(FIFO Generator v3.3)输入12,32位字然后读出它们。
我们在逻辑分析仪上体验和看到的是,写入fifo的数据看起来是正确的,但是当我们将数据输出到fifo时,第一个字在随机时间重复约1/60次。
我附上了一个文件显示:
1)显示fifo_in以及wren_dsp2
ARM信号(fifo的wr_en信号)
2)显示fifo_out以及db_dsp2arm_rden信号(fifo的rd_en信号),在这里你可以看到1被读入两次。
所以我的问题是什么可能导致这个问题,我该如何解决它?
**************************************************
**********
以下是我的fifo代码:
模块dsp_uhpi_fifo(clk,din,rd_en,srst,wr_en,dout,empty,full,prog_empty,prog_full);输入clk;输入[31:0] din;输入rd_en;输入srst;输入wr_en;输出[31:0]
dout;输出空;输出满;输出prog_empty;输出prog_full; //合成translate_off FIFO_GENERATOR_V3_3#(.C_COMMON_CLOCK(1),. C_COUNT_TYPE(0),. C_DATA_COUNT_WIDTH(10),. C_DEFAULT_VALUE(“BlankString”),. C_DIN_WIDTH(
32),. C_DOUT_RST_VAL(“0”),. C_DOUT_WIDTH(32),. C_ENABLE_RLOCS(0),. C_FAMILY(“spartan3”),. C_HAS_ALMOST_EMPTY(0),. C_HAS_ALMOST_FULL(0),. C_HAS_BACKUP(0),.
C_HAS_DATA_COUNT(0),. C_HAS_MEMINIT_FILE(0),. C_HAS_OVERFLOW(0),. C_HAS_RD_DATA_COUNT(0),. C_HAS_RD_RST(0),. C_HAS_RST(0),. C_HAS_SRST(1),. C_HAS_UNDERFLOW(0),. C_HAS_VALID(
0),. C_HAS_WR_ACK(0),. C_HAS_WR_DATA_COUNT(0),. C_HAS_WR_RST(0),. C_IMPLEMENTA
tiON_TYPE(0),. C_INIT_WR_PNTR_VAL(0),. C_MEMORY_TYPE(1),. C_MIF_FILE_NAME(“BlankString”),. C_OPTIMIZATION_MODE(
0),. C_OVERFLOW_LOW(0),. C_PRELOAD_LATENCY(1),. C_PRELOAD_REGS(0),. C_PRIM_FIFO_TYPE(
“1kx36”),.C_PROG_EMPTY_THRESH_ASSERT_VAL(7),.C_PROG_EMPTY_THRESH_NEGATE_VAL(8),.C_PROG_EMPTY_TYPE(1),.C_PROG_FULL_THRESH_ASSERT_VAL(1015),.C_PROG_FULL_THRESH_NEGATE_VAL(1014),.C_PROG_FULL_TYPE(1),.C_RD_DATA_COUNT_WIDTH(10),.C_RD_DEPTH(
1024),. C_RD_FREQ(100),. C_RD_PNTR_WIDTH(10),. C_UNDERFLOW_LOW(0),. C_USE_ECC(0),。C_USE_FIFO16_FLAGS(0),。C_VALID_LOW(0),. C_WR_ACK_LOW(0),.C_WR_DATA_COUNT_WIDTH(10)
,.C_WR_DEPTH(1024),. C_WR_FREQ(100),. C_WR_PNTR_WIDTH(10),。C_WR_RESPONSE_LATENCY(1))inst(.CLK(clk),. DIN(din),. RD_EN(rd_en),. SRST(srst)
,.WR_EN(wr_en),. DOUT(dout),. EMPTY(空),.FULL(完整),. PROG_EMPTY(prog_empty),. PROG_FULL(prog_full),. BACKUP(),. BACKUP_MARKER(),. PROG_EMPTY_THRESH(
),.。PROG_EMPTY_THRESH_ASSERT(),. PROG_EMPTY_THRESH_NEGATE(),. PROG_FULL_THRESH(),. PROG_FULL_THRESH_ASSERT(),. PROG_FULL_THRESH_NEGATE(),. RD_CLK(),. RD_RST(),. RST(),. WR_CLK(),. WR_RST(
),. ALMOST_EMPTY(),. ALMOST_FULL(),. DATA_COUNT(),. OVERFLOW(),. VALID(),. RD_DATA_COUNT(),. ENDERFLOW(),.
WR_ACK(),. WR_DATA_COUNT(),. SBITERR(),. DBITERR()); //合成translate_onendmodule
以上来自于谷歌翻译
以下为原文
10.1.03 Spartan 3E xc3s1600e-4fg400
We are using the coregenertated fifo(FIFO Generator v3.3) to input 12, 32bit words and then read them out. What we experience and see on a logic analyzer is that the data being written into the fifo looks correct but when we output data to the fifo the first word is being repeated at random times approximately 1/60 times.
I have attached a file showing:
1) shows the fifo_in along with the wren_dsp2arm signal(wr_en signal for fifo)
2) shows the fifo_out along with the db_dsp2arm_rden signal(rd_en signal for fifo), this is where you can see that the 1 gets read in twice.
So my question is what could be causing this issue and how should i fix it?
************************************************************
Also below is my code for the fifo:
module dsp_uhpi_fifo(
clk,
din,
rd_en,
srst,
wr_en,
dout,
empty,
full,
prog_empty,
prog_full);
input clk;
input [31 : 0] din;
input rd_en;
input srst;
input wr_en;
output [31 : 0] dout;
output empty;
output full;
output prog_empty;
output prog_full;
// synthesis translate_off
FIFO_GENERATOR_V3_3 #(
.C_COMMON_CLOCK(1),
.C_COUNT_TYPE(0),
.C_DATA_COUNT_WIDTH(10),
.C_DEFAULT_VALUE("BlankString"),
.C_DIN_WIDTH(32),
.C_DOUT_RST_VAL("0"),
.C_DOUT_WIDTH(32),
.C_ENABLE_RLOCS(0),
.C_FAMILY("spartan3"),
.C_HAS_ALMOST_EMPTY(0),
.C_HAS_ALMOST_FULL(0),
.C_HAS_BACKUP(0),
.C_HAS_DATA_COUNT(0),
.C_HAS_MEMINIT_FILE(0),
.C_HAS_OVERFLOW(0),
.C_HAS_RD_DATA_COUNT(0),
.C_HAS_RD_RST(0),
.C_HAS_RST(0),
.C_HAS_SRST(1),
.C_HAS_UNDERFLOW(0),
.C_HAS_VALID(0),
.C_HAS_WR_ACK(0),
.C_HAS_WR_DATA_COUNT(0),
.C_HAS_WR_RST(0),
.C_IMPLEMENTATION_TYPE(0),
.C_INIT_WR_PNTR_VAL(0),
.C_MEMORY_TYPE(1),
.C_MIF_FILE_NAME("BlankString"),
.C_OPTIMIZATION_MODE(0),
.C_OVERFLOW_LOW(0),
.C_PRELOAD_LATENCY(1),
.C_PRELOAD_REGS(0),
.C_PRIM_FIFO_TYPE("1kx36"),
.C_PROG_EMPTY_THRESH_ASSERT_VAL(7),
.C_PROG_EMPTY_THRESH_NEGATE_VAL(8),
.C_PROG_EMPTY_TYPE(1),
.C_PROG_FULL_THRESH_ASSERT_VAL(1015),
.C_PROG_FULL_THRESH_NEGATE_VAL(1014),
.C_PROG_FULL_TYPE(1),
.C_RD_DATA_COUNT_WIDTH(10),
.C_RD_DEPTH(1024),
.C_RD_FREQ(100),
.C_RD_PNTR_WIDTH(10),
.C_UNDERFLOW_LOW(0),
.C_USE_ECC(0),
.C_USE_FIFO16_FLAGS(0),
.C_VALID_LOW(0),
.C_WR_ACK_LOW(0),
.C_WR_DATA_COUNT_WIDTH(10),
.C_WR_DEPTH(1024),
.C_WR_FREQ(100),
.C_WR_PNTR_WIDTH(10),
.C_WR_RESPONSE_LATENCY(1))
inst (
.CLK(clk),
.DIN(din),
.RD_EN(rd_en),
.SRST(srst),
.WR_EN(wr_en),
.DOUT(dout),
.EMPTY(empty),
.FULL(full),
.PROG_EMPTY(prog_empty),
.PROG_FULL(prog_full),
.BACKUP(),
.BACKUP_MARKER(),
.PROG_EMPTY_THRESH(),
.PROG_EMPTY_THRESH_ASSERT(),
.PROG_EMPTY_THRESH_NEGATE(),
.PROG_FULL_THRESH(),
.PROG_FULL_THRESH_ASSERT(),
.PROG_FULL_THRESH_NEGATE(),
.RD_CLK(),
.RD_RST(),
.RST(),
.WR_CLK(),
.WR_RST(),
.ALMOST_EMPTY(),
.ALMOST_FULL(),
.DATA_COUNT(),
.OVERFLOW(),
.VALID(),
.RD_DATA_COUNT(),
.UNDERFLOW(),
.WR_ACK(),
.WR_DATA_COUNT(),
.SBITERR(),
.DBITERR());
// synthesis translate_on
endmodule
0