如何从std_logic_vector中提取单个位并将其转换为整数?

时间:2018-06-17 14:36:38

标签: vhdl

我在vhdl中正在努力进行类型转换。如果这是一个非常愚蠢的问题,我对vhdl很新并且道歉。 但我想做的是,我想通过输入向量并将所有位加在一起形成一个整数。 例如,“11001010”将导致4(或“100”)。并且“11101010”将例如在6(或“110”)中产生。我怎样才能做到这一点?

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity xyz is
    port(
        input: in std_logic_vector(7 downto 0);
        output: out std_logic_vector(7 downto 0)
    );
end entity;

architecture behaviour of xyz is
    signal temp : integer := 0;
begin
    evaluate_input :process is
    begin
        for i in input'left downto input'right loop
            temp <= temp + to_integer(unsigned(input(i)));
        end loop;
    wait;
    end process;

    stop_simulation :process is
    begin
        wait for 100 ns; --run the simulation for this duration
        assert false
            report "simulation ended"
            severity failure;
    end process;
end xyz;

1 个答案:

答案 0 :(得分:1)

不要认为复杂。你想计算汉明重量。

for i in input'range loop
  temp <= temp + (1 when (input(i) = '1') else 0);
end loop;

或者以你提议的方式:

for i in input'range loop
  temp <= temp + to_integer(unsigned(input(i downto i)));
end loop;

unsigned(...)需要一个std_logic_vector数组。仅使用i,您就会得到一个std_logic。鉴于,i downto i会创建另一个长度为1的std_logic_vector,可以在unsigned中使用。