【发布时间】:2020-05-14 09:52:33
【问题描述】:
我使用 VHDL 几个月了,当我希望按顺序评估某些条件时,我有时会使用 非嵌套 if 语句构建这种过程:
process(clk)
begin
if rising_edge(clk) then
if CONDITION1 then
(some instructions)
end if;
if CONDITION2 then
(some instructions)
end if;
end if;
end process;
它似乎在模拟和合成中都运行良好,但我在网络上查找示例时几乎从未见过这种结构。 我对这些语句的顺序执行表示怀疑,但 IEEE 标准 VHDL 语言参考手册 Std 1076-2008 指出:
顺序语句用于定义执行算法 子程序或进程的;他们按照他们执行的顺序执行 出现。
并且if 语句在顺序语句列表中。
为什么我找不到更多这样的例子?这是一种不好的做法吗?
【问题讨论】:
-
我建议不要这样做。您始终可以将第二个
if替换为elsif或else。为什么我不建议这样做?因为您的合成器有可能认为在某些情况下CONDITION1或CONDITION2都不是真的,所以它会放入锁存器,即使它们不是必需的。 (如果你最终得到一个elsif,为了避免闩锁,你是否还需要一个else或一个默认分配。) -
@MatthewTaylor 它是一个时钟进程,因此不应该出现闩锁。由于我在下面的回答,如果一直没有问题,我会使用双精度。
CONDITION1可以是同步使能和CONDITION2同步复位,它允许您分别选择哪些信号使能和复位。if..else强制所有信号都连接到两者。 -
@Tricky 哦。是的。这是一个计时过程。那就没有闩锁了。
-
更正:出于我所说的所有原因,我建议不要在组合过程中进行。
标签: if-statement vhdl synthesis