문 원한다면 내가있는 경우 : risingEdge 사실이 아닌 경우Verilog는 단락 회로 평가를 지원합니까?
if(risingEdge && cnt == 3'b111)
begin
...
end
그것이 CNT 확인 것인가?
HDL 내부에서도 문제가되지 않습니까?
문 원한다면 내가있는 경우 : risingEdge 사실이 아닌 경우Verilog는 단락 회로 평가를 지원합니까?
if(risingEdge && cnt == 3'b111)
begin
...
end
그것이 CNT 확인 것인가?
HDL 내부에서도 문제가되지 않습니까?
시뮬레이션의 경우 단락 된 표현식이 평가되는지 여부는 정의되지 않습니다. 위의 예제에서는 아무런 차이가 없지만 오른쪽에 함수 호출이 있으면 정의되지 않은 부작용이있는 문제가 발생할 수 있습니다.
Stuart Sutherland 및 Don Mills의 "Verilog and SystemVerilog Gotchas : 101 일반적인 코딩 오류 및 피하는 방법"에서 Gotcha # 52을 참조하십시오.
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에 의존 할 때는주의해야합니다.