Line 56... |
Line 56... |
);
|
);
|
|
|
localparam FIFO_DEPTH = (1 << ADDRESS_WIDTH);
|
localparam FIFO_DEPTH = (1 << ADDRESS_WIDTH);
|
|
|
//Local Registers/Wires
|
//Local Registers/Wires
|
assign write_fifo_size = FIFO_DEPTH;
|
|
|
|
//Write Side
|
//Write Side
|
wire ppfifo_ready; // The write side only needs to
|
wire ppfifo_ready; // The write side only needs to
|
// know were ready if we don't
|
// know were ready if we don't
|
// write anything read won't start
|
// write anything read won't start
|
Line 84... |
Line 83... |
reg w_empty[1:0];
|
reg w_empty[1:0];
|
reg w_reset; //write side reset
|
reg w_reset; //write side reset
|
reg [4:0] w_reset_timeout;
|
reg [4:0] w_reset_timeout;
|
wire ready;
|
wire ready;
|
|
|
//assign r_wselect = (write_activate == 2'b00) ? 1'b0 :
|
|
// (write_activate == 2'b01) ? 1'b0 :
|
|
// (write_activate == 2'b10) ? 1'b1 :
|
|
// reset ? 1'b0 :
|
|
// r_wselect;
|
|
// //I know this can be shortened down but it's more
|
|
// //readible thi way
|
|
|
|
assign addr_in = {r_wselect, write_address};
|
|
//assign write_enable = (write_activate > 0) && write_strobe;
|
|
assign ppfifo_ready = !(w_reset || r_reset);
|
|
assign ready = ppfifo_ready;
|
|
|
|
//assign wcc_tie_select = (wcc_read_ready == 2'b00) ? 1'b0 :
|
|
// (wcc_read_ready == 2'b01) ? 1'b0 :
|
|
// (wcc_read_ready == 2'b10) ? 1'b1 :
|
|
// wcc_tie_select;
|
|
// If the first FIFO is ready,
|
|
// then both FIFOs are ready then
|
|
// keep the first FIFO
|
|
|
|
//Read Side
|
//Read Side
|
wire [ADDRESS_WIDTH: 0] addr_out; //Actual address to the BRAM
|
wire [ADDRESS_WIDTH: 0] addr_out; //Actual address to the BRAM
|
reg r_reset;
|
reg r_reset;
|
reg [4:0] r_reset_timeout;
|
reg [4:0] r_reset_timeout;
|
|
|
Line 138... |
Line 116... |
reg r_pre_read_wait;//Wait an extra cycle so the registered data has a chance to set
|
reg r_pre_read_wait;//Wait an extra cycle so the registered data has a chance to set
|
//the data to be registered
|
//the data to be registered
|
wire [DATA_WIDTH - 1: 0] w_read_data; //data from the read FIFO
|
wire [DATA_WIDTH - 1: 0] w_read_data; //data from the read FIFO
|
reg [DATA_WIDTH - 1: 0] r_read_data; //data from the read FIFO
|
reg [DATA_WIDTH - 1: 0] r_read_data; //data from the read FIFO
|
|
|
|
|
|
|
|
//assign r_wselect = (write_activate == 2'b00) ? 1'b0 :
|
|
// (write_activate == 2'b01) ? 1'b0 :
|
|
// (write_activate == 2'b10) ? 1'b1 :
|
|
// reset ? 1'b0 :
|
|
// r_wselect;
|
|
// //I know this can be shortened down but it's more
|
|
// //readible thi way
|
|
|
|
assign write_fifo_size = FIFO_DEPTH;
|
|
|
|
assign addr_in = {r_wselect, write_address};
|
|
//assign write_enable = (write_activate > 0) && write_strobe;
|
|
assign ppfifo_ready = !(w_reset || r_reset);
|
|
assign ready = ppfifo_ready;
|
|
|
|
//assign wcc_tie_select = (wcc_read_ready == 2'b00) ? 1'b0 :
|
|
// (wcc_read_ready == 2'b01) ? 1'b0 :
|
|
// (wcc_read_ready == 2'b10) ? 1'b1 :
|
|
// wcc_tie_select;
|
|
// If the first FIFO is ready,
|
|
// then both FIFOs are ready then
|
|
// keep the first FIFO
|
|
|
assign addr_out = {r_rselect, r_address};
|
assign addr_out = {r_rselect, r_address};
|
|
|
|
|
//Debug
|
//Debug
|
wire [23:0] debug_f0_w_count;
|
//wire [23:0] debug_f0_w_count;
|
wire [23:0] debug_f1_w_count;
|
//wire [23:0] debug_f1_w_count;
|
|
|
wire [23:0] debug_f0_r_size;
|
//wire [23:0] debug_f0_r_size;
|
wire [23:0] debug_f1_r_size;
|
//wire [23:0] debug_f1_r_size;
|
|
|
//wire [23:0] debug_f0_r_count;
|
//wire [23:0] debug_f0_r_count;
|
//wire [23:0] debug_f1_r_count;
|
//wire [23:0] debug_f1_r_count;
|
|
|
assign debug_f0_w_count = w_count[0];
|
//assign debug_f0_w_count = w_count[0];
|
assign debug_f1_w_count = w_count[1];
|
//assign debug_f1_w_count = w_count[1];
|
|
|
assign debug_f0_r_size = r_size[0];
|
//assign debug_f0_r_size = r_size[0];
|
assign debug_f1_r_size = r_size[1];
|
//assign debug_f1_r_size = r_size[1];
|
|
|
assign inactive = (w_count[0] == 0) &&
|
assign inactive = (w_count[0] == 0) &&
|
(w_count[1] == 0) &&
|
(w_count[1] == 0) &&
|
(write_ready == 2'b11) &&
|
(write_ready == 2'b11) &&
|
(!write_strobe);
|
(!write_strobe);
|
Line 289... |
Line 292... |
if (reset) begin
|
if (reset) begin
|
w_reset <= 1;
|
w_reset <= 1;
|
w_reset_timeout <= 0;
|
w_reset_timeout <= 0;
|
end
|
end
|
else begin
|
else begin
|
if (w_reset && (w_reset_timeout < 4'h4)) begin
|
if (w_reset && (w_reset_timeout < 5'h4)) begin
|
w_reset_timeout <= w_reset_timeout + 1;
|
w_reset_timeout <= w_reset_timeout + 5'h1;
|
end
|
end
|
else begin
|
else begin
|
w_reset <= 0;
|
w_reset <= 0;
|
end
|
end
|
end
|
end
|
Line 304... |
Line 307... |
if (reset) begin
|
if (reset) begin
|
r_reset <= 1;
|
r_reset <= 1;
|
r_reset_timeout <= 0;
|
r_reset_timeout <= 0;
|
end
|
end
|
else begin
|
else begin
|
if (r_reset && (r_reset_timeout < 4'h4)) begin
|
if (r_reset && (r_reset_timeout < 5'h4)) begin
|
r_reset_timeout <= r_reset_timeout + 1;
|
r_reset_timeout <= r_reset_timeout + 5'h1;
|
end
|
end
|
else begin
|
else begin
|
r_reset <= 0;
|
r_reset <= 0;
|
end
|
end
|
end
|
end
|