具有多个输入和输出的可参数化 FIFO?

问题描述 投票:0回答:1

我想创建一个具有多个可参数化数量的输入和输出的 FIFO。也就是说,一旦有足够的数据,FIFO 就会将它们抽出。在我的用例中,我有 4 个输入和输出,如下所示:

input  [7:0] din1, din2, din3, din4;
input  [3:0] din_valid;
output [7:0] dout1, dout2, dout3, dout4;
output       dout_valid;

举例:

din*       = 0,1,2,3 -> 4,5,6,7 -> 8,9,0,1
din_valid  = 4'b0011 -> 4'b1101 -> 4'b1110
dout       = x,x,x,x -> x,x,x,x -> 2,3,4,5 -> 7,8,9,0 -> x,x,x,x
dout_valid = 1'b0    -> 1'b0    -> 1'b1    -> 1'b1    -> 1'b0

我已经能够通过使用固定大小的内存寄存器并使用 din_valid 的 case 语句(0000、0001 等)手动移入数据来实现此目的。

但是,如果输出数量增加到 6 或 8 个,这似乎效率非常低。我可以像普通 FIFO 一样有一个读和写指针来相应地遍历内存,但是当 read & 的值增加时,就会出现问题写指针溢出,并且额外的“环绕”逻辑非常复杂,因为我们不会仅将它们增加 1。

是否还有其他方法可以创建可参数化的多输入、多输出 FIFO(在本例中,我们只需将 din1, din2... 设为单个 [NUM_INPUTxBIT-1:0]din)?我到处寻找却没有答案。非常感谢任何帮助。

verilog system-verilog hardware synthesis
1个回答
0
投票

还有其他方法可以创建多输入、多输出吗? FIFO,可参数化...?

是的,您也可以使用未封装的阵列端口:

module fifo #(parameter N=4) (
    input  [N-1:0] din_valid,
    input  [7:0]   din  [N],
    output [7:0]   dout [N]
);

endmodule
© www.soinside.com 2019 - 2024. All rights reserved.