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

标签 initialization signals vhdl fpga

我是 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/

相关文章:

c - 在 C 中,变量的多次初始化不会引发错误。为什么?

c - 在 STM32L0 上的 IAR 中初始化 Eeprom

fork 后调用信号

vhdl - 如何让图书馆工作?

c++ - 初始化两个相互引用的结构数组

bash 陷阱不会忽略信号

c++ - 用于 Visual C++ 的线程

makefile - 从 makefile 生成 VHDL 条件

vhdl - .vhd 文件扩展名是否有两种不同的含义?

objective-c - 为什么我们都在 init 方法中检查 if(self)?