我在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;
答案 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
中使用。