📄 input_fifo_rev0.0.v
字号:
/////////////////////////////////////////////////
//
// Module Name: input_fifo
// Descr: Synchronous FIFO for Input
// Using 256x16 Dual Port BRAM
// Author: James Rosenthal
// Date: 10/25/04
//
//
// Version Date Modifications
// ---------------------------------
// 0.0 10/28/04 Initial
//
/////////////////////////////////////////////////
`timescale 1ns / 10ps
module input_fifo(
clk, // Clock Sync'd for both R&W
din, // 13-Bit Data Input
wr_en, // Write Enable
rd_en, // Read Enable
rst, // Active Low Reset
dout, // 13-bit Data Output
full, // Full Flag
empty // Empty Flag
);
//
// Inputs & Outputs
//
input [12:0] din; // Data Input
input wr_en; // Write Enable
input rd_en; // Read Enable
input rst; // Active Low Reset
input clk; // Input clk
output [12:0] dout; // Data Output
output full; // Full Flag
output empty; // Empty Flag
//
// Registers & Wires
//
reg [7:0] read_addr;
reg [7:0] write_addr;
wire [15:0] doutf;
wire enrd, enwr;
//
// Behavioral Description
//
// Empty/Full Flag Generation
assign empty = read_addr == write_addr;
assign full = write_addr > read_addr ? (write_addr - read_addr) == 8'd255 : read_addr - write_addr == 8'd1;
assign dout = doutf[12:0];
assign enrd = rd_en & !empty;
assign enwr = wr_en & !full;
// Address Pointers
// Concurrent Reads/Writes allowed in Block RAM
always @ (posedge clk or negedge rst)
begin
if(!rst)
begin
write_addr <= 8'h0;
read_addr <= 8'h0;
end
// read, not empty
else if(rd_en && !wr_en && !empty)
read_addr <= read_addr + 8'h1;
// write, not full
else if(wr_en && !rd_en && !full)
write_addr <= write_addr + 8'h1;
// simulataneous read/write, address pointers don't match
else if(read_addr != write_addr && wr_en && rd_en)
begin
write_addr <= write_addr + 8'h1;
read_addr <= read_addr + 8'h1;
end
end
// Instantiate Block RAM
// Port A for Writes
// Port B for Reads
bram_256x16 infifo(
.addra(write_addr[7:0]),
.addrb(read_addr[7:0]),
.clka(clk),
.clkb(clk),
.dina({3'h0,din}),
.doutb(doutf),
.enb(enrd),
.sinita(rst),
.sinitb(rst),
.wea(enwr)
);
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -