关于最佳VHDL设计实践的问题。
在设计状态机时,我应该在架构中使用信号还是使用变量。到目前为止,我一直使用变量,因为它们对这个过程是“有点”私有的,而且恕我直言很有意义,因为它们不应该在进程外访问。但这是一个很好的设计实践吗?
type state_type is (s0,s1);
signal state : state_type := s0;
A : process(clk)
begin
if rising_edge(clk) then
case state is
.....
end case;
end if;
end process;
--This process uses a variable
B : process(clk)
type state_type is (s0,s1);
variable state : state_type := s0;
begin
if rising_edge(clk) then
case state is
.....
end case;
end if;
end process;
答案 0 :(得分:4)
我更喜欢使用信号。原因是它允许设计在多个进程之间分配。一个进程可以担心状态机如何从一个状态移动到另一个状态,而其他进程可以包含依赖于状态的逻辑。
这样做意味着您可以拥有多个简单的流程,每个流程都可以完成一件事。使用变量,一切都必须进入一个过程,这可能变得难以处理。
虽然这是一种风格选择。
答案 1 :(得分:3)
我总是使用variable
s,除非我需要将一些值传递给另一个进程。因为那是signal
的用途。
“本地化状态变量”的另一个潜在好处(或者,可能会违反您的编码标准!)是您可以调用type
和variable
{{1和同一实体中的两个状态机中的state_type
没有它们发生冲突......
答案 2 :(得分:2)
对于合成,我几乎只使用信号。
为什么?
为什么不呢?
对于testbench,我根据用途使用变量和信号。
答案 3 :(得分:0)
如果在这种情况下信号不需要作为过程的输入或输出,则更好地使用变量,因为在构建体系结构时,您需要为模块的输出分配信号,并且如果它不会被使用,就没有必要创建信号并为你不会用来连接到你架构的另一个模块的东西花费更多的内存。