首页 文章

如何声明一个可变长度的std_logic_vector信号

提问于
浏览
-1

我在我的程序中声明了一个std_logic_vector输入,比如number:std_logic_vector(7 downto 0) . 我想声明一个std_logic_vector类型的信号,其长度一直在增加,直到我的输入'number'的长度 . 具体来说,我想要一个信号来做到这一点 -

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;

我怎样才能做到这一点??

1 回答

  • -1

    VHDL是一种硬件描述语言(HDL) . 您的std_logic_vector由连线和寄存器(物理组件)表示 . 因此,大小不能动态改变,但必须在合成前确定 .

    所以使用你需要的'MAX'长度的std_logic_vector,然后只读取你需要的位:

    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
    

    不确定你想要做什么,但这些想法应该有所帮助 .

相关问题