1. ホーム
  2. if-statement

[解決済み] 代入文の「others=>'0'」はどういう意味ですか?

2022-02-18 15:41:55

質問

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 ? また => はどうするのですか?

どのように解決するのですか?

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の項目の配列と同じ定義であることに注意してください。

その他 => '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');