gpt4 book ai didi

vhdl - 是否可以合成带有变量的VHDL代码

转载 作者:行者123 更新时间:2023-12-02 15:33:51 25 4
gpt4 key购买 nike

如果我的 VHDL 中有变量,它是否可以综合(使用像 RTL 编译器这样的软件)?

我对此表示怀疑,因为它会立即更改其值。我现在正在使用 std_logic

最佳答案

正如 Brian Drummond 所写,您可以使用变量和网表结果取决于变量是在赋值之前还是之后读取的。

如果变量在之前赋值被读取,那么变量传递一个值从以前的时间到当前的时间,和存储(通常是触发器或锁存器)需要随着时间的推移保持状态。示例代码,其中sigvar 将导致触发器,因为变量 var 被读取分配前:

process (clk_i) is
variable var : std_logic;
begin
if rising_edge(clk_i) then
sig <= var;
var := arg;
end if;
end process;

如果变量在赋值后被读取,那么任何先前的变量值都是未使用,因此网表中未实现任何存储。因此变量是仅用于制作中间值,例如简化代码编写。示例代码,其中只有 sig 会导致触发器,因为变量var 赋值后读取:

process (clk_i) is
variable var : std_logic;
begin
if rising_edge(clk_i) then
var := arg;
sig <= var;
end if;
end process;

在更复杂(现实)的代码中,可能很难确保变量仅在分配后读取,因此不会推断出意外的存储(触发器或锁存器)。一种有用的编码风格是为所有变量分配代码开头的未知 ('X')。如果之前读取了一个变量分配,错误通常在仿真和调试的早期就被发现了。示例代码:

process (clk_i) is
variable var : std_logic;
begin
if rising_edge(clk_i) then
var := `X`; -- Ensure variable assign before any use to avoid storage
var := arg;
sig <= var;
end if;
end process;

请注意,在模拟中,通常需要额外的努力来包括波形中的变量;例如,ModelSim 在一个单独的“本地” View 。如果保存状态的变量被排除在波形然后调试要困难得多,因为波形然后只显示了故事的一半。

因此,一种实用的编码风格是仅将变量用于中间值过程中的值,因此总是在分配后进行读取。

关于vhdl - 是否可以合成带有变量的VHDL代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351273/

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