2014-09-04 72 views
0

如何在賦值中使用無符號文字?VHDL中的無符號文字

看看這個例子:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use ieee.numeric_std.all; 

entity myTest is 
    Port (clk : in STD_LOGIC); 
end myTest; 

architecture Behavioral of myTest is 

    signal testSignal : unsigned (31 downto 0); 

begin 
    process (clk) is 
    begin 
     if (rising_edge (clk)) then 

      -- this compiles fine: 
      testSignal <= testSignal + 1; 

      -- this causes an error. Why? 
      testSignal <= 1; 

     end if; 
    end process; 
end Behavioral; 

行:

  testSignal <= 1; 

導致在賽靈思ISE以下錯誤信息:

Line 22. Type of testSignal is incompatible with type of 1.

誰能解釋爲什麼以及如何解決這個問題?

回答

2

對於unsignedinteger+運營商ieee.numeric_std超載,這就是第一條線路工作的原因;但是,賦值不是(也不是),並且由於1是一個整數字面值,所以不能將其直接賦值給unsigned(它是一個向量)。它必須先轉換。標準方法是:

testSignal <= to_unsigned(1, testSignal'length); 

to_unsigned()需要兩個參數:一個natural來轉換,以及矢量長度轉換到。

+0

謝謝。現在有道理。 – 2014-09-04 19:12:13

+2

除了fru1tbat的回答之外,還可以使用像這樣的二進制或十六進制值的直接向量分配,例如'testSignal <= x「00023AD5」;或者將每個位設置爲零,如'testSignal <= (others =>'0');你應該添加一個初始化值到你的計數器的信號聲明:) – Paebbels 2014-09-05 08:15:14