如何在逻辑向量的每2位之间添加'0'

How to add '0' to between every 2 bits of a logic vector

假设我们有一个 32 位 std_logic_vector 的数据。我想在每 2 位之间添加一个逻辑 '0'。 举个例子;所有 11111....1111 都将是 101010101....1010101.

你可以在中间添加 '0' 函数:

function add_zeros(std_logic_vector_in : std_logic_vector) return std_logic_vector is
   variable std_logic_vector_out : std_logic_vector(std_logic_vector_in'length*2 -2 downto 0);
begin 
   for i in std_logic_vector_in'range loop
      std_logic_vector_out(i*2) := std_logic_vector_in(i);
      if (i /= std_logic_vector_in'length-1) then
         std_logic_vector_out(i*2+1) := '0';
      end if;
   end loop;
   return std_logic_vector_out;
end function;

对于最后的 '0',您可以通过简单的连接将它们相加。

如果你有:

signal initial_signal : std_logic_vector(31 downto 0);
signal final_signal   : std_logic_vector(66 downto 0);

那么你可以这样写:

final_signal   <= '0' & '0' & '0' & '0' & add_zeros(initial_signal);