VHDL是一种硬件描述语言(HDL)。您的std_logic_vector由导线和寄存器(物理组件)表示。因此,大小不能动态变化,但必须确定预综合。
所以使用std_logic_vector与“MAX”的长度,你需要,那么只能读取您需要的位:
constant zeros : std_logic_vector(MAX-1 downto 0) := (others => '0');
signal a,b : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= zeros(MAX-1 downto i) & a(i-1 downto 0); -- i is your dynamic index
这并不能掩盖的情况下,你需要阅读,虽然在全矢量。
你可以使用口罩..有点乱:
use ieee.numeric_std.all;
...
constant mask : std_logic_vector(MAX-1 downto 0) := (others => '1');
signal a,b : std_logic_vector(MAX-1 downto 0);
...
a <= something;
...
b <= std_logic_vector(shift_right(unsigned(mask), MAX-i)) and a; -- i is your dynamic index
不知道你想要做的完全是,但这些想法应该帮助。
使用'number'length'。但是你的代码示例没有意义。 – JHBonarius
好的。我会解释我的问题。用于离:我有 号= “10101010” (A大小为8的std_logic_vector)我要声明的信号 'A',其应该采取 一个= “1” 一个= “10” 一个= “101” a =“1010”等 ,因为它在for循环中停止。 我正在看一个简单的方法来做到这一点。谢谢! – Veena
所以你想要一个可变长度的'std_logic_vector'?你如何认为这有效?你需要动态内存分配。 VHDL是一种硬件描述语言。 'std_logic_vector'表示一些导线。您将如何在系统中动态添加或删除电线?在实例化过程中修复任何数组的长度。 – JHBonarius