Les horloges périphériques HPS suivantes peuvent être acheminées vers la logique 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
En raison d’un problème dans les versions 13.0 et ultérieures du logiciel Quartus® II, Quartus® fit peut générer un message d’erreur si ces horloges sont directement connectées à une broche de FPGA externe. Voici un exemple de signal spim1_sclk_out connecté à une broche externe :
Erreur (14566) : Impossible de placer 1 composant(s) périphérique(s) en raison de conflits avec les contraintes existantes (1 pilote(s) d’horloge promu(s) automatiquement)
Erreur (175020) : contrainte illégale d’un pilote d’horloge à promotion automatique faisant partie du système de processeur dur Arria V/Cyclone V ghrd_hps_0 à la région (92, 67) à (183, 137) : aucun emplacement valide dans la région
Infos (14596) : Informations sur le composant défaillant :
Infos (175028) : Le nom du pilote d’horloge promu automatiquement : ghrd:soc_inst|ghrd_hps_0:hps_0|ghrd_hps_0_fpga_interfaces:fpga_interfaces|spim1_sclk_out[0]~CLKENA
Vous trouverez de plus amples renseignements sur ces horloges dans la section « Peripheral FPGA Clocks » du Manuel des appareils Cyclone® V ou Arria® V, Volume 3 : Manuel technique de référence du système de processeur dur (http://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf, pages 27-12).
Pour éviter ces messages d’erreur, le signal d’horloge doit d’abord être acheminé via une LUT. Cela peut être réalisé en instanciant une primitive lcell_comb appropriée pour votre famille d’appareils. Voici un exemple d’instanciation de lcell_comb Verilog pour l’horloge spim1_sclk_out du SoC Arria® V :
arriav_lcell_comb wirelut( .dataa(spim1_sclk_from_hps), .combout(spim1_sclk_to_pin) );
defparam wirelut.lut_mask = 64\'hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
defparam wirelut.dont_touch = « on »;
Dans l’exemple ci-dessus, le signal spim1_sclk_from_hps est connecté au port de sortie spim1_sclk_out de l’instance HPS. Le signal spim1_sclk_to_pin peut être connecté au port de sortie de niveau supérieur et affecté à une broche FPGA.
L’utilisation d’une primitive lcell_comb minimisera les ressources. L’utilisation d’une petite fonction combinatoire booléenne déduite permettra également d’éviter cette erreur. L’utilisation de la fonction booléenne évitera d’avoir à instancier une primitive, mais peut entraîner une utilisation des ressources légèrement plus élevée.
Voici un exemple de code Verilog montrant un booléen inféré qui évite également une erreur en ANDing l’horloge avec un signal de faible réinitialisation actif (provoquant une instance LUT déduite) :
attribuer spim1_sclk_to_pin = spim1_sclk_from_hps & réinitialiser ;
Ce problème est résolu à partir de la version 15.1 du logiciel Quartus® II.