什么是在vhdl中重置整数数组的最佳方法?

时间:2015-04-20 09:39:55

标签: arrays vhdl

我是vhdl的新手,我找不到解决这个微不足道的问题的好方法。我正在寻找一种重置整数数组的好方法。

type integer_vector is array (0 to N) of integer;
...
process(...)
variable tab: integer_vector;
...
if reset = '1' then
 tab := ?? 

是否有类似tab <= (others=>(others=>'0'))的内容适用于slv?我不想使用for循环,因为合成不支持这个。

2 个答案:

答案 0 :(得分:2)

Morten的代码看起来还不错,所以请提一下报告此内容的综合工具和版本。一些综合工具可能过于原始而无法接受此代码:在其他情况下,可能存在合成选项来启用必要的行为。 (还要检查你是否正确地遵循了他的指示:(others => 0);要求整数,而(others => '0');要求位。)

然而,对于综合,请注意两件事:
(a)范围整数会更好;它试图生成32位整数(虽然后期合成阶段可能会修剪它们)

例如。

subtype my_int is natural range 0 to 99; -- needs 7 bits
type my_int_vector is array ( 0 to N) of my_int;

可能会产生更小的硬件,并且肯定会让读者清楚预期会出现较小的整数。

(b)为了在单个操作中重置整个阵列,它需要在寄存器中实现整个批次,这可以产生巨大的硬件。

如果安排在每个时钟周期重置一个位置(通常在状态机中),通过整个阵列的计数器索引,那么阵列可以实现为块存储器,从而节省大量空间。

答案 1 :(得分:0)

当数组元素为integer时,您可以执行以下操作:

tab := (others => 0);

示例中的内部(others=>'0')会将'0'分配给数组的每个std_logic中的所有std_logic_vector元素,因此当元素为integer时,只是0,如上所示。

相关问题