VHDL 未解析信号的多个来源,尽管只有一项分配

问题描述 投票:0回答:1

该示例将使用已解析的信号来显示波形,因此问题将由

X
元值指示。

给出这段代码:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY ent IS 
END ENTITY ent;

ARCHITECTURE arch OF ent IS 
    SIGNAL slv : std_logic_vector(3 DOWNTO 0) := x"0";

    SIGNAL i0  : integer RANGE 3 DOWNTO 0 := 0;
    SIGNAL i1  : integer RANGE 3 DOWNTO 0 := 2;

    SIGNAL clk : std_logic := '0';
BEGIN
    PROCESS IS
    BEGIN
        WAIT FOR 1 NS;
        clk <= NOT clk;
    END PROCESS;

    slv(i0) <= '1' WHEN rising_edge(clk);
    slv(i1) <= '1' WHEN rising_edge(clk);
END ARCHITECTURE arch;

详细分析并使用这些命令运行:

ghdl -a --std=08 ex.vhdl
ghdl -e --std=08 ent
ghdl -r ent --wave=wave.ghw --stop-time=10ns

这是波形:

信号的行为就好像有另一个全 0 的赋值,即使我没有在这里写任何类似的东西。
我已经使用分辨率函数来测试(未在 MRE 中显示以保持 MRE 最小),并且似乎确实在每个信号分配上也分配了初始值。

当只分配一个信号或两个索引都恒定时,不会发生这种额外的分配,并且一切都按照我的预期运行。

这是为什么?

vhdl ghdl
1个回答
0
投票

你有一个初始化语句:

SIGNAL slv : std_logic_vector(3 DOWNTO 0) := x"0";

这解释了为什么所有

slv
位从一开始就是
0

随着

clk
的上升沿,您的设计仅分配给四个位中的两个。所以其他人就变成了
X

© www.soinside.com 2019 - 2024. All rights reserved.