我将在此处的答案字段中解释我的评论。
您已将indata
和声明mybuf
为二维 reg 数组:
reg[N-1:0][7:0]mybuffer;
reg[M-1:0][7:0] indata;
因此,上面声明了向量的打包数组,其中第二维[7:0]
是内存中向量的维数。通常在这种情况下wptr
处理第一个维度。类似于以下内容:
always @(posedge clk) begin
mybuffer[wrpt] <= indata[wrpt];
if (wrpt == M - 1)
wrpt <= 0; // this will prevent from coping indexes from M to N-1
else
wrpt <= wrpt + 1;
end
因此,wrpt
指针指向下一个 8 位块。否则,我认为根本没有理由拥有这个指针。对于批量复制,您可以使用以下内容:
always_comb mybufer = indata;
以上对于您声明的打包数组(或具有相同范围的解包数组)是可能的
更新:添加了另一个示例
我想,根据您的问题,您正在寻找一些解决方案,您可以在其中重复地将“indata”插入“mybuffer”,直到后者被填满。在这种情况下,可以使用以下方法来完成其余操作R
。
parameter N = 10;
parameter M = 3;
parameter R = N % M;
initial begin
int wrpt;
for (wrpt = 0; wrpt < N; wrpt += M)
mybuffer[wrpt +: M ] = indata;
if (R != 0)
mybuffer[(wrpt - N) +: R ] = indata[0 +: R];
end