gpt4 book ai didi

VHDL - 为什么不允许在生成循环中使用变量

转载 作者:行者123 更新时间:2023-12-05 00:41:40 25 4
gpt4 key购买 nike

我知道,变量只允许在进程中使用,但为什么不允许在生成循环中使用它们。
合成这样的结构没有问题,因为它们之前已经评估过了。

没有这个限制,代码可以变得更具可读性。

lbl1: for i in data_out'range generate
lbl2a: component comp_a
port map(
clk => clk,
out => out(0)(i)
in_a => data_in(i*w + offset to i*w + w + offset));
lbl2b: component comp_b
port map(
clk => clk,
out => out(1)(i)
in_b => data_in(i*w + offset to i*w + w + offset));
.
.
.
lbl2n: component comp_n
port map(
clk => clk,
out => out(n)(i)
in_n => data_in(i*w + offset to i*w + w + offset));
end generate lbl1;

或者只是写
lbl1: for i in data_out'range generate
variable lower : integer := i*w + offset;
variable upper : integer := i*w + w + offset;
lbl2a: component comp_a
port map(
clk => clk,
out => out(0)(i)
in_a => data_in(lower to upper));
lbl2b: component comp_b
port map(
clk => clk,
out => out(1)(i)
in_b => data_in(lower to upper));
.
.
.
lbl2n: component comp_n
port map(
clk => clk,
out => out(n)(i)
in_n => data_in(lower to upper));
end generate lbl1;

该代码不是来自任何示例,它可能在任何时候失败,但我认为您明白我的意思。阅读和维护会更容易。生成的变量可能会超出生成过程之外的范围。

那么,是否有任何理由不允许这样做,或者这只是以前 vhdl 标准的历史产物?

最佳答案

如果你想声明一些东西,它需要在一个声明区域。一个 generate语句有点特殊,因为它不需要 begin ;你可以(如你所愿)使用:

GenerateLoop : for i in data_out'range generate
-- Code here
end generate;

如果您想将事物声明为循环的一部分,您必须有一个声明性区域,其中包含一条 generate 语句,如下所示:
GenerateLoop : for i in data_out'range generate
-- Declarative region
begin
-- Code here
end generate;

您应该能够在此声明区域中声明事物。请注意,您需要使用信号或常量(看起来常量更合适)而不是变量。

关于VHDL - 为什么不允许在生成循环中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302553/

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