2016-10-07 8 views
1

내 VHDL 디자인에는 일반적으로 적절한 수준의 계층 적 "블록"(엔티티)이 포함되어 있습니다. 하위 블록은 여러 하위 블록으로 구성되는 여러 하위 블록으로 구성됩니다.엔티티에서 가져온 VHDL 추출 상수

주어진 블록의 출력을 구동하기 전에 내부 블록의 출력과 대기 시간을 일치시켜야하는 것이 일반적입니다. 내부 블록을 변경하고 다른 대기 시간으로 끝내면 주변 블록의 대기 시간을 보완하는 방법을 수동으로 다시 계산해야합니다. 업데이트가 주어진 블록의 전체 대기 시간에 영향을 주면 주어진 블록을 포함하는 상위 블록에서 프로세스를 반복해야합니다.

블록이 호출하는 엔티티에게 대기 시간을 "알릴"수 있고 이러한 보상이 자동으로 계산되도록하는 것이 훨씬 간단합니다.

멋진 방법이 있습니까? 일반 출력과 같은 것?

답변

2

적절하고 일반적인 해결책은 서브 모듈에 대기 시간이 일정한 mdl_sub_pkg과 같은 각 서브 모듈에 대한 패키지를 만드는 것입니다. 그런 다음 mdl_pkg과 같이 포함 모듈의 패키지를 만들고 mdl_sub_pkg 패키지의 상수를 사용하여 포함 모듈이 생성해야하는 대기 시간을 계산합니다. 마지막으로 동봉 모듈에서 mdl_pkg을 사용하고 mdl_pkg에 계산 된 상수를 기반으로 대기 시간을 생성하십시오. 검증에 대기 시간 테스트를 포함시키는 것을 잊지 마십시오.

대안이되고 모호한 해결책은 하위 모듈에서 출력 포트 (존재하지 않는 출력 제네릭 대신)를 만들고이를 하위 모듈의 대기 시간과 일치하는 상수로 할당하는 것입니다. 그런 다음 엔 클로징 모듈은 하위 모듈의 출력 포트를 사용하여 해당 모듈의 지연 시간을 계산할 수 있습니다. 그러나이 솔루션이 작동하고 최소 크기의 합성 디자인을 생성하는지 여부는 대기 시간 보정이 구현되는 방식과 상수가 포함 된 디자인 파트의 정교화 및 축소를 처리하는 방법에 크게 의존합니다. 특정 상황에서는 실행 가능한 솔루션 일 수 있고 좋은 트릭 일 수도 있지만 일반적인 적용 가능한 솔루션은 아닙니다.

1

또 다른 대안은 예상되는 (또는 원하는) 대기 시간을 제네릭으로 전달하는 것입니다.

내부적으로 실제 대기 시간 = 일반적인 대기 시간을 지정하고 잘못하면 실패합니다.

또는 실제 대기 시간이 일치 할 때까지 실제 대기 시간이 < 일 경우 일반 대기 시간을 삽입하고 실제 대기 시간> 일반 대기 시간이면 어설 션/실패하고 동등한 경우 아무 작업도 수행하지 않습니다. 이를 통해 최상위 레벨의 파이프 라인을 쉽게 동기화 할 수 있습니다.