다음 HPS 주변 장치 클럭을 FPGA 로직으로 라우팅할 수 있습니다.
- emac0_md_clk
- emac0_gtx_clk
- emac1_md_clk
- emac1_gtx_clk
- qspi_sclk_out
- spim0_sclk_out
- spim1_sclk_out
- i2c0_clk
- i2c1_clk
- i2c2_clk
- i2c3_clk
Quartus II 소프트웨어 버전 13.0 이상의 문제로 인해 이러한 클록이 외부 FPGA 핀에 직접 연결된 경우 Quartus® fit에서 오류 메시지를 생성할 수 있습니다. 다음은 외부 핀에 연결된 spim1_sclk_out 신호의 예입니다.
오류(14566): 기존 제약 조건과의 충돌로 인해 주변 구성 요소 1개를 배치할 수 없습니다(자동 승격된 클록 드라이버 1개)
오류(175020): 지역(92, 67)에서 (183, 137)으로 ghrd_hps_0된 Arria V/Cyclone V 하드 프로세서 시스템의 일부인 자동 승격된 클록 드라이버의 잘못된 제약 조건: 지역에 유효한 위치가 없습니다.
정보 (14596): 실패한 구성 요소에 대한 정보:
정보(175028): 자동 승격된 클럭 드라이버 이름: ghrd:soc_inst|ghrd_hps_0:hps_0|ghrd_hps_0_fpga_interfaces:fpga_interfaces|spim1_sclk_out[0]~CLKENA
이러한 클록에 대한 자세한 내용은 Cyclone® V 또는 Arria® V 장치 핸드북, 볼륨 3: 하드 프로세서 시스템 기술 참조 설명서(http://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf, 27-12페이지)의 "주변 장치 FPGA 클록" 섹션에서 찾을 수 있습니다.
이러한 오류 메시지를 방지하려면 먼저 LUT를 통해 클럭 신호를 라우팅해야 합니다. 이는 장치 패밀리에 적합한 lcell_comb 기본 형식을 인스턴스화하여 수행할 수 있습니다. 다음은 Arria® V SoC spim1_sclk_out 클록에 대한 lcell_comb Verilog 인스턴스화의 예를 보여줍니다.
arriav_lcell_comb wirelut( .dataa(spim1_sclk_from_hps), .combout(spim1_sclk_to_pin) );
defparam wirelut.lut_mask = 64\'hAAAAAAAAAAAAAAAAAAA ;
defparam wirelut.dont_touch = "켜짐";
위의 예에서 spim1_sclk_from_hps 신호는 HPS 인스턴스의 spim1_sclk_out 출력 포트에 연결됩니다. spim1_sclk_to_pin 신호는 최상위 출력 포트에 연결하고 FPGA 핀에 할당할 수 있습니다.
lcell_comb 프리미티브를 사용하면 리소스가 최소화됩니다. 작은 유추 부울 조합 함수를 사용하면이 오류를 피할 수 있습니다. Boolean 함수를 사용하면 프리미티브를 인스턴스화할 필요가 없지만 리소스 사용량이 약간 더 높아질 수 있습니다.
다음은 활성 로우 리셋 신호로 클럭을 ANDing하여 오류를 방지하는 유추된 부울을 보여주는 Verilog 코드의 예입니다(유추된 LUT 인스턴스 발생).
할당 spim1_sclk_to_pin = spim1_sclk_from_hps & 재설정;
이 문제는 Quartus® II 소프트웨어 릴리스 15.1부터 해결되었습니다.