Line 39... |
Line 39... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.3 2002/04/22 13:45:52 mohor
|
|
// Generic ram or Xilinx ram can be used in fifo (selectable by setting
|
|
// ETH_FIFO_XILINX in eth_defines.v).
|
|
//
|
// Revision 1.2 2002/03/25 13:33:04 mohor
|
// Revision 1.2 2002/03/25 13:33:04 mohor
|
// When clear and read/write are active at the same time, cnt and pointers are
|
// When clear and read/write are active at the same time, cnt and pointers are
|
// set to 1.
|
// set to 1.
|
//
|
//
|
// Revision 1.1 2002/02/05 16:44:39 mohor
|
// Revision 1.1 2002/02/05 16:44:39 mohor
|
Line 77... |
Line 81... |
output empty;
|
output empty;
|
output [CNT_WIDTH-1:0] cnt;
|
output [CNT_WIDTH-1:0] cnt;
|
|
|
`ifdef ETH_FIFO_XILINX
|
`ifdef ETH_FIFO_XILINX
|
`else
|
`else
|
|
`ifdef ETH_ALTERA_ALTSYNCRAM
|
|
`else
|
reg [DATA_WIDTH-1:0] fifo [0:DEPTH-1];
|
reg [DATA_WIDTH-1:0] fifo [0:DEPTH-1];
|
|
reg [DATA_WIDTH-1:0] data_out;
|
|
`endif
|
`endif
|
`endif
|
|
|
reg [CNT_WIDTH-1:0] cnt;
|
reg [CNT_WIDTH-1:0] cnt;
|
reg [CNT_WIDTH-2:0] read_pointer;
|
reg [CNT_WIDTH-2:0] read_pointer;
|
reg [CNT_WIDTH-2:0] write_pointer;
|
reg [CNT_WIDTH-2:0] write_pointer;
|
Line 140... |
Line 148... |
.data_in(data_in),
|
.data_in(data_in),
|
.read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer),
|
.read_address( clear ? {CNT_WIDTH-1{1'b0}} : read_pointer),
|
.write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer),
|
.write_address(clear ? {CNT_WIDTH-1{1'b0}} : write_pointer),
|
.wclk(clk)
|
.wclk(clk)
|
);
|
);
|
`else
|
`else // !ETH_FIFO_XILINX
|
|
`ifdef ETH_ALTERA_ALTSYNCRAM
|
|
altera_dpram_16x32 altera_dpram_16x32_inst
|
|
(
|
|
.data (data_in),
|
|
.wren (write & ~full),
|
|
.wraddress (clear ? {CNT_WIDTH-1{1'b0}} : write_pointer),
|
|
.rdaddress (clear ? {CNT_WIDTH-1{1'b0}} : read_pointer ),
|
|
.clock (clk),
|
|
.q (data_out)
|
|
); //exemplar attribute altera_dpram_16x32_inst NOOPT TRUE
|
|
`else // !ETH_ALTERA_ALTSYNCRAM
|
always @ (posedge clk)
|
always @ (posedge clk)
|
begin
|
begin
|
if(write & clear)
|
if(write & clear)
|
fifo[0] <=#Tp data_in;
|
fifo[0] <=#Tp data_in;
|
else
|
else
|
if(write & ~full)
|
if(write & ~full)
|
fifo[write_pointer] <=#Tp data_in;
|
fifo[write_pointer] <=#Tp data_in;
|
end
|
end
|
|
|
assign data_out = clear ? fifo[0] : fifo[read_pointer];
|
|
`endif
|
always @ (posedge clk)
|
|
begin
|
|
if(clear)
|
|
data_out <=#Tp fifo[0];
|
|
else
|
|
data_out <=#Tp fifo[read_pointer];
|
|
end
|
|
`endif // !ETH_ALTERA_ALTSYNCRAM
|
|
`endif // !ETH_FIFO_XILINX
|
|
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|