我是 VHDL 的初学者,我有一个基本问题。
让我们考虑以下输入:
A : in std_logic_vector(22 downto 0);
而这个信号:
signal dummyA : std_logic_vector(47 downto 0);
我想用 A 初始化 dummyA 所以我所做的是:
dummyA <= A;
这样对吗 ?我的意思是它相当于:
dummyA <= "0000000000000000000000000" & A;
?或者我应该像这样明确添加 0 。 最佳答案
您不能使用 dummyA <= A;
,因为存在类型不匹配,任何好的 VHDL 编译器都会拒绝它。
你可能会使用类似的东西
dummyA <= (A'RANGE => A, OTHERS => '0');
或(仅在顺序上下文中)
dummyA <= (OTHERS => '0');
dummyA(A'RANGE) <= A;
或者
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;
在并发上下文中,您可以使用
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;
以上所有保证
dummyA(i)
加载了 A(i)
。但是 "00000" & A
可能会导致错误配对,如果它们的范围在低端不一致。关于initialization - VHDL/如何初始化我的信号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16593125/