gpt4 book ai didi

variables - VHDL:变量和过程

转载 作者:行者123 更新时间:2023-12-04 05:13:30 27 4
gpt4 key购买 nike

我正在研究 VHDL,我发现一件特别难以理解的事情,因为 VHDL 是一种 HDL,在我看来,它描述的一切都应该能够转换成电路。但是这怎么会发生在变量和过程上呢?有没有什么电路可以实现变量和过程?你能给我举个例子吗?谢谢

最佳答案

包含变量的过程当然可以转换为电路。
这里有几个简单的例子。

Process(clk)
Variable Q : std_logic_vector(7 downto 0);
begin
if rising_edge(clk) then
if En = '0' then
Q := D;
end if;
end if;
Output <= Q;
end process;
在每个时钟周期内,若En(Enable)输入为低电平,则输入数据D存入变量Q;否则什么都不会发生(并且变量保持其旧值)。这是一个非常特殊的电路;一个带使能的 8 位寄存器;在旧数据手册中查找 74LS377 以查看 TTL 中的相同电路。
请注意,时钟“if”语句与 En 语句分开,并围绕它。综合工具寻找他们知道如何翻译的特定模式,这就是其中之一。如果您有任何软件经验,您可能会想将它们结合起来: if rising_edge(Clk) and En = '0' then ... - 在模拟中你会得到完全相同的行为。
然而,一些综合工具可能无法识别这种模式,并且可能会报告错误而不是生成硬件。 (合成工具在不断改进,所以你现在可能很幸运)。该工具的文档(例如 Xilinx“ synthesis and simulation design guide”)应该描述什么是可能的,什么是不可能的。 [编辑:] 不幸的是,它停留在 1995 年的实践中,并且包含一些真正可怕的 VHDL 示例。
Process(clk)
Variable Count : Integer range 0 .. 255 := 0; -- set to 0 when process first starts
begin
if rising_edge(clk) then
Count := Count + 1 mod 256;
end if;
Output := Count;
end process;
注意变量和信号一样,不需要是逻辑类型;整数、数组和记录(有一些限制)是可合成的; float 通常不是(尽管随着工具的改进这种情况正在发生变化)。请注意,我限制了整数的范围,以获得 8 位计数器。
对于整数,您还需要明确指定当它们溢出时会发生什么(就像我在这里所做的那样) - 否则您将在模拟中出错。但是,指定明显的行为(如此处)不应该花费任何额外的硬件。使用其他数字类型,如 numeric_std.unsigned,这些工具就不会那么繁琐了。
我简化了一点;通常在典型的过程中有一个 Reset 子句来让你控制启动行为,但这些例子是真实的,应该可以工作。

关于variables - VHDL:变量和过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592511/

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