对于FIFO的输出有两种:1、输出为时序clk,这样当master发起读信号,一个clk之后有效数据才能传送到master,两个clk时master才能读取有效数据;(但对于此种也可以进行改进,让master一个clk即能读取数据:fifo的输出端保持输出将要被读取的数据,被读取后output next被读取数据,即输出端output尚未读取的数据)
2、输出为组合逻辑,当前clk内有效数据即能传送到master,一个clk时master即能读取有效数据。
下面贴出两种FIFO的code:
第一种输出为timing logic:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 07/16/2014 01:32:23 PM
// Design Name:
// Module Name: round_fifo
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
`define BUF_WIDTH 5 // BUF_SIZE = 16 -> BUF_WIDTH = 4, no. of bits to be used in pointer
`define BUF_SIZE ( 1<<`BUF_WIDTH )
module round_fifo( clk, rst, buf_in, buf_out, wr_en,