2012-08-24 66 views
1
相乘

我們有一個類型,其是尺寸3的32位的「std_logic_vector」,這是按以下方式定義的數組:如何通過2 32位帶符號std_logic_vector在VHDL

subtype scalar is std_logic_vector(31 downto 0); 
type vector_nd is array (natural range <>) of scalar; 
subtype vector_3d is vector_nd(2 downto 0); 

我們有類型「vector_3d」我們要乘以2,並把結果型「標」的信號的信號:

signal v_normal_out_sig := vector_3d; 
signal mult1_in1_sig := scalar; 
--... 
mult1_in1_sig <= 2*signed(v_normal_out_sig(0)) when cau_state = st_cycle18; 

當我們編譯它,我們得到如下錯誤:

No feasible entries for infix operator "*". 

什麼是正確的方式來實現我們想要的?我們使用以下庫:

  • ieee.std_logic_1164.all
  • ieee.std_logic_arith.all
  • ieee.std_logic_unsigned.all
+1

您可以簡單地將您的'v_normal_out_sig(0)'信號左移1位,以實現乘法運算2.考慮使用'numeric_std'庫提供的函數(即'SHIFT_LEFT')。 – simon

+1

@simon,那些是有符號的數字,我不能只是左移,因爲我會失去符號位。我們實現了自己的「左移」,如答案所示。 – SIMEL

+0

伊利亞,大多數語言都有位移操作來保存符號(不確定VHDL)。 – NominSim

回答

0

我們所做的最終是休耕:

mult1_in1_sig <= v_normal_out_sig(0)(31) & v_normal_out_sig(0)(29 downto 0) & '0' when cau_state = st_cycle18; 

並且測試給出了正數和負數的正確結果。