2014-03-01 38 views
3

部分分配彙總結果我想實現這樣的VHDL:(VHDL)如何在一個時鐘

a<=(b+c)/16; 

我已經試過這一點,但合成沒有接受。

signal b,c : std_logic_vector(7 downto 0); 
signal a  : std_logic_vector(8 downto 0); 
signal dummy : std_logic_vector(3 downto 0); 

(a & dummy) <= ("00000" & b) + ("00000" & 'c'); 

然後我是用一個但它失敗了。 (操作&不能與正式的OUT相關聯。)

有什麼建議嗎? 謝謝, 傑姆

+1

繼Martin和Brian的回答之後,強打字的目的 - 區分std_logic_vector,unsigned和signed是爲了防止在計算小於零時數學符號和無符號數的意外混合。當處理無符號數(前導零)時,您可以輸入轉換爲有罪不罰 - '(a&dummy)<= std_logic_vector(無符號(「00000」&b)+無符號(「00000」& c));'。您的代碼與某些修訂不兼容符合IEEE標準1076(<-2008),其中元素必須在合計目標中具有相同的大小(使用'sum'作爲目標,添加'a <= sum(12 downto 4);')。 – user1155120

回答

2

使用ieee.numeric_std,並聲明,B,C,虛擬爲unsigned,而不是std_logic_vector。或者如果這就是你的應用程序所要求的那麼signed

0

只需使用您的第一次嘗試,並使a,bc是數字類型。 std_logic_vector沒有數字意義,所以你不能對它們進行算術運算。

要麼全部integer s,要麼按照Brian的建議做,並且使用ieee.numeric_stdsignedunsigned矢量類型。