gpt4 book ai didi

system-verilog - 索引嵌套数组时读取错误数据

转载 作者:行者123 更新时间:2023-12-01 12:39:11 32 4
gpt4 key购买 nike

我正在管道处理器中实现 dcache。我的 dcache 是一个 2-way associative,每个 block 有 2 个词和 8 个索引这就是我初始化缓存结构的方式。

typedef struct packed {
logic [25:0] tag;
logic valid, dirty;
word_t [1:0] data;
} block_t;

typedef struct packed {
block_t [1:0] way;
} dcache_t;

dcache_t [7:0] cache;

所以要访问一个词:cache[i].way[j].data[k]

我可以很好地写入缓存。

indexwaysel 是使用组合逻辑来确定索引位置的变量。

例如,这一行在我的 always_ff 缓存寄存器中。

cache[index].way[way].data[sel] = ccif.dload[CPUID];

在上面的代码行之后,下面的内容被存储到缓存中对于 index = 6way = 0sel = 0

cache[6].way[0].data[0] <== 0x01234567

在下一个时钟周期之后,index = 6way = 0sel = 1

cache[6].way[0].data[1] <== 0x89ABCDEF

因为我一次加载两个词。

...但是当我使用 index = 6way = 0sel = 1

读取它时
dcif.dmemload = cache[index].way[way].data[sel];

从我的缓存中读取以下内容

dcif.dmemload <== 0xCDEF0123

我得到了错误的值,不知道为什么,因为缓存中的值仍然相同并且没有改变。

这是读取时我的缓存部分的当前状态

+-------+------------+------------+
| index | data[1] | data[0] |
+-------+------------+------------+
| 6 | 89ABCDEF | 01234567 |
+-------+------------+------------+

有什么想法吗?我很困惑,因为我的索引在编写时工作正常,但在阅读时发生了一些奇怪的事情

编辑:读取的值并不总是偏移 2 个字节。我不确定我是否有太多嵌套数组。

最佳答案

这是 ModelSim/Questa 中的一个错误,将在下一个版本中修复。

解决方案是不要将整个嵌套数组全部打包。无论如何,您可能并不打算打包缓存。除非需要将整个数组作为单个整数值访问,否则不应打包数组。

dcache_t cache[7:0];

关于system-verilog - 索引嵌套数组时读取错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667736/

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