【问题标题】:VHDL "For" Loop Null RangeVHDL“For”循环空范围
【发布时间】:2016-04-08 20:41:26
【问题描述】:

我已经被这个问题困扰了几个小时了,我似乎无法通过搜索找到解决方案,即在这里或谷歌上都没有找到任何东西。

这是我的一段代码:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std;
USE work.arrays.ALL;

ENTITY parallel IS  
  PORT (clk:IN std_logic; text:IN INT_ARRAY(119 DOWNTO 0); result:OUT INT_MATRIX_2D);
END parallel;

ARCHITECTURE arch OF parallel IS
  COMPONENT unit_comparator IS
    PORT (letter:IN integer; difference:OUT integer);
  END COMPONENT;
  SIGNAL temp: INT_MATRIX_2D := (others => (others => 0));
  SIGNAL temp_differences: INT_ARRAY(119 DOWNTO 0) := (others => 0);
  BEGIN
    PROCESS(clk)
    BEGIN
      IF(rising_edge(clk))THEN
        FOR index IN 119 TO 1 LOOP
          temp(temp_differences(index))(temp_differences(index - 1)) <= 
          temp(temp_differences(index))(temp_differences(index - 1)) + 1;
        END LOOP;
        result <= temp;
      END IF;
    END PROCESS;
  wiring_loop: FOR index IN 119 DOWNTO 0 GENERATE
    wiring_unit: unit_comparator PORT MAP (text(index), temp_differences(index));
  END GENERATE;
END arch;

你看到“FOR index IN 119 TO 1 LOOP”了吗?

编译器给出一个“Range 119 to 0 is Null”警告(毫无疑问,整个事情都不能正常工作),我似乎有一个问题的理解。如果在循环的每一步都有一个整数分配给“索引”,它怎么会变成空(它说它在每一步都发生!)。我需要一个坚定的理解,而不是一个简单的解决方案。 (注意:所有使用的模块和包都经过测试并且可以正常工作!)

谢谢!

【问题讨论】:

  • Google 在“VHDL 空范围”上的第一个命中(对我而言)是this nice explanation from Sigasi。您的示例也不完整(因为缺少包 arrays)也不是最小的(因为不必要的组件/实例化)。
  • IEEE Std 1076-2008 5.2.1(标量类型):“范围指定标量类型值的子集。如果指定的子集为空,则称范围为空范围。 L 到 R 的范围称为升序范围;如果 L > R,则该范围为空范围。从 L 到 R 的范围称为降序范围;如果 L 左边界,R称为范围的右边界。"这不是错误,请参阅 11.8 Generate statements,第 4 段:“generate 参数是一个常量对象,其类型是离散范围的基本类型......”。

标签: loops for-loop vhdl hdl


【解决方案1】:

范围需要一个与其限制相对应的方向。你想要119 downto 11 to 119119 to 1 不是一个适合迭代的范围。

【讨论】:

  • 不用说你救了我(我需要一副新眼镜哈哈)
  • 这是一个完全有效的范围,它只是一个空(空)范围!
  • @BrianDrummond 这样更好吗?
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多