operator =的结果不是静态的

时间:2014-11-20 22:36:28

标签: case vhdl fpga xilinx

我正在尝试执行此模块,其中输入" ins15_0"输入并且如果满足某些条件,它将运行其各自的代码但是在检查语法时,我在if行上得到以下错误" operator =的结果不是静态的。"

lw : if (ins15_0 = "000000000110000") generate
   step_1 : for i in 0 to 31 generate
                    DFF1 : DFF_MEM port map (D=>din(i),clk=>CLK ,Q=>Q(i), reset=> Reset);
            end generate step_1;   
    dout <= x"00000" + q;
end generate lw;

sw : if (ins15_0 = "000000000110100") generate
    step_2 : for i in 0 to 31 generate
                        DFF2 : DFF_MEM port map (D=>rt(i),clk=>CLK ,Q=>Q(i), reset=> Reset);
            end generate step_2;

            dout <= rt;
end generate sw;

1 个答案:

答案 0 :(得分:0)

因为您的问题一直是一个移动的目标,这个地址&#34; operator =的结果不是静态的。&#34;

来自IEEE Std 1076-2008(LRM)11.8生成陈述第11段:

  

for的生成参数规范中的离散范围   generate语句应为静态离散范围;同样地,每个   if generate语句中的condition应该是一个静态表达式。

条件的值在精化时间最为静态(全局静态)。这意味着您将一个或多个常量计算为表达式,这些常量可以通过泛型传递。

如果没有看到ins15_0的延迟,它似乎是一个数组类型,可能是std_logic_vector,可能被声明为信号。

如果没有看到更多的设计规范,很难推荐解决方案。

让我们看一下11.8的第一段:

  

generate语句提供迭代或条件的机制   详细说明部分描述。

准确地了解详细说明可能会有所帮助。

参见14.2详细设计层次结构:

  

设计层次结构的细化创建了一个集合   通过网络互联的过程;这个过程和集合   然后可以执行网络来模拟设计的行为。

我们可以看一下前一段第14.1段第3段的最后一点启示:

  

为了执行模型,定义模型的设计层次结构   首先要详细说明。网络的初始化(见14.7.3.4)   然后发生模型。最后,模型的模拟继续进行。   模拟包括重复执行模拟   循环,在此过程中执行流程并更新网络。

因此,生成对于准备执行模型至关重要,这意味着需要在详细时间知道if generate语句中的条件所依赖的值,以了解设计中连接了多少个触发器层次结构。模拟和合成的效果相同。

设计模型层次结构在详细说明后不会改变。你还没有提供可以做到这一点的设计规范。