2013-12-12 1 views
0

인의 Verilog 설계 (I는 회로도를 생성 할), 나는 다음과 같은 경고를 합성하는 시도 할 때 :의 Verilog 설계 - 입력은 "사용하지 않는"경고

Synthesizing Unit <rising>. 
    Related source file is "C:\PPM\PPM_encoder\detectors.v". 
    WARNING:Xst:647 - Input <in> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved. 
    Summary: 
    no macro. 
Unit <rising> synthesized. 

관련 모듈은 단순히 :

module rising (in, out); 
output out; 
input in; 

not #(2,3) (ininv, in); 
and #(2,3) (out, in, ininv); 

endmodule 

와 나는 같은 여러 다른 위치에서 전화 :

rising startdetect(
    .in(start), 
    .out(or01a)); 

나는 SYNTHES를 완료하면 "회로도보기"를 선택하면 실제로 하나의 구성 요소 만 나타납니다. 이 구성 요소를 확장하면 초기 상태 인 출력 만 접지에 연결되는 것을 볼 수 있습니다. 그 밖의 어떤 것도 존재하지 않습니다. 이것은 내 "최상위 모듈"로 테스트 벤치에 있습니다.

WARNING:Xst:1290 - Hierarchical block <startdetect> is unconnected in block <ppmencode>. 
    It will be removed from the design. 

이란 무엇입니까 : 나는 정상 모듈로 (테스트 벤치 아래가 ppmencode라고) 내 실제 주요 프로젝트를 선택하면

, 나는 모든 단일 모듈 인스턴스에 대한 그 같은 경고와 추가 경고를 얻을 이 두 가지 경고의 원인은 무엇이며 어떻게 수정하고 올바른 회로도를 생성 할 수 있습니까?

덧붙여 편집 : 모든 것이 완벽하게 시뮬레이트됩니다. 문제가 생겼을 때 설계도를 만들려고 할 때 (방금 만든 내용을 설명하려고 할 때)입니다. 이 이미지는 제가 얻은 도식을 보여줍니다.

Exmaple schematic

답변

0

그것은 모듈에 입력으로서라는 신호가 충분하지 않아 ... 실제로는 FPGA의 핀에 접속 될 필요가있다. 반면에, 귀하의 rising 모듈은 입력과 그 보완의 AND를 취하고 있습니다 ... 신디사이저는 당신의 희망에 위배되는 논리를 단순화하는 방법을 알아 냈을 것입니다.

+0

상승 모듈은 매우 일반적인 것이고 지연은 입력과 그 보완 요소가 아니기 때문에 지연이 중요합니다. 핀을 어떻게 지정합니까? 제약 파일에 대해 뭔가를 발견하고, 8 개의 I/O 신호에 핀을 할당 할 수있는 플래너 헤드를 실행했지만 경고를 제거하지는 못합니다. 나는 회로도가 어떻게 보이는지 보여주는 원래의 질문에 이미지를 첨부했다. I/O 핀은 있지만 거기에는 * 아무 것도 없다. – Dan

+0

논리가 실제로 AND 게이트와 인버터로 구현 될 것이라고 생각합니까? 이 논리 함수는 LUT (look-up table)로 합성 될 것이고 펄스 생성을위한 당신의 영리한 트릭은 와이어와 접지로 축소 될 것입니다. –

0

합성은 지연을 무시하기 때문에 모든 로직을 최적화하고 있습니다. 기능적으로는 항상 0 일 때 in & ~in이 있습니다. 의도 한 것은 펄스 발생기입니다. 이를 달성하는 한 가지 방법은 dont_touch 속성을 사용하는 것입니다.이 속성은 신디사이저에 디자인에서 특정 모듈 인스턴스화를 유지해야한다고 알려줍니다. 자세한 내용은 Properties Reference Guide을 참조하십시오.

module rising (in, out); 
output out; 
input in; 

(* DONT_TOUCH = "TRUE" *) 
not #(2,3) (ininv, in); 
and #(2,3) (out, in, ininv); 

endmodule 

dont_touch를 사용해도 합성 결과가 시뮬레이션과 일치하지 않을 수도 있음을 유념하십시오. Synthesis는 네 트립리스트의 인위적인 타이밍을 무시합니다. 실제 펄스 폭은 더 길거나, 더 짧거나 작은 것으로 등록 될 수 있습니다. 표준 셀 라이브러리를 확인하고 ininv에 적용 할 지연 셀을 찾으면 펄스 폭이 증가합니다. 라이브러리에는 이미 펄스 제너레이터 셀이 이미 정의되어있을 수 있습니다.