2011-11-04 4 views
5

필자는 Verilog 전문가가 아니며, 누군가가 이러한 방법으로 가치를 높이는 것이 더 낫다는 것을 알고 있는지 궁금해하고있었습니다. 미안하지만 이것은 너무 간단한 질문입니다.Verilog 모범 사례 - 변수 증가시키기

방법 답변 : 조합 논리 블록에서

, 아마 상태 머신에서 : 순차 블록 어딘가에 다음

//some condition 
count_next = count + 1; 

그리고 :

count <= count_next; 

또는 방법 B :
조합 블록 :

//some condition 
count_en = 1; 

순차 블록 :

if (count_en == 1) 
    count <= count + 1; 

나는 더 자주 쪽이든을 보았다. 웨이 B의 한 가지 잠재적 인 이점은 상태 머신의 여러 위치에서 동일한 변수를 증가 시키면 많은 변수 대신에 하나의 가산기 만 사용한다는 것입니다. 아니면 거짓인가?

선호되는 방법과 그 이유는 무엇입니까? 중대한 단점이 있습니까?

감사합니다.

답변

1

방법 B의 하나의 잠재적 인 이점은 당신이 당신의 상태 머신에 많은 장소에서 같은 변수를 증가하는 경우, 아마도 그것은 많은 대신 하나의 가산기를 사용하는 것입니다; 아니면 거짓인가?

모든 합성 도구는 자동 리소스 공유를 시도합니다. 그들이 얼마나 잘 작동하는지는 작성된 도구와 코드에 따라 다릅니다. 다음은 Design Compiler의 일부 기능을 설명하는 문서입니다.경우에 따라 영역이 적 으면 타이밍이 나빠질 수 있습니다.

어떤 방법이 바람직하며 그 이유는 무엇입니까? 중대한 단점이 있습니까?

에 달려 있습니다. Verilog (합성 용)는 일부 논리 회로를 구현하는 수단이지만 사양에서 정확히 어떻게 수행되는지는 지정하지 않습니다. 웨이 A는 FPGA에서 웨이 B와 같을 수 있지만 웨이 A는 무조건 순차 할당으로 인해 ASIC에서 저전력 설계와 일치하지 않습니다. 리셋 네트를 사용하는 것은 ASIC에서 거의 요구 사항이지만 많은 FPGA가 알려진 상태에서 시작하기 때문에 필요없는 리소스를 절약 할 수 있습니다.

+0

어떤 방법을 사용합니까? –

+0

합성 도구 문서에서 권장하는 것을 사용해야합니다. –

1

Verilog 코드에서 Way A를 사용합니다. 내 순차적 블록에는 논리가 거의 없습니다. 그들은 단지 조합형 상수 블록에서 계산 된 "전선 규정 (wire regs)"값을 기반으로 레지스터를 할당합니다. 이런 식으로 잘못 될 가능성은 적습니다. 그리고 Verilog로 우리가 얻을 수있는 모든 도움이 필요합니다.

1

당신의 "더 나은"정의는 무엇입니까? 더 나은 성능 (합성 회로의 최대 주파수가 더 빠름), 더 작은 영역 (논리 게이트가 적음) 또는 더 빠른 시뮬레이션 실행이 가능합니다.

자일링스 및 알테라 FPGA의 경우보다 작은 케이스를 고려해 보겠습니다. 해당 FPGA 계열의 레지스터는 이고 입력이 가능합니다. 귀하의 "Way B"에서 * count_en *은 이레지스터 입력을 활성화하도록 직접 매핑되므로 논리 게이트가 적습니다. 본질적으로, "Way B"는 합성 도구에 그 회로를 더 잘 합성하는 방법에 대한 "힌트"를 제공합니다. 또한 대부분의 FPGA 합성 도구 (Xilinx XST, Altera MAP, Mentor Precision, Synplicity Synplify)가 레지스터를 정확하게 추론 할 가능성이 있습니다. 0120-입력을 "Way A"에서 사용할 수 있습니다.

* count_en *이 으로 활성화되어 레지스터 입력을 활성화하면 카운터 증가 논리의 논리 레벨이 적기 때문에 회로의 성능이 향상됩니다.

감사

+0

나는 당신이 의미하는 바를 잘 모르겠다. 그것은 count_en 신호가 레지스터 자체가 아닌 Adder를 활성화하는 것으로 보입니다. 더 설명해 주시겠습니까? 고맙습니다. –