2017-02-01 5 views
3

관련 질문이 없지만 무엇을 검색해야할지 모르겠습니다. 합성 도구를 사용할 때 (특정 도구가 필요하면 Synplify라고 말하지만, 여러 도구에서 작동하는 표준 호환 버전이있는 것이 가장 좋습니다) 모듈의 인스턴스 수를 추적하고이를 지원하는 것이 가능합니까? 합성 가이드? 나는 의심 스럽지만, 이와 같은 것에 대해 많은 유스 케이스를 볼 수있다. 제가 의미하는 바를 몇 가지 예를 들어 설명하겠습니다.종합 글로벌 인스턴스 수

일부 컨텍스트는 FPGA 개발을 염두에두고 작성한 것이지만 ASIC 디자인에도 사용하겠다고 생각합니다.

장치에 10 개의 곱셈기가 있고 복잡한 곱셈기와 같은 몇 가지 연산을 가지고 있다고 가정 해 봅시다. 생성 루프 만 아니라 디자인 전체에서 여러 위치에서 인스턴스화하려고합니다. 이 함수를위한 전용 승수를 사용하여 하나의 구현이 있다고 가정 해 봅시다. 그러나이 패브릭을 사용하는 복소 승수도 있습니다. 필자의 복합 승수가 패브릭 구현으로 넘어 가기 전에 전용 승수를 소모하고 싶습니다.

복잡한 승수를 래퍼를 통해 인스턴스화 할 수 있습니까?이 래퍼가 정교화되는 동안 인스턴스화 될 때마다 글로벌 인스턴스 카운트가 증가하므로 사용 된 곱셈기의 수를 추적 할 수 있습니까? 또한이 전역 변수를 generate-if 문이나 다른 구문으로 사용하여 사용 된 배율기 모듈의 인스턴스 수를 기반으로 두 구현 간의 결정을 내릴 수 있습니까?

예를 들어 승수를 사용하고 있습니다. 이 동작을 얻기 위해 배율을 추론 할 수 있다는 것을 알았습니다. 나는이 전역 변수의 현재 값을 기반으로 다른 필터 구조 (예 : 탭 지연 선 FIR 필터 대 분산 산술 FIR 필터)를 추론 할 수있는 디자인을 상상해 봅니다. 이것은 새로운 FPGA로 코드를 포팅 할 때 확실히 도움이 될 것입니다.

나는 잠시 동안 이와 같은 것을 찾고 있었지만 그것이 존재하지 않는다고 생각합니다. 나는 내 시스템의 아키텍처를 옳은 방식으로 설계함으로써 내가 원한 것에 가깝게 할 수 있다는 것을 깨닫는다. 여기서 의도하는 것은 설계에서 프로세스를 자동화하는 것입니다. 따라서 디자인에 대한 이후 변경으로 인해 (타이밍 또는 리소스 제한이 작용하지 않는 한) 전체 시스템 레이아웃을 리팩터링 할 필요가 없습니다. 또한 이것은 동일한 패밀리의 매우 다른 리소스 할당 (더 많은 DSP 조각이 있고 더 많은 LUT가있는 등)을 사용하는 장치간에 코드를 이식 할 수있게하는 수단으로 생각합니다.

이것은 하나의 도구 또는 하나의 언어로만 존재하는 경우에도 여전히 만족스러운 해결책입니다. 확실한 증거 또는 왜 작동하지 않는 논리적 인 이유를 제공 할 수 있다면 그것은 나에게 수용 가능한 해결책이 될 것입니다.

+0

관련 질문 [VHDL 리소스 사용 프로파일 링 도구가 있습니까?] (https://stackoverflow.com/questions/41907940/are-there-any-vhdl-resource-usage-profiling-tools). – user1155120

답변

2

실제로 기기에있는 것보다 더 많은 곱셈을 추론하는 디자인을 구현해 보았습니까? DSP 블록이 없어지면 툴은 자동으로 LUT 리소스를 사용하기 시작할 것입니다. 그러나 이것이 발생하지 않는다고 가정하면 다음과 같이 가정합니다.

자일링스 Vivado와 사용자 정의 TCL 스크립트를 사용하여 어느 정도까지이를 달성 할 수 있습니다. 나는이 시간을 제대로하기 위해 소비하는 것 같이하지 상세 정확한 명령과 스크립트를하지만, 기본적인 흐름은 다음과 같을 것이다 :

  1. 는 곱셈기를 구현하는 개체에 generic 매개 변수를 추가합니다. 디자인의 최상위 레벨에있는 generic 매개 변수를 통해 연결하십시오.
  2. 스크립트는 모든 엔티티가 전용 DSP 블록을 사용하게하는 초기 매개 변수 세트를 설정합니다.
  3. 스크립트는 synth_design이고 -generic 스위치는 DSP 블록 사용을 제어합니다.
  4. 합성이 완료된 후 스크립트는 report_utilization의 출력을 구문 분석하여 DSP 블록 수가 초과되었는지 확인합니다. 그렇지 않은 경우 5 단계로 이동합니다. 더 많은 엔티티에서 대체 배율 구현을 사용하도록 일반 매개 변수 집합을 수정하고 3 단계로 돌아갑니다.
  5. 합성 된 디자인이 장치에 맞고 스크립트가 구현 단계를 진행합니다.

같은 기본 단계를 유지하는 것입니다 제네릭을 사용하지 않고 위의 과정에 대한 대안하지만, 대신 제네릭을 설정하는 자신의 구현을 제어하기 위해 특정 승수 인스턴스에 set_property 명령을 사용합니다.

+0

승수 예제를 사용해서는 안됩니다. 승수 추론을 통해이 기능을 기본적으로 제공한다는 것을 알고 있습니다. 필자는 디자인에서 훨씬 더 큰 구성 요소를 자동으로 설계하는 방법으로이 기능을 구상합니다. 내 기본 사용 사례는 하드웨어 가속입니다. 나는 다른 가족들로부터 많은 dev 보드를 쌓아 왔고, 나는 그들 모두에 동일한 계산 코드를 실행하고 싶다. (다른 이슈들을 제외하고). 다른 예가 더 나은 사용 사례입니다.도구는 다중 곱셈 체인을 분산 산술 필터로 전환하는 것을 알 수 없습니다. 나는 시간이있을 때 질문을 개정 할 것이다. – hops

+0

@hops 나는 내 대답이 그 사건에도 적용될 것이라고 생각한다. 실행중인 리소스가 무엇이든 관계없이 스크립트가이를 확인하고 제네릭 또는 다른 방법을 사용하여 스크립트의 일부인 규칙 집합을 기반으로 적절한 디자인을 수정합니다. 당신이 물어 본 것은 * 정확하게 * 아닙니다. 그러나 당신이 얻는 가장 가까운 것이라고 생각합니다. –

+0

그것은 당신이 옳은 것을 찾고있는 것과 매우 가깝습니다. 사실, 전에 스크립팅으로 이미이 작업을 수행했습니다. 그것이 내가 생각을 가지고있는 곳입니다. 나는 이것을 대답으로 받아 들일 수있다. 순수한 HDL로는 불가능한 것으로 입증 된 표준 문서 나 도구 문헌에서 일종의 논리적 인 이유나 라인을 찾을 수 있었으면 좋겠습니다. – hops

0

뒤에 오는 것이 존재하지 않습니다. 그러나 몇 가지 의견을 제시 할 수 있습니다.

첫째, 설계를 구현하는 데 필요한 리소스의 양을 추측 할 수 있어야합니다 (이유가 있음). 칩의 용량을 초과하는 경우 설계 또는 업그레이드에 대한 재고가 필요할 수 있습니다. 두 번째로, 디자인을 구현하려고 시도하고 모든 DSP 리소스 (예 : 승수를 추정)를 사용하는 경우 Synthesis 도구는 나머지 논리 구성 요소에 "적합"하려고 시도 할만큼 충분히 똑똑합니다. 이것은 많은 원하지 않는 결과를 가져올 수 있습니다. 결합 논리는 (구현중인 기술에 따라) 빠르게 파열 될 수 있으며, 최대 클록 주파수에 상당한 영향이있을 것이라는 점은 거의 보장됩니다. 마지막으로, 사물의 구현 방식을 명시 적으로 제어하려는 경우이 점이 더 적절합니다. 합성 지시문 (공급 업체/언어에 따라 다름)을 사용할 수 있습니다.

(VHDL에서 알테라 디바이스에 대한) DSP 리소스를 사용하는 지침의 예 (taken from here) 다음과 같습니다

signal a, b : unsigned(8 downto 0); 
signal res : unsigned(17 downto 0); 
attribute multstyle : string; 
attribute multstyle of res : signal is "dsp"; -- Alternatively, use "logic" 
res <= a * b; 

예를 들어, 당신은 당신이 제어 할 싶었다 "복소 곱셈기"모듈을했다 경우 구현 방법, 제네릭을 사용하여 인스턴스를 제어 할 수 있습니다.

entity complex_mult is 
    generic(
     MULT_TYPE : string := "dsp" 
    ); 
    port(
     ... 
    ); 
end entity; 

architecture rtl of complex_mult is 

begin 

    signal my_res : unsigned(15 downto 0); -- Obviously define res width depending on what you are doing 
    attribute multstyle : string; 
    attribute multstyle of my_res : signal is MULT_TYPE; 
    -- Do stuff 
end rtl; 
+0

당신의 추가 코멘트는 기본적으로 "나는 내 시스템의 아키텍처를 옳은 방식으로 설계함으로써 원하는 것을 아주 가까이서 할 수 있다는 것을 깨닫는다. 하지만이 기능이 필요한 이유는 다른 칩을 목표로하기 위해 동일한 HDL 코드베이스 (최상위 레벨 및 모듈 등)를 사용하는 것입니다. 나는 그것이 오랫동안 그것을 찾고 있었기 때문에 그것이 가능하지 않다는 것을 당신이 옳다고 생각합니다. 이것이 가능하지 않다는 단순한 증거 라기보다는 이것이 가능하지 않다는 증거를 제시한다면 당신의 대답을 받아 들일 수 있습니다. – hops

+0

합성 지시문 (Altera의 AKA 합성 속성)은 합성 도구에 힌트를 제공하는 (또는 합성 도구를 안내하는) 공급 업체 방식입니다. 원하는대로 ([Xilinx] (https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/ug901-vivado-synthesis.pdf), [Altera] (http : // quartushelp .altera.com/14.1/mergedProjects/hdl/vhdl/vhdl_file_dir.htm)) – gsm