2014-08-28 77 views
0
cmd_register: process (rst_n, clk) 
begin 
    if (rst_n='0') then 
    cmd_r<= (others=>'0'); 
    elsif (clk'event and clk='1') then 
    cmd_r<=...; 
    end if; 
end process cmd_register; 

我知道「< =」指定了賦值,但是什麼是others=>做什麼?「其他=>'0'」在轉讓聲明中的含義是什麼?

+0

http://www.eda.org/comp.lang.vhdl/FAQ1.html#aggregates – fru1tbat 2014-08-28 13:58:38

+0

(不是一個確切的答案,但由於這是一種常見問題類型的問題,我以爲我會指出你對於初學者來說) – fru1tbat 2014-08-28 14:06:57

回答

2

CMD_R被定義爲std_logic_vector,或無符號簽署信號。讓我們來看看這個信號類型是如何定義的:

type std_logic_vector is array (natural range <>) of std_logic; 
type unsigned   is array (natural range <>) of std_logic; 
type signed   is array (natural range <>) of std_logic; 

注意,這3種具有相同的定義STD_LOGIC項目的數組。

語句「Others =>'0'」是編碼器想要在數組中定義多個具有相同值的項的VHDL的一個特性。

在你的例子中,數組中的所有std_logic項都被設置爲'0'。

這句話的另一個應用是設置在特定值的一些項目和其他所有以默認值:

cmd_r <= (0  => '1', 
      4  => '1', 
      others => '0'); 

在這種情況下,位0和4被設置爲「1」,所有其他位被設置爲'0'。

最後一兩件事,這是不可能寫的是這樣的:

cmd_r <= (0   => '1', 
      4 downto 2 => "111", -- this line is wrong !!! 
      others  => '0'); 
+3

我相信在VHDL-2008中最後一段代碼是可能的。 – fru1tbat 2014-08-28 18:08:21

1

它只是意味着將所有位設置爲零!

3

(others => '0')是一個表達式,要素聚集成一個複合型。

沒有看到cmd_r的聲明,我們可以想象它是一個數組類型,數組類型是一個複合類型(由一個或多個元素組成)。

聚合將一個或多個值作爲元素組合到複合類型中。

aggregate ::= 
    (element_association { , element_association }) 

注意開啓和關閉括號是必需的。

這些元素可以通過名稱爲記錄類型或通過數組類型的索引值位置進行位置關聯。

element_association ::= 
    [ choices => ] expression 

元素關聯是通過選擇管轄。

choices ::= choice { | choice } 

元素關聯可以覆蓋多個選項。

choice ::= 
     simple_expression 
    | discrete_range 
    | element_simple_name 
    | others 

一個選擇可以表示一個或多個元素。

元素簡單名稱用於記錄類型或索引類型爲枚舉類型的數組類型。

others始終是最後的選擇,並代表該類型的所有其餘選擇。該類型可以在來自目標的任務中發現。在某些情況下,類型需要顯式提供,如在限定表達式中。

元素關聯others => '0'代表聚合類型的所有其他元素。在這種情況下,cmd_r的類型和子類型,其中子類型指示指定std_logic_vector的元素的範圍索引。

表達'0'需要是元素類型的,並且所述骨料(others => '0')代表的cmd_r爲每個cmd_r在這種情況下,元件的由'0'的子類型的值。

相關問題