将n长位逻辑向量分割为n个单独的二进制值

时间:2014-06-01 13:35:45

标签: vhdl

我想知道是否有一种方法可以拆分n位长的矢量,例如:

10100111

进入n个单独的二进制单位以后使用?我正在尝试合并一种方法,我可以获得一个8位长的矢量,并且如果第n个值为0或1,则有8个LED点亮。谷歌搜索问题会让人们将较大的矢量切割成较小的矢量,但是如果我们以16位为例,那么我必须使用以下方法制作16个独立的变量:

entity test is
port (
 myVector : in std_logic_vector(16 downto 0);
 LED : out std_logic_vector(16 downto 0)
);
END test

architecture behavior of test is
 SIGNAL led1 : std_logic;
 ...
 SIGNAL led16 : std_logic;
BEGIN

 led1 <= myVector(0);
 ...
 led16 <= myVector(16);

 LED(1) <= '1' when led1 = '1' else '0';
 ...
 LED(16) <= '1' when led16 = '1' else '0';
END behavior

在代码中需要重复多次时,似乎并不整洁。

1 个答案:

答案 0 :(得分:3)

如果要声明并分配给具有不同名称的标识符,则必须为每个名称创建一行,因为VHDL中没有用于标识符名称操作的循环语句。

但VHDL提供了数组,您可以在其中循环条目,就像这个示例代码一样:

...
   signal led_sig  : std_logic_vector(16 downto 0);
begin
  loop_g: for idx in myVector'range generate
    led_sig(idx) <= myVector(idx);
    LED(idx)     <= '1' when led_sig(idx) = '1' else '0';
  end generate;
...

如果分配等同于较短的分配:

led_sig <= myVector;
LED     <= led_sig;