VHDL中的匹配模拟和后合成行为
这个问题是另一个问题的延伸 然而,由于代表分数不足50分,我无法就进一步的解释发表评论 因此,我在链接中遇到了同样的问题,并接受了显示的答案。然而,现在我对推荐的方法感兴趣,以便将模拟与合成后行为相匹配。链路中的公认答案表示,不建议将电平敏感锁存作为解决方案,因为它们会导致更多问题。所以我的问题是,推荐的方法是什么?有吗 换句话说,我想在那个职位上实现我的目标,但这样做不会带来更多的问题。我需要我的敏感度列表不被我的合成工具忽略VHDL中的匹配模拟和后合成行为,vhdl,quartus,Vhdl,Quartus,这个问题是另一个问题的延伸 然而,由于代表分数不足50分,我无法就进一步的解释发表评论 因此,我在链接中遇到了同样的问题,并接受了显示的答案。然而,现在我对推荐的方法感兴趣,以便将模拟与合成后行为相匹配。链路中的公认答案表示,不建议将电平敏感锁存作为解决方案,因为它们会导致更多问题。所以我的问题是,推荐的方法是什么?有吗 换句话说,我想在那个职位上实现我的目标,但这样做不会带来更多的问题。我需要我的敏感度列表不被我的合成工具忽略 另外,我是VHDL新手,所以使用进程可能不是实现我想要的结果的正确
另外,我是VHDL新手,所以使用进程可能不是实现我想要的结果的正确方法。我使用的是带有Quartus Prime 16.0的DE2-115。任何信息都将不胜感激。如果您使用VHDL对基于FPGA的原型板进行编程,您将对该语言的合成语义感兴趣。它与语言参考手册(LRM)中描述的模拟语义有很大不同。更糟糕的是:它没有标准化,并且在合成工具之间有所不同。总之,合成意味着从VHDL代码到数字硬件的转换。对于仍然不清楚合成语义的初学者,这里唯一推荐的方法是: 先考虑硬件,然后编码。 换句话说,在一张纸上画一个你想要的硬件框图。并使用以下10条规则。严格地说。没有例外。从未。别忘了仔细检查最后一个,它和其他的一样重要,但更难验证
clock
。它来自外部,是所有方形块的输入,并且只有它们。甚至不要表示时钟,它对于所有的方块都是相同的,您可以将它隐式地保留在图表中- 每平方块一个同步进程
- 每个圆形块一个组合过程
process(clock)
begin
if rising_edge(clock) then
o1 <= i1;
...
on <= in;
end if;
end process;
process(i1, i2,... , in)
<declarations>
begin
o1 <= <default_value_for_o1>;
...
om <= <default_value_for_om>;
<statements>
end process;
其中,中的i1,i2,…,是进入图表相应圆形块的所有箭头全部仅此而已。不要忘记一个箭头,也不要添加任何其他内容。没有例外。从未。其中,o1,…,om
是所有输出图表相应圆形块的箭头全部仅此而已。除了
、输入的名称、输出的名称、
和
的值外,不要更改任何内容。不要忘记单个默认值赋值。如果必须创建新的圆形块来拆分主输出箭头,则相应的过程如下:
process(i)
begin
o <= i;
end process;
过程(一)
开始
o我需要我的敏感度列表不被我的合成工具忽略。使用供应商推荐的顺序构造(如问题的答案所示)。条件或语句中的任何评估信号都应在灵敏度列表中(在-2008中等同于使用保留字all
)。见Quartus Prime标准版手册第1卷,第12页。推荐的HDL编码样式、寄存器和锁存器编码样式。模拟(结果未显示)似乎依赖于CE从灵敏度列表中推断出的锁存器,该锁存器未用于合成(且未提供锁存器)。简而言之,使用VHDL进行数字硬件设计。非常有用的信息,这有助于解决很多问题。我想我理解它是如何工作的,但是你是否有一个你描述的设计过程的视觉参考(例如视频教程),或者研究“block d”的合适名称是什么
o <= i;
process(clock, reset)
begin
if reset = '1' then
o <= reset_value_for_o;
elsif rising_edge(clock) then
o <= i;
end if;
end process;