OpenCores
URL https://opencores.org/ocsvn/versatile_fifo/versatile_fifo/trunk

Subversion Repositories versatile_fifo

[/] [versatile_fifo/] [trunk/] [rtl/] [verilog/] [async_fifo_mq_md.v] - Diff between revs 23 and 24

Show entire file | Details | Blame | View Log

Rev 23 Rev 24
Line 1... Line 1...
// async FIFO with multiple queues, multiple data
// async FIFO with multiple queues, multiple data
 
 
module async_fifo_mq_md (
module async_fifo_mq_md (
    d, fifo_full, write, clk1, rst1,
    d, fifo_full, write, write_enable, clk1, rst1,
    q, fifo_empty, read, clk2, rst2
    q, fifo_empty, read, read_enable, clk2, rst2
);
);
 
 
parameter a_hi_size = 4;
parameter a_hi_size = 4;
parameter a_lo_size = 4;
parameter a_lo_size = 4;
parameter nr_of_queues = 16;
parameter nr_of_queues = 16;
parameter data_width = 36;
parameter data_width = 36;
 
 
input [data_width*nr_of_queues-1:0] d;
input [data_width*nr_of_queues-1:0] d;
output [0:nr_of_queues-1] fifo_full;
output [0:nr_of_queues-1] fifo_full;
input  [0:nr_of_queues-1] write;
input                     write;
 
input  [0:nr_of_queues-1] write_enable;
input clk1;
input clk1;
input rst1;
input rst1;
 
 
output [data_width-1:0] q;
output [data_width-1:0] q;
output [0:nr_of_queues-1] fifo_empty;
output [0:nr_of_queues-1] fifo_empty;
inout  [0:nr_of_queues-1] read;
input                     read;
 
input  [0:nr_of_queues-1] read_enable;
input clk2;
input clk2;
input rst2;
input rst2;
 
 
wire [a_lo_size-1:0]  fifo_wadr_bin[0:nr_of_queues-1];
wire [a_lo_size-1:0]  fifo_wadr_bin[0:nr_of_queues-1];
wire [a_lo_size-1:0]  fifo_wadr_gray[0:nr_of_queues-1];
wire [a_lo_size-1:0]  fifo_wadr_gray[0:nr_of_queues-1];
Line 48... Line 50...
 
 
generate
generate
    for (i=0;i<nr_of_queues;i=i+1) begin : fifo_adr
    for (i=0;i<nr_of_queues;i=i+1) begin : fifo_adr
 
 
        gray_counter wadrcnt (
        gray_counter wadrcnt (
            .cke(write[i]),
            .cke(write & write_enable[i]),
            .q(fifo_wadr_gray[i]),
            .q(fifo_wadr_gray[i]),
            .q_bin(fifo_wadr_bin[i]),
            .q_bin(fifo_wadr_bin[i]),
            .rst(rst1),
            .rst(rst1),
            .clk(clk1));
            .clk(clk1));
 
 
        gray_counter radrcnt (
        gray_counter radrcnt (
            .cke(read[i]),
            .cke(read & read_enable[i]),
            .q(fifo_radr_gray[i]),
            .q(fifo_radr_gray[i]),
            .q_bin(fifo_radr_bin[i]),
            .q_bin(fifo_radr_bin[i]),
            .rst(rst2),
            .rst(rst2),
            .clk(clk2));
            .clk(clk2));
 
 
Line 80... Line 82...
// and-or mux write address
// and-or mux write address
always @*
always @*
begin
begin
    wadr = {a_lo_size{1'b0}};
    wadr = {a_lo_size{1'b0}};
    for (j=0;j<nr_of_queues;j=j+1) begin
    for (j=0;j<nr_of_queues;j=j+1) begin
        wadr = (fifo_wadr_bin[j] & {a_lo_size{write[j]}}) | wadr;
        wadr = (fifo_wadr_bin[j] & {a_lo_size{write_enable[j]}}) | wadr;
    end
    end
end
end
 
 
// and-or mux read address
// and-or mux read address
always @*
always @*
begin
begin
    radr = {a_lo_size{1'b0}};
    radr = {a_lo_size{1'b0}};
    for (k=0;k<nr_of_queues;k=k+1) begin
    for (k=0;k<nr_of_queues;k=k+1) begin
        radr = (fifo_radr_bin[k] & {a_lo_size{read[k]}}) | radr;
        radr = (fifo_radr_bin[k] & {a_lo_size{read_enable[k]}}) | radr;
    end
    end
end
end
 
 
// and-or mux write data
// and-or mux write data
generate
generate
Line 104... Line 106...
 
 
always @*
always @*
begin
begin
    wdata = {data_width{1'b0}};
    wdata = {data_width{1'b0}};
    for (l=0;l<nr_of_queues;l=l+1) begin
    for (l=0;l<nr_of_queues;l=l+1) begin
        wdata = (wdataa[l] & {data_width{write[l]}}) | wdata;
        wdata = (wdataa[l] & {data_width{write_enable[l]}}) | wdata;
    end
    end
end
end
 
 
vfifo_dual_port_ram_dc_sw # ( .DATA_WIDTH(data_width), .ADDR_WIDTH(a_hi_size+a_lo_size))
vfifo_dual_port_ram_dc_sw # ( .DATA_WIDTH(data_width), .ADDR_WIDTH(a_hi_size+a_lo_size))
    dpram (
    dpram (
    .d_a(wdata),
    .d_a(wdata),
    .adr_a({onehot2bin(write),wadr}),
    .adr_a({onehot2bin(write_enable),wadr}),
    .we_a(|(write)),
    .we_a(write),
    .clk_a(clk1),
    .clk_a(clk1),
    .q_b(q),
    .q_b(q),
    .adr_b({onehot2bin(read),radr}),
    .adr_b({onehot2bin(read_enable),radr}),
    .clk_b(clk2) );
    .clk_b(clk2) );
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.