为什么信号分配不在第一次迭代时执行?超高密度语言
Why does signal assignment not execute on the first iteration? VHDL
我是 VHDL 新手。我听说信号分配只在进程结束时更新,并且只会使用最近的分配,所以我想测试一下。为什么 temp 的值在第一个过程结束时没有更新(i=0),即使我已经有了 a、b、c 的初始值?它仅在第二次迭代 (i=1) 时才开始更新 temp 的值。
我用来测试的代码:
architecture Behavioral of test is
signal a : integer := 1;
signal b : integer := 2;
signal c : integer := 3;
signal i : integer := 0;
signal temp, temp2 : integer;
begin
process is
begin
report "-----Start Here-----(" & integer'image(i) & ")";
temp <= a; report "1:" & integer'image(temp);
temp <= b; report "2:" & integer'image(temp);
temp <= c; report "3:" & integer'image(temp);
temp2 <= a; report "4:" & integer'image(temp2);
temp2 <= temp; report "5:" & integer'image(temp2);
report "-----End Here----------------------------";
i <= i + 1;
wait for 10ns;
end process;
end architecture;
输出:
-----Start Here-----(0)
1: -2147483648
2: -2147483648
3: -2147483648
4: -2147483648
5: -2147483648
-----End Here----------------------------
-----Start Here-----(1)
1: 3
2: 3
3: 3
4: -2147483648
5: -2147483648
-----End Here----------------------------
-----Start Here-----(2)
1: 3
2: 3
3: 3
4: 3
5: 3
-----End Here----------------------------
发生信号分配时,它会安排在进程遇到等待语句(没有敏感列表时)或进程完成(有敏感列表时)时更新值。
在您的流程中,在时间 0,流程开始。 temp
具有初始值 integer'low
。您分配 a
,然后分配 b
,最后分配 c
(哪个获胜,temp
将被安排分配 c
)。请记住,此时没有等待语句命中,因此信号分配还没有发生。因此,为什么 report
都报告 temp
的初始值。
如果将报告语句移到等待语句之后,您会看到更新后的值。
我是 VHDL 新手。我听说信号分配只在进程结束时更新,并且只会使用最近的分配,所以我想测试一下。为什么 temp 的值在第一个过程结束时没有更新(i=0),即使我已经有了 a、b、c 的初始值?它仅在第二次迭代 (i=1) 时才开始更新 temp 的值。
我用来测试的代码:
architecture Behavioral of test is
signal a : integer := 1;
signal b : integer := 2;
signal c : integer := 3;
signal i : integer := 0;
signal temp, temp2 : integer;
begin
process is
begin
report "-----Start Here-----(" & integer'image(i) & ")";
temp <= a; report "1:" & integer'image(temp);
temp <= b; report "2:" & integer'image(temp);
temp <= c; report "3:" & integer'image(temp);
temp2 <= a; report "4:" & integer'image(temp2);
temp2 <= temp; report "5:" & integer'image(temp2);
report "-----End Here----------------------------";
i <= i + 1;
wait for 10ns;
end process;
end architecture;
输出:
-----Start Here-----(0)
1: -2147483648
2: -2147483648
3: -2147483648
4: -2147483648
5: -2147483648
-----End Here----------------------------
-----Start Here-----(1)
1: 3
2: 3
3: 3
4: -2147483648
5: -2147483648
-----End Here----------------------------
-----Start Here-----(2)
1: 3
2: 3
3: 3
4: 3
5: 3
-----End Here----------------------------
发生信号分配时,它会安排在进程遇到等待语句(没有敏感列表时)或进程完成(有敏感列表时)时更新值。
在您的流程中,在时间 0,流程开始。 temp
具有初始值 integer'low
。您分配 a
,然后分配 b
,最后分配 c
(哪个获胜,temp
将被安排分配 c
)。请记住,此时没有等待语句命中,因此信号分配还没有发生。因此,为什么 report
都报告 temp
的初始值。
如果将报告语句移到等待语句之后,您会看到更新后的值。