2015-10-25 38 views
1

在一個過程中,我在UNSIGNED向量上做了一些工作,我需要在該過程結束時切片並將其重新轉換爲SLV。有沒有比這更好的/更清潔的方式?轉換爲std_logic_vector並更有效地切片

out_O : out STD_LOGIC_VECTOR(15 downto 0) 
    variable o : UNSIGNED(17 downto 0) := (others => '0'); 
    variable outcast_t : STD_LOGIC_VECTOR(17 downto 0) := (others => '0'); 

    ... 

    o := mod_t - div_t + const; 

    outcast_t := STD_LOGIC_VECTOR(o); 
    out_O <= outcast_t(15 downto 0); 
+1

你不應該需要中間信號:'out_O <= STD_LOGIC_VECTOR(o(15 downto 0));'應該工作 –

+0

哦,我在演員後切片。這是個好消息和更好的解決方案 – chris

回答

1

隨着

use ieee.numeric_std_unsigned.all; 

SLV將作爲無符號來處理,你可以在該類型直接,這樣你可以避免鑄造做你的作業。

你也可以做這樣的事情

out_O <= o(out_O'range); 

如果out_O大小已修改這可以節省你一些變化。假設你重新定義了o爲slv。

+0

不推薦使用IEEE.numeric_std_unsigned。 – Paebbels

+1

@Paebbels我個人並不介意轉換。有時候,我的位數組是一個數字,我可能使用無符號類型,有時它會在通用數據總線上傳輸併成爲slv。根據具體情況,一種數據類型更加「原生」,我不介意來回表達設計意圖。有些人不介意,而只是slv。有些人會在測試平臺中使用numeric_std_unsigned,但在RTL中不使用,以避免綜合支持問題。該建議可能取決於情況和你問的對象 – lasplund