参考手册:
代码使用
parameter FIFO_WRITE_DEPTH = CHANNEL_NUM*3*2;
parameter WRITE_DATA_WIDTH = 16;
parameter WR_DATA_COUNT_WIDTH = $clog2(FIFO_WRITE_DEPTH_2_N);
parameter PROG_FULL_THRESH = CHANNEL_NUM;
parameter READ_DATA_WIDTH = WRITE_DATA_WIDTH;
parameter RD_DATA_COUNT_WIDTH = $clog2(FIFO_WRITE_DEPTH_2_N);
parameter FIFO_WRITE_DEPTH_2_N = CHANNEL_NUM*4*2;
xpm_fifo_sync # (
.FIFO_MEMORY_TYPE ("block"), //string; "auto", "block", "distributed", or "ultra";
.ECC_MODE ("no_ecc"), //string; "no_ecc" or "en_ecc";
.FIFO_WRITE_DEPTH (FIFO_WRITE_DEPTH_2_N), //positive integer
.WRITE_DATA_WIDTH (WRITE_DATA_WIDTH), //positive integer
.WR_DATA_COUNT_WIDTH (WR_DATA_COUNT_WIDTH), //positive integer
.PROG_FULL_THRESH (PROG_FULL_THRESH), //positive integer
.FULL_RESET_VALUE (0), //positive integer; 0 or 1
.USE_ADV_FEATURES ("0000"), //string; "0000" to "1F1F";
.READ_MODE ("std"), //string; "std" or "fwft";
.FIFO_READ_LATENCY (1), //positive integer;
.READ_DATA_WIDTH (READ_DATA_WIDTH), //positive integer
.RD_DATA_COUNT_WIDTH (RD_DATA_COUNT_WIDTH), //positive integer
.PROG_EMPTY_THRESH (10), //positive integer
.DOUT_RESET_VALUE ("0"), //string
.WAKEUP_TIME (0) //positive integer; 0 or 2;
) xpm_fifo_sync_inst (
.sleep (1'b0),
.rst (!rst_n_i),
.wr_clk (clk_i),
.wr_en (wr_en),
.din (din),
.full (),
.overflow (),
.prog_full (),
.wr_data_count (),
.almost_full (),
.wr_ack (),
.wr_rst_busy (),
.rd_en (rd_en),
.dout (dout),
.empty (empty),
.prog_empty (),
.rd_data_count (),
.almost_empty (),
.data_valid (),
.underflow (),
.rd_rst_busy (),
.injectsbiterr (1'b0),
.injectdbiterr (1'b0),
.sbiterr (),
.dbiterr ()
一定要注意FIFO_WRITE_DEPTH是2的幂,不然,输出会异常。比如下图:
会出现数据是“x”状态。
其他的使用方式按照手册来就行。