Как я могу создать модуль памяти, в котором в качестве параметра для каждой копии передаются значения ширины шины DATA
, и мой проект повторно настраивается в соответствии с параметр? Например, если предположить, что у меня есть адресная память байта, а ширина шины DATA-IN
- 32 бит (4 байта, записанных в каждом цикле), а DATA-OUT
- 16 бит (2 байта считываются каждый цикл). Для другого экземпляра DATA-IN
- 64 бит, а DATA-OUT
- 16 бит. Для всех таких случаев мой проект должен работать.Переупорядочиваемый экземпляр памяти в Verilog с DATA-IN и DATA-OUT передается как параметр
То, что я пробовал, состоит в том, чтобы генерировать значения указателя записи в соответствии с параметрами дизайна, например. DATA-IN
32 бит, указатель записи будет увеличивать 4 каждый цикл при записи. Для 64 бит -increment будет на 8 и так далее.
Проблема заключается в следующем: как записать 4 или 8 или 16 байтов в один цикл в соответствии с параметрами, переданными в экземпляр?
//Something as following I want to implement. This memory instance can be considered as internal memory of FIFO having different datawidth for reading and writing in case you think of an application of such memory
module mem#(parameter DIN=16, parameter DOUT=8, parameter ADDR=4,parameter BYTE=8)
(
input [DIN-1:0] din,
output [DOUT-1:0] dout,
input wen,ren,clk
);
localparam DEPTH = (1<<ADDR);
reg [BYTE-1:0] mem [0:DEPTH-1];
reg wpointer=5'b00000;
reg rpointer=5'b00000;
reg [BYTE-1:0] tmp [0:DIN/BYTE-1];
function [ADDR:0] ptr;
input [4:0] index;
integer i;
begin
for(i=0;i<DIN/BYTE;i=i+1) begin
mem[index] = din[(BYTE*(i+1)-1):BYTE*(i)]; // something like this I want to implement, I know this line is not allowed in verilog, but is there any alternative to this?
index=index+1;
end
ptr=index;
end
endfunction
always @(posedge clk) begin
if(wen==1)
wpointer <= wptr(wpointer);
end
always @(posedge clk) begin
if(ren==1)
rpointer <= ptr(rpointer);
end
endmodule
Перейди через обновленный пост @Morgan – user2624915
'мем [индекс] = дин [(BYTE * (я + 1) -1) -: 8];' – Qiu
Какая разница он будет делать? Не могли бы вы объяснить? @ Qiu – user2624915