Os seguintes clocks periféricos de HPS podem ser roteado para a lógica 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
Devido a um problema nas versões 13.0 e posteriores do software Quartus® II, o Quartus® Fit pode gerar uma mensagem de erro se esses clocks estiverem conectados diretamente a um pino de FPGA externo. Abaixo está um exemplo do sinal de spim1_sclk_out conectado a um pino externo:
Erro (14566): não foi possível colocar 1 componente(s) de periferia devido a conflitos com as restrições existentes (1 driver(s) de clock promovido automaticamente
Erro (175020): Restrição ilegal de driver de clock promovido automaticamente que faz parte do Hard Processor System Arria V/Cyclone V ghrd_hps_0 para a região (92, 67) para (183, 137): não há locais válidos na região
Informações (14596): Informações sobre o componente faltoso:
Informações (175028): o nome do driver de clock promovido automaticamente: ghrd:soc_inst|ghrd_hps_0:hps_0|ghrd_hps_0_fpga_interfaces:fpga_interfaces|spim1_sclk_out[0]~CLKENA
Mais informações sobre esses clocks podem ser encontradas na seção "Clocks FPGA periféricos" do manual do dispositivo Cyclone® V ou Arria® V, Volume 3: Manual de referência técnica do sistema de processador rígido (http://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf, página 27-12).
Para evitar essas mensagens de erro, o sinal do clock deve primeiro ser roteado por meio de uma LUT. Isto pode ser alcançado instanciando uma lcell_comb primitiva apropriada para a sua família de dispositivos. O seguinte mostra um exemplo de instanciação do lcell_comb Verilog para o clock spim1_sclk_out do SoC Arria® V:
arriav_lcell_comb wirelut (.dataa(spim1_sclk_from_hps), .combout(spim1_sclk_to_pin) );
defparam wirelut.lut_mask = 64\'hAAAAAAAAAAAAAAAAAAAAA ;
wirelut.dont_touch defparam = "ligado";
No exemplo acima, o sinal spim1_sclk_from_hps está conectado à porta de saída spim1_sclk_out da instância do HPS. O spim1_sclk_to_pin de sinal pode ser conectado à porta de saída de nível superior e atribuído a um pino de FPGA.
O uso de uma primitiva lcell_comb minimizará os recursos. O uso de uma pequena função combinacional booleana inferida também evitará este erro. O uso da função Booleano evitará a instanciação de uma primitiva, mas pode resultar em um uso de recursos ligeiramente maior.
Abaixo está um exemplo de código Verilog mostrando um Booleano inferido que também evita um erro de ANDing do clock com um sinal de reset baixo ativo (causando uma instância LUT inferida):
atribuir spim1_sclk_to_pin = spim1_sclk_from_hps e redefinir;
Este problema foi corrigido a partir da versão 15.1 do software Quartus® II.