2017-03-18 1 views
0

null VHDL의 진술은 실제로 무엇입니까? s=1, 그때 y는 이전 값을 유지하는 경우에는 과제가 없기 때문에, 다음과 같은 코드 번째 코드에 VHDL의 NULL 문

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

2-

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

1-

을 고려한다. 그렇지 않니? 그래서, 두 경우 모두, 신디사이저는 이전 값 y을 유지하기 위해 플립 플롭을 넣을 것이라고 생각합니다.

+1

주요 값은 "나는 아마 정신이 경우 쓰기 잊었다"와 "나는이 사건에 대한 아무 상관이 없다는 사실을 문서화하고"를 구별하는 것입니다. 몇 달 전에 쓴 글에 대한 코드 리뷰에서 - 혹시 최후의 사람이 쓴 것 -이 것이 중요합니다. –

답변

2

나는 IEEE1076-2008을 인용합니다 :

10.14 널 문

널 문은 아무 작업도 수행하지 않습니다.

null_statement :: = [label :] null;

null 문을 실행해도 다음 문으로 전달하는 것 외에는 아무 효과가 없습니다.

주 - null 문은 특정 조건이 참일 때 수행 할 작업이 없음을 명시 적으로 지정하는 데 사용할 수 있지만이 목적 (또는 다른 목적)에서는 필수 사항이 아닙니다. 이것은 case 문과 관련하여 특히 유용합니다. case 문은 가능한 모든 값을 선택 항목으로 다룹니다. 특정 선택 사항에 대해서는 조치가 필요하지 않을 수도 있습니다.

VHDL 언어는 case 문에있는 모든 선택 항목에 대해 문이 필요합니다 (or synthesis will give an error). Example 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.2f) 반복되는 항목을 나타냅니다. null 문은 아무 작업도 수행하지 않는 순차적 문 (10.1)입니다 (10.14). *** 모든 선택 (9.3.3.1)에 대해 ***을 요구하는 합성 도구가 아닙니다. *** VHDL 언어 정의입니다. ***. BNF는 정보 성이있는 부록 C (1.3.4) 이외의 규범 적 (1.3.1)이다. 또한 노트는 언어 정의 (1.3.4)의 일부가 아닙니다. – user1155120

+0

좋습니다. 변경했습니다. 나도 물마루를 보았다. 그러나 그들은 stackoverflow에 적합하다고 생각하는 평신도의 용어로 설명하지 않는다. 아니면 좋은 견적을 알고 있습니까? – JHBonarius