gpt4 book ai didi

arrays - 移位 2D 数组 Verilog

转载 作者:行者123 更新时间:2023-12-01 18:03:14 26 4
gpt4 key购买 nike

我不知道以下代码不起作用,但它不会综合:

reg [7:0] FIFO [0:8];

always@(posedge clk) begin
if(wr & !rd & !full) begin
FIFO[0:8] <= {data_in, FIFO[1:8]};
end
end

我也尝试以其他方式索引 FIFO,但没有任何效果。在 Xilinx 论坛上找到了这个主题,但我只是无法弄清楚他想用这个来讲述什么。这是链接:

http://forums.xilinx.com/t5/General-Technical-Discussion/2-dimensional-array-problem-in-Verilog/td-p/42368

谢谢

最佳答案

您不了解打包和解包数组的工作原理。我建议您阅读 IEEE1800-2012 第 7.4.1、7.4.2、7.4.4 和 7.4.5 节。从技术上讲,IEEE1800 适用于 SystemVerilog,它是 Verilog 的超集。对于具有静态大小的数组,这两者是相同的,我发现 IEEE1800 比 IEEE1364 有更好的解释和示例。

如果您还没有 LRM 的副本,则可以在 ieee.org 网站上免费下载:IEEE Std 1800-2012

对于所提供的代码,您不能以这种方式分配解压数组中的每个元素。您有两种选择:使用 for 循环分配数组的未打包部分,或者使数组双重打包。

/* Using for-loop */
reg [7:0] FIFO [0:8];
integer i;
always@(posedge clk) begin
if(wr & !rd & !full) begin
for(i = 8; i > 0; i=i-1) begin
FIFO[i] <= FIFO[i-1];
end
FIFO[0] <= data_in;
end
end

/* Using double packed array */
reg [0:8] [7:0] FIFO; // NOTE: format and usage explained in IEEE1800-2012 7.4.5
always@(posedge clk) begin
if(wr & !rd & !full) begin
FIFO[0:8] <= {data_in,FIFO[0:7]};
end
end

关于arrays - 移位 2D 数组 Verilog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com