RTL 자체에 정수를 사용하는 데 아무런 문제가 없습니다. 없지만 일부는 그것을 피할 이유가 있습니다. 이것은 실제로 주관적인 "모범 사례"에 대한 질문이며 결국 자신이 원하는 것을 스스로 찾아야합니다. 그것에 대한 도움으로, 나는 이것에 대한 나의 경험과 생각을 나눌 것입니다.
원칙적으로 , 나는 또한 합성을 위해 쓸 때 (제한된) 정수를 사용하는 것을 선호합니다. 나는 때때로 그것을한다. 그러나 실제로 , 나는 보통 signed
and에 고착한다 unsigned
. 왜 그런지 자세히 설명하겠습니다.
어쨌든 디자인의 일부로 벡터화 된 데이터 유형을 사용해야합니다.
벤더 IP 또는 타사 IP는 거의 integer
포트 유형을 사용하지 않습니다.
예를 들어 BlockRam을 통해 데이터를 전송할 때 유추하여 IP / 매크로 / 프리미티브에 연결할 필요가 없더라도 어쨌든 벡터화 된 유형으로 변환해야 할 가능성이 높습니다
위의 어느 것도 적용되지 않더라도 어느 시점 에서 다른 인터페이스 (대부분의 경우 최상위 포트)와 인터페이스해야합니다.
integer
전체 디자인에 사용할 수 없으므로 다음과 같은 이유로 모두 함께 건너 뛸 수 있습니다.
어떤 시점에서, 당신은 어쨌든 변환을 수행해야하며, 이것은 integer
처음 에 사용 지점의 일부를 제거합니다
또한 시뮬레이션의 경우 이러한 변환은 일반적으로 재설정 전에 또는 다른 시간 에 'U'
또는의 벡터로 'X'
호출되며 이러한 모든 함수 호출은 패키지 함수에서 경고 메시지를 생성하여 시뮬레이션 경고 / 프롬 트를 어지럽게합니다.
사용의 단점integer
:
벡터화 된 유형과 달리 정수에는 'U'
및 'X'
; 나는 그것들이 시뮬레이션에 매우 도움이된다는 것을 알았습니다. 초기화되지 않은 신호가 설계를 통해 어떻게 전파되는지 알 수 있으며, 재설정 후 초기화되지 않은 신호가 많으면 반응 할 것입니다. 정수를 사용하는 경우에는 그렇지 않습니다.
정수를 사용하면 덧셈 / 뺄셈을 수행 할 때 언더 플로 / 오버플로가 발생할 때 시뮬레이션 / 합성 불일치가 발생할 위험이 더 큽니다. (다른 사람이 이미 지적했듯이)
내가 integer
정말로 좋은 옵션이라고 생각 되는 전형적인 경우 :
chipScope / signalTap 등을 통해 모니터링하는 디버그 신호 / 카운터
자신의 코드로 들어가거나 나가지 않는 카운터의 내부 표현. 네, 당신은 FIFO를 작성하는 경우 예를 들어, 이러한 경우이고, 당신은 추측 항법 (dead-reckoning) 쓰기입니다 / 신호를 형성하기 위해 읽고 full
, empty
, almostFull
등 (포인터에 그러나를 arithmetics이 경우의 추측 항법 (dead-reckoning)보다 더 좋은 방법입니다. ..)
내 자신의 결론 : 나는 때때로 정수를 사용하지만, 드물게, 그리고 대부분 위에서 설명한 경우에 사용합니다. 내가 사용에 많은 오버 헤드 표시되지 않습니다 unsigned
및 signed
정수 대신, 따라서, 일반적으로 그들에 충실.