2017-06-16 44 views
-1

我有一个std_logic_vector输入声明在我的程序中, 说数字:std_logic_vector(7 downto 0)。 我想声明一个std_logic_vector类型的信号,它的长度一直增加,直到输入'数字'的长度。具体来说,我想要一个信号做到这一点 -如何声明一个可变长度std_logic_vector信号

for j in num_length downto 0 loop --num_length=number'length-1 
a <= number(num_length downto j); -- variable length signal 'a' 
end loop; 

我该怎么做?

+0

使用'number'length'。但是你的代码示例没有意义。 – JHBonarius

+0

好的。我会解释我的问题。用于离:我有 号= “10101010” (A大小为8的std_logic_vector)我要声明的信号 'A',其应该采取 一个= “1” 一个= “10” 一个= “101” a =“1010”等 ,因为它在for循环中停止。 我正在看一个简单的方法来做到这一点。谢谢! – Veena

+0

所以你想要一个可变长度的'std_logic_vector'?你如何认为这有效?你需要动态内存分配。 VHDL是一种硬件描述语言。 'std_logic_vector'表示一些导线。您将如何在系统中动态添加或删除电线?在实例化过程中修复任何数组的长度。 – JHBonarius

回答

-1

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 

不知道你想要做的完全是,但这些想法应该帮助。

+0

是的。目前我正在尝试最大长度并尝试调整我的信号。在你的解决方案中,你如何定义面罩?再次它需要是可变长度的权利?否则我们会收到错误。 – Veena

+0

实际上,我的意思是零填充,尽管你也可以使用掩码来做它...回答编辑。 –

相关问题