2017-03-18 61 views
0

VHDL语句中null语句的实际用途是什么?考虑下面的代码VHDL中的NULL语句

1-

CASE s IS 
BEGIN 
    WHEN 0 => y <= 0; 
    WHEN 1 => NULL; 
END CASE; 

2-

CASE s IS 
BEGIN 
    WHEN 0 => y <= 0; 
END CASE; 

在第二代码,因为不存在分配时s=1,然后y保留它以前的值。不是吗?所以,我认为在这两种情况下,合成器都会使用触发器来保持以前的值y

+1

它的主要价值是“我可能得到分心,忘了写这种情况下”和“我的文档事实,那就是没有为这种情况下做”区别开来。如果你发现自己在几个月前编写的代码审查 - 或者更糟糕的是,最后一个人写的东西 - 这很重要。 –

回答

2

我引用IEEE1076-2008:

10.14空语句

一个空语句不执行任何操作。

null_statement :: = [label:] null;

除了传递到下一个语句之外,执行空语句不起作用。

注 - 可以使用null语句明确指定在某些条件为真时不执行任何操作,但对于此(或任何其他)目的而言,这绝不是强制性的。这与案例陈述一起特别有用,案例陈述的所有可能的价值都应该被选择覆盖;对于某些选择,可能不需要采取任何行动。

对于case语句中的每个选项,VHDL语言都要求声明:or synthesis will give an errorExample implementation:

case OPCODE is 
    when "001" => TmpData := RegA and RegB; 
    when "010" => TmpData := RegA or RegB; 
    when "100" => TmpData := not RegA; 
    when others => null; 
end case; 
+1

case语句替代(10.9)包含由sequence_of_statements :: = {sequential_statement}(10.1)组成的语句序列,其中大括号表示重复一次或多次(1.3.2 f))的项目。空语句是一个不做任何事情的顺序语句(10.1)(10.14)。 ***这不是每个选项都需要声明***的综合工具(9.3.3.1),***是VHDL语言定义***。除附录C(1.3.4)外,BNF是规范性的(1.3.1),如果是信息性的。注释也不是语言定义的一部分(1.3.4)。 – user1155120

+0

好的,改变了。我也看了一下这个规范,但是他们没有用通俗的术语来解释我认为适合的stackoverflow。或者你知道一个好的报价? – JHBonarius