If statement 什么是;其他=>';0'&引用;在任务陈述中是什么意思? cmd_寄存器:进程(rst_n,clk) 开始 如果(rst_n='0'),则 cmd_r'0'); elsif(clk'事件和clk='1'),然后 cmd_rdo?

If statement 什么是;其他=>';0'&引用;在任务陈述中是什么意思? cmd_寄存器:进程(rst_n,clk) 开始 如果(rst_n='0'),则 cmd_r'0'); elsif(clk'事件和clk='1'),然后 cmd_rdo?,if-statement,process,vhdl,fpga,If Statement,Process,Vhdl,Fpga,它只是意味着将所有位设置为零 cmd\u r被定义为标准逻辑向量,或无符号或有符号信号。让我们看看如何定义此信号类型: 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;

它只是意味着将所有位设置为零

cmd\u r被定义为标准逻辑向量,或无符号有符号信号。让我们看看如何定义此信号类型:

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;
type std_逻辑向量是std_逻辑的数组(自然范围);
类型unsigned是std_逻辑的数组(自然范围);
带符号的类型是std_逻辑的数组(自然范围);
请注意,这3种类型与std_逻辑项数组具有相同的定义

当编码器希望在一个数组中定义具有相同值的多个项时,语句“Others=>'0'”是VHDL的一个功能

在您的示例中,数组中的所有项std_逻辑都设置为“0”

此语句的另一个应用是将某些项设置为特定值,将所有其他项设置为默认值:

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;
cmd_r'1',
4      => '1',
其他=>“0”);
在这种情况下,位0和4设置为“1”,所有其他位设置为“0”

最后一件事,不可能写这样的东西:

cmd_r <= (0      => '1',
          4      => '1',
          others => '0');
cmd_r'1',
4到2=>“111”,--这行是错误的!!!
其他=>“0”);
(其他=>'0')
是一个表达式,将元素聚合到复合类型中

  cmd_r <= (0          => '1',
            4 downto 2 => "111", -- this line is wrong !!!
            others     => '0');
如果没有看到
cmd\u r
的声明,我们可以想象它是一种数组类型,数组类型是一种复合类型(由一个或多个元素组成)

聚合将一个或多个值作为元素组合到复合类型中

  cmd_r <= (0          => '1',
            4 downto 2 => "111", -- this line is wrong !!!
            others     => '0');
请注意,开始括号和结束括号是必需的

这些元素可以按记录类型的名称或数组类型的索引值位置进行位置关联

 aggregate ::=
     ( element_association { , element_association } )
元素关联由选项控制

 element_association ::=
     [ choices => ] expression
元素关联可以覆盖多个选项

 choices ::=  choice { | choice }
选项可以表示一个或多个元素

元素简单名称用于索引类型为枚举类型的记录类型或数组类型

others
始终是最后一个选项,代表该类型的所有剩余选项。可以在来自目标的分配中发现该类型。在某些情况下,需要显式提供类型,如在限定表达式中

元素关联
others=>“0”
表示聚合类型的所有其他元素。在这种情况下,
cmd\u r
的类型和子类型,其中子类型指示指定标准逻辑向量元素的范围索引

表达式
'0'
必须是元素类型,聚合
(其他=>'0')
表示
cmd\u r
的子类型的值,该子类型由
'0'
组成,在这种情况下
cmd\u r
的每个元素都包含
'0'

表达式(
其他=>'O'
)表示所有元素都分配给“
0
”。

如果
cmd\u r
为8位,则它将
00000000
分配给
cmd\u r
。如果cmd_r是二维的,那么同样的事情将是(其他=>(其他=>'0'))。

(不是一个确切的答案,但由于这是一个常见问题类型的问题,我想我会向您指出这是一个初学者)我相信VHDL-2008可以实现最后一点代码。似乎是额外的语法噪音。为什么不只允许
cmd\r这会产生歧义。有时,这将仅将LSB分配为零。我有一个发生这种事的密码。所以我总是确保当向量出现时,如果它应该是零,那么就不会丢失语法。只是为了避免额外的调试工作。@S.N.不确定它是否会编译。您必须显式地分配所有导线。如果cmd_r声明为:signal cmd_r:unsigned(7到0),我仍然可以使用:cmd_r'0')将cmd_r中的所有位设置为零吗?