错误:“索引值(-1)超出VHDL对象名称的范围”。 (MAX +PLUS®IIVHDL)

如果明确分配std_logic_vector0位而不是使用LOOP变量,则在RANGE FOR LOOP语句中可能会发生此错误。

解决方案是在LOOP语句之外进行位0的赋值,从而修改循环中的RANGE语句以排除位0

导致错误的代码示例如下所示:

 SIGNAL cfg_a:std_logic_vector(32 downto 0);
SIGNAL cfg_edge1:std_logic_vector(32 downto 0);

cfg_a_proc:PROCESS(cfgclk)
   开始
      IF(cfgclk'EVENT and cfgclk ='1')那么
         我在cfg_a'RANGE LOOP
            IF(i = 0)那么
               cfg_a(0)<= cfg_in;
            其他
               cfg_a(i)<= cfg_a(i-1);
            万一;
         结束循环;
      万一;
   END PROCESS cfg_a_proc; 

一个工作示例如下所示:

 SIGNAL cfg_a:std_logic_vector(32 downto 0);
SIGNAL cfg_edge1:std_logic_vector(32 downto 0);

cfg_a_proc:PROCESS(cfgclk)
   开始
      IF(cfgclk'EVENT and cfgclk ='1')那么
cfg_a(0)<= cfg_in;
         FOR i in 1 to(cfg_a'length  -  1)'RANGE LOOP
               cfg_a(i)<= cfg_a(i-1);
         结束循环;
      万一;
   END PROCESS cfg_a_proc; 
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-06 16:44:08 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它