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项目数组的定义相同。

当编码器要在数组中定义具有相同值的多个项目时,语句“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');

关于if-statement - "others=>' 0'"在赋值语句中是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25550244/

10-13 02:03