2010-03-10 24 views
5

使用VHDL我希望有一些寄存器可以在每個寄存器中存儲16位數據。 所以我發現VHDL有一個內置的數組,我想用它來存儲每個元素中的16位iy,所以我想知道VHDL是否將這個數組映射到實際的寄存器?VHDL中數組的硬件表示法

回答

3

簡短答案是否定的 - 數組類型不映射到寄存器。

長的回答:

VHDL中的數組類型只是同一類型元素的索引集合。在你的情況下,你可能會使用一個數組作爲註冊庫的輸出。

所以,假設你有一個8個寄存器組,每個寄存器有16位。該庫的輸出將是一個16位向量的數組(8)。該寄存器組組件聲明將是這個樣子:

 
component reg8x16 
    port(
    clock: in std_logic; 
    reset: in std_logic; 
    enable: in std_logic; 
    rout : out r_array(0 to 7) 
    ); 
end component; 

rout是你從寄存器組註冊輸出數組。因此,您可以使用rout(0)取消引用來自銀行的寄存器0的輸出,該類型的類型爲std_logic_vector(15 downto 0)

此外,不要忘記在某處(通常在包文件中)聲明數組類型。它看起來是這樣的:

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

(integer range <>)聲明是一種佔位符數組索引範圍 - 這將被填充,當數組類型被使用(如我們的組件聲明以上)後。

我不確定這是否回答您的問題。我不會詳細討論如何創建reg8x16組件。基本上,您只需創建一個輸出爲std_logic_vector(15 downto 0);的16位寄存器(您可以查看如何在線執行此操作...這是非常基本的VHDL)。然後,您只需實例化這些寄存器中的8個,並將它們放入名爲reg8x16的組件中。

3

數組就像任何其他變量或信號一樣:如果您描述的行爲意味着它必須記住從一個時鐘到另一個時鐘的狀態,那麼將推出觸發器(或內存塊,如果條件正確)由合成器。

1

任何具有有效範圍的數組都將映射到生成的網表中的導線。這是相當明顯的 - 硬件只包含門和電線。像(3 downto 0)(1到0)這樣的東西會導致4x2或8位大小的導線。您現在將單個訪問(如(3)(1))映射到此一維數組中的索引。所以(3)(1)基本上是(7)。

0

檢查this頁,還要檢查register VHDL

基本上它是std_logic_vector的陣列具有所需長度