VCS SystemVerilog 排序错误

SystemVerilog对数组(Array)和队列(queue)支持内置的排序算法sort()和rsort(),其中sort()是从大到小排序,rsort()则是从小到大排序。参见IEEE Standard for SystemVerilog IEEE Std 1800™-2012 Section 7.12.2

内置的排序算法支持使用多个键值进行排序。比如说标准里给出的这个例子:

struct { byte red, green, blue; } c [512];  
c.sort with ( item.red ); // sort c using the red field only
c.sort( x ) with ( {x.blue, x.green} ); // sort by blue then green

其中最后一个排序则是利用了blue和green两个键值排序,当blue键相等时,使用green进一步排序。

在VCS中,如果使用sort()对一个队列排序,当被排队列很长(在几千个数据以上)时,发现多键值排序的结果是错误的。第一键值的确是从大到小,但是当第一键值相等时,第二键值却变成了从小到大排序。

经验证Cadence Incisvie就能正确排序相同的代码,说明VCS的确存在一个bug。现在还没能找到一个较干净的例子来暴露问题。所用的VCS版本是vcs G-2012.09

Advertisements