gpt4 book ai didi

VHDL 状态机差异(用于综合)

转载 作者:行者123 更新时间:2023-12-01 07:26:40 24 4
gpt4 key购买 nike

我正在上一门关于嵌入式系统设计的类(class),我的一个同学上了一门类(class),声称另一门类(class)的讲师不会让他们实现这样的状态机:

architecture behavioral of sm is
type state_t is (s1, s2, s3);
signal state : state_t;
begin
oneproc: process(Rst, Clk)
begin
if (Rst = '1') then
-- Reset
elsif (rising_edge(Clk)) then
case state is
when s1 =>
if (input = '1') then
state <= s2;
else
state <= s1;
end if;
...
...
...

end case;
end if;
end process;
end architecture;

但相反,他们必须这样做:
architecture behavioral of sm is
type state_t is (s1, s2, s3);
signal state, next_state : state_t;
begin
syncproc: process(Rst, Clk)
begin
if (Rst = '1') then
--Reset
elsif (rising_edge(Clk)) then
state <= next_state;
end if;
end process;

combproc: process(state)
begin
case state is
when s1 =>
if (input = '1') then
next_state <= s2;
else
next_state <= s1;
end if;
...
...
...

end case;
end process;
end architecture;

对于我这个非常缺乏经验的人来说,第一种方法看起来更简单,因为一切都是计时的,并且引入锁存器的风险更小(没有?)。

我的同学无法给我任何理由解释为什么他的讲师不让他们使用其他方式来实现它,所以我试图找出每种方法的优缺点。
他们中的任何一个在行业中都是首选吗?为什么我要避免其中之一?

最佳答案

单流程形式更简单、更短。仅此一项就减少了它包含错误的机会。

然而,它也消除了困扰其他组合过程的“不完整的敏感性列表”问题的事实 应该 使其成为明显的赢家,而不管其他任何考虑。

然而,有太多的文本和教程提出相反的建议,没有适本地证明该建议的合理性,或者(至少在一种情况下我找不到 atm)将一个愚蠢的错误引入到单一流程形式中并以以下为由拒绝整个想法那个错误。

唯一(AFAIK)单进程形式做得不好的是非时钟输出。无论如何,这些都是(IMO)糟糕的做法,因为它们可以在最好的时候进行比赛,并且只有在您确实必须这样做时才能通过该输出的单独组合过程来处理。

我猜这背后最初是有一些实际原因的;也许是 1990 年代中期的综合工具,它无法可靠地处理单一流程形式,并使其成为讲师从中学习的原始文档。就像那些被炸毁的非标准 std_logic_arith 库一样。所以这个神话一直延续下去......

如果这些讲师看到可以通过现代综合工具传递的信息:整数、枚举、记录类型、循环、函数和程序更新信号(Xilinx ISE 现在可以很好地处理这些问题。某些版本的 Synplicity 有问题)函数,但接受带有 Out 参数的相同过程)。

另一条评论:我更喜欢 if Rst = '1' then 而不是 if (Rst = '1') then 。它看起来不像线路噪声(或 C)。

关于VHDL 状态机差异(用于综合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com