【发布时间】:2020-06-30 15:07:58
【问题描述】:
假设我有一个特定的字节缓冲区和这个缓冲区的写指针,例如:
reg[N-1:0][7:0]mybuffer;
reg[$clog2(N+1)-1:0] wptr;
wptr 指向缓冲区中我要存储传入数据的下一个位置。
现在,假设我的输入数据也是一个字节块,比如:
reg[M-1:0][7:0] indata;
与M N.
如果我编写如下代码:
mybuffer[wptr +: M] = indata;
一切正常,除了 wptr > N-M 时的明显例外,在我的应用程序中永远不会发生。
但是,这似乎不是解决问题的一种非常干净的方法,并且会导致使用 linting 工具发出警告。扩展缓冲区似乎也不是一个好方法。
什么是实现这样的东西的干净和正确的方法?
谢谢。
【问题讨论】:
-
您的所有数据似乎都是 8 位宽。那么为什么不使用简单的索引,
mybuffer[wptr]?如果 wptr >=M,您将获得x值。因此,您可能需要为 wpttr 值添加检查器。 -
@Serge 感谢您的评论。你到底是什么意思?我需要将
indata批量复制到mybuffer,如何使用简单索引?
标签: verilog system-verilog fpga hdl asic