2010-07-11 2 views

답변

6

시뮬레이션의 경우 단락 된 표현식이 평가되는지 여부는 정의되지 않습니다. 위의 예제에서는 아무런 차이가 없지만 오른쪽에 함수 호출이 있으면 정의되지 않은 부작용이있는 문제가 발생할 수 있습니다.

Stuart Sutherland 및 Don Mills의 "Verilog and SystemVerilog Gotchas : 101 일반적인 코딩 오류 및 피하는 방법"에서 Gotcha # 52을 참조하십시오.

2

HDL에서 중요한 점은 합성 할 때 중요할지 여부를 묻는 것입니다. 짧은 대답은 그 것이다. Verilog를 (하지 SV)에서

if(risingEdge && cnt++ == 3'b111) 
begin 
    ... 
end 

후 증가는 같은 일을 보여 변수를 모듈에 다른 과제가있는 Verilog에 기능을 대체 할 수있다 : 예를 들어, 다음 코드는 합성의 SystemVerilog입니다. 그래서 그렇습니다. 관련 질문입니다.

Paul R은 일반적으로 정확하며 Sutherland 참조는 훌륭한 것입니다 (Gotchas에서 설명한 것과 같은 좋은 점이 많습니다). 참고로, 적어도 스펙에 관한 한 SystemVerilog로 변경되었습니다. Verilog는 단락 된 연산이 실행될 수도 실행되지 않을 수도 있다고 명시하지만, SV는 구현이 단락 피연산자 (C++, Java 등과 유사)를 평가해서는 안된다는 것을 표시함으로써이를 불분명하게합니다. 관심이 있으시면 IEEE-1800-2009 섹션 11.3.5를 참조하십시오. 이것이 훌륭하지만, SV 스펙을 준수하기위한 트랙 레코드는 모든 툴 제공 업체에서 별다른 것이 아니므로 SV에 의존 할 때는주의해야합니다.