2012-04-02 2 views
1

12 페이지의 Verilog Golden Reference Guide은 합성 할 수없는 always 블록에 대해 경고하고, 우연히 합성 불가능한 always 블록을 만들 가능성을 줄이기 위해 템플릿을 제공합니다. 그러나이 안내서에는 블록이 왜 합성 될 수 없는지와 어떤 상황에서 설명되지 않습니다.`always` 블록의 합성

always 블록을 합성 할 수없는 가장 일반적인 이유는 무엇입니까?

+0

정상적인 절차 코드 성능에 대해 많이 묻는 질문과 마찬가지로, 시도 할 때 가장 좋은 방법 중 하나는 시도하는 것입니다. 예제를 작성하고, Synopsys의 Design Compiler를 통해 펀치 한 다음 회로도 뷰어를 사용하여 생성 된 [netlist] (http://en.wikipedia.org/wiki/Netlist)를 살펴보십시오. [SpringSoft 's] (http://www.springsoft.com/) Debussy/Verdi는 당신이 그것에 접근 할 수 있다면 가장 좋습니다. –

답변

2

기본적으로 모든 항상 블록은 플립 플롭 그룹, 래치 그룹 또는 조합 회로 블록을 설명합니다.

이 세 가지 코드 형식이 서로 다르기 때문에 혼합해서는 안됩니다. 그렇지 않으면 합성 할 수 없습니다. (때로는 래치 및 조합 회로가 혼합되어 사용하지 마십시오.)

이 세 가지 유형의 회로에 매핑 할 수없는 항상 블록은 합성 할 수 없습니다.

예를 들어 플립 플롭을 에지 트리거링 및 레벨 트리거링 할 수 없기 때문에 신호와 에지가 혼합 된 민감한 목록은 합성 할 수 없습니다.

세 개 이상의 클럭은 합성 할 수 없습니다.

Embedded always 블록은 합성 할 수 없습니다.

1

타이밍 지연을 추가하는 것은 합성 가능하지 않지만 종종 검증에 사용됩니다. 또한 디스플레이 문을 합성하려고 시도하면 불평하는 도구도 있습니다.

always @* begin 
$display("%t", $realtime); 
#1 x = y;     //Delayed by 1 time unit 
$display("%t", $realtime); 
end