1

我有一些这样声明的队列:

static bit [127:0]   same_addr_mem_model [int][$]; 
static bit [127:0]   temp_addr_mem_model [int][$];

然后在代码行后面:

same_addr_mem_model[write_addr].insert(0,temp_addr_mem_model[write_addr]); // write_addr is some int

那一行给了我 Cadence IES 的编译器错误:

赋值运算符类型检查失败(期望数据类型与“压缩数组”兼容,但发现“压缩数组 [127:0] 位的队列”)。

但正如我在网上找到的文档一样,队列似乎是insert(). 知道这里有什么问题吗?顺便说一句,此代码使用 Synopsys VCS 编译和运行。

4

1 回答 1

3

函数原型为insert

function void insert(input int index, input element_t item);

因此,如果您正在创建一个队列,ints那么您将无法添加一个intsusing队列insert

供应商不实施所有语言规范或实施不在规范中的特定于供应商的功能的情况并不少见。这是一种情况,但似乎 VCS 不允许这样做是错误的。我会仔细检查它是否真的在做你期望的事情。

SystemVerilog 中的函数不能通过参数类型重载,因此无法实现两个insert函数,一个获取元素类型,另一个获取元素队列。

您应该能够使用赋值语法获得等效的行为。

same_addr_mem_model[write_addr] = {temp_addr_mem_model[write_addr], same_addr_mem_model[write_addr]});

请参阅 2012 SystemVerilog 规范的第 7.10.4 节。

于 2013-05-20T15:46:58.550 回答