Arrays 使用Verilog查找数字数组中的最小值以实现优先级队列
我是Verilog的新手,但我有一个16个元素的数组(每个元素有16位长),我希望找到数组中的最小项,返回最小值,并重新排列数组中最小值之后的所有项,以便数组是一个连续的项块。我知道我必须使用比较器,但我真的不知道从哪里开始比较一大组数字并确定最小值 编辑:我实际上做的是一个优先级队列。我实现了队列功能,但是我不想返回队列头部的内容,而是希望返回具有最小值的条目,并保持存储连续Arrays 使用Verilog查找数字数组中的最小值以实现优先级队列,arrays,comparison,verilog,priority-queue,system-verilog,Arrays,Comparison,Verilog,Priority Queue,System Verilog,我是Verilog的新手,但我有一个16个元素的数组(每个元素有16位长),我希望找到数组中的最小项,返回最小值,并重新排列数组中最小值之后的所有项,以便数组是一个连续的项块。我知道我必须使用比较器,但我真的不知道从哪里开始比较一大组数字并确定最小值 编辑:我实际上做的是一个优先级队列。我实现了队列功能,但是我不想返回队列头部的内容,而是希望返回具有最小值的条目,并保持存储连续 e.g. {2,3,4,1,5,6,-,-} min is 1 --> {2,3,4,-,5,6,-,-}
e.g. {2,3,4,1,5,6,-,-}
min is 1 --> {2,3,4,-,5,6,-,-}
Rearrange so everything following the returned min is moved to the index preceding it-->
{2,3,4,5,6,-,-,-}
如果您没有减少门或LUT数量的压力,一个简单的方法是实现树型结构 如果队列中的条目是A0、A1、。。。A7,执行以下步骤:
如果您想提高效率,可以使用一个变量,即比较是在排队时进行还是在退队时进行。您可能还想考虑是否需要在每个队列中重新打包。 < P>一个简单的方法,如果您没有减少门或LUT的数量的压力,就是实现树型结构。 如果队列中的条目是A0、A1、。。。A7,执行以下步骤:
如果您想提高效率,可以使用一个变量,即比较是在排队时进行还是在退队时进行。您可能还想考虑是否需要在每个队列中重新打包。 < P> System Verilog为数组提供了<代码>排序< /代码>方法。请参阅IEEE标准1800-2009第7.12.2节中的“阵列排序方法”。SystemVerilog为阵列提供了一种排序方法。请参阅IEEE标准1800-2009第7.12.2节中的“阵列订购方法”。谢谢。我一定听从你的建议。我仍然不确定重新打包队列的问题。我之所以玩弄这个想法,是因为如果我不将其重新打包到连续存储中,它看起来像是“浪费了空间”。是否浪费空间取决于您的重新分配策略。如果不需要跟踪事物排队的顺序,可以为数组保留一个有效/空位向量,然后搜索它以找到一个空闲条目。这有一定的成本,但比查找最小值逻辑要便宜得多。实际上,空/满条目数组听起来是个不错的主意。也许我会考虑实施这一点。实际上,我所关心的只是从队列中删除最小条目,因此它位于何处并不重要。谢谢你的帮助。我真的很感激,谢谢。我一定听从你的建议。我仍然不确定重新打包队列的问题。我之所以玩弄这个想法,是因为如果我不将其重新打包到连续存储中,它看起来像是“浪费了空间”。是否浪费空间取决于您的重新分配策略。如果不需要跟踪事物排队的顺序,可以为数组保留一个有效/空位向量,然后搜索它以找到一个空闲条目。这有一定的成本,但比查找最小值逻辑要便宜得多。实际上,空/满条目数组听起来是个不错的主意。也许我会考虑实施这一点。实际上,我所关心的只是从队列中删除最小条目,因此它位于何处并不重要。谢谢你的帮助。我真的很感激。
sort
方法用于将数组从最小值重新排列到最大值。但我认为在此上下文中,min
方法对于查找最小值更有用。sort
方法用于将数组从最小值重新排列到最大值。但我认为在此上下文中,min
方法对于查找最小值更有用。