VHDL /如何初始化我的信号?

use*_*315 4 signals initialization fpga vhdl

我是VHDL的初学者,我有一个基本的问题.

让我们考虑以下输入:

A  : in std_logic_vector(22 downto 0);
Run Code Online (Sandbox Code Playgroud)

这个信号:

signal dummyA : std_logic_vector(47 downto 0);
Run Code Online (Sandbox Code Playgroud)

我想用A初始化dummyA所以我做的是:

dummyA <= A;
Run Code Online (Sandbox Code Playgroud)

它是否正确 ?我的意思是它相当于:

dummyA <= "0000000000000000000000000" & A;?或者我应该像这样明确地添加0.

Ben*_*igt 7

你不能使用,dummyA <= A;因为存在类型不匹配,任何好的VHDL编译器都会拒绝它.

你可以使用类似的东西

dummyA <= (A'RANGE => A, OTHERS => '0');
Run Code Online (Sandbox Code Playgroud)

或(仅在顺序上下文中)

dummyA <= (OTHERS => '0');
dummyA(A'RANGE) <= A;
Run Code Online (Sandbox Code Playgroud)

要么

FOR i IN dummyA'RANGE LOOP
    IF i >= A'LOW AND i <= A'HIGH THEN
        dummyA(i) <= A(i);
    ELSE
        dummyA(i) <= '0';
    END IF;
END LOOP;
Run Code Online (Sandbox Code Playgroud)

在并发上下文中,您可以使用

FOR i IN dummyA'RANGE GENERATE
    IF i >= A'LOW AND i <= A'HIGH GENERATE
        dummyA(i) <= A(i);
    END GENERATE;
    -- ELSE
    IF i < A'LOW OR i > A'HIGH GENERATE
        dummyA(i) <= '0';
    END GENERATE;
END GENERATE;
Run Code Online (Sandbox Code Playgroud)

以上所有保证dummyA(i)都是加载的A(i).但"00000" & A如果他们的范围在低端并不一致,可能会导致配对错误.