我試圖使用變量作爲索引訪問std_logic_vector
的一部分。使用變量作爲索引訪問std_logic_vector的一部分
以下過程會從一個功能shift_val
結果,然後使用它來計算索引中提取我們需要在shift_data_in_s
6位數據我收到的最後一行的模擬誤差:6上LHS
shift_data_in_s <= data_in_e(to_integer(unsigned(msb_pos)) downto to_integer(unsigned(lsb_pos)))
說「數組大小不匹配的1上數組大小RHS」
我想初始化上lsb_pos
和msb_pos
將解決這個問題,但它沒有...不知道它是如何得到了相同的價值這兩個變量,如果我明確地減去計算它們來自不同常量的相同值。
signal shift_val_s : std_logic_vector(3 downto 0);
signal shift_data_in_s : std_logic_vector(5 downto 0);
shift_in_proc : process(data_in, num_zeros_s)
variable data_in_e : std_logic_vector(15 downto 0);
variable msb_pos : std_logic_vector(4 downto 0) := "01110";
variable lsb_pos : std_logic_vector(4 downto 0) := "01001";
begin
data_in_e := data_in & zeros_f(16 - data_in'length);
shift_val_s <= some_function(data_in_e);
if (to_integer(unsigned(shift_val)) >= 12) then
-- all zeros
shift_data_in_s <= (others => '0');
else
-- we need only 6 significant bits from the data,
-- msb_pos <= 15 - num_zeros -1;
msb_pos := std_logic_vector("01110" - unsigned(('0' & shift_val_s)));
-- lsb_pos <= 15 - num_zeros -6;
lsb_pos := std_logic_vector("01001" - unsigned(('0' & shift_val_s)));
if (lsb_pos(4) = '1') then -- if -ve
shift_data_in_s <= data_in_e(to_integer(unsigned(msb_pos)) downto 0) & zeros_f(to_integer(unsigned(neg_f(lsb_pos))));
else
shift_data_in_s <= data_in_e(to_integer(unsigned(msb_pos)) downto to_integer(unsigned(lsb_pos)));
end if;
end if ; end process shift_in_proc;
這不是[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。沒有這些,你會得到基於經驗的觀點而不是基於事實的答案 - 「最可能的解釋」,「這裏的任何人都不可能直接診斷」。您還可以在該過程中分配信號shift_val_s,稍後將其用於右手錶達式中,而不需要插入等待語句。看來你想在這裏有一個變量?或者常量,'data_in'length'來自聲明的索引範圍,擺脫'some_function'以及'data_in_e'亞穩態值問題。 – user1155120