我正在尝试执行此模块,其中输入" 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;
答案 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语句中的条件所依赖的值,以了解设计中连接了多少个触发器层次结构。模拟和合成的效果相同。
设计模型层次结构在详细说明后不会改变。你还没有提供可以做到这一点的设计规范。