上周阿里面试官问ram两侧读写位宽不一样改如何解决?当时含糊了一下,事后再认真分析其中缘由。
思路
取读写位宽的最大公因数作为ram的位宽,控制读写指针的步进,并预测下一次的指针位置从而判断空满,和普通fifo一样的是指针还是要计两圈。
module sync_dff_wid_fifo#(
parameter I_WID = 15,
parameter O_WID = 10,
parameter FIFO_WID = 5,
parameter DEPTH = 8,
parameter ADDR_WID = 3,
parameter I_ADDR_STEP = 3,
parameter O_ADDR_STEP = 2
)
(
input clk,
input rst_n,
input wr_en,
input [I_WID - 1 : 0] wr_data,
input rd_en,
output [O_WID - 1 : 0] rd_data,
output empty,
output full
);
//=============defination
reg [FIFO_WID - 1 : 0] ram [0 : DEPTH - 1];
reg [ADDR_WID : 0] wr_pnt;
reg [ADDR_WID : 0] rd_pnt;
wire [ADDR_WID - 1 : 0] wr_addr;
wire [ADDR_WID - 1 : 0] rd_addr;
wire [ADDR_WID : 0] wr_pnt_next;
w