2017-10-15 7 views
1

J'ai créé un design et je voudrais compiler le design afin de créer un fichier binaire pour le CPLD. Toutefois, lorsque j'essaie de compiler la conception, elle émet un avertissement indiquant que les exigences de synchronisation ne sont pas satisfaites. Il semble que ce se plaint du composant VHDL suivant où l'horloge externe est divisée en une fréquence d'horloge inférieure qui est utilisée par les autres composants VHDL dans la conception:L'exigence de timing n'est pas satisfaite lors de la compilation du design

entity clk_divider is 
    generic (COUNTER_MAX : integer := 256000); 
    port(
      clk_in : in std_logic; 
      reset : in std_logic; 
      clk_out : out std_logic 
     ); 
end clk_divider;  

architecture Behavioral of clk_divider is 

    signal signal_level : std_logic := '0'; 
    signal counter : integer range 0 to COUNTER_MAX := 0; 

begin 
    clk_divider : process (clk_in, reset) 
     begin 

     if (reset = '1') then 
      signal_level <= '0'; 
      counter <= 0; 
     elsif rising_edge(clk_in) then 
      if (counter = COUNTER_MAX) then 
       signal_level <= not(signal_level); 
       counter <= 0; 
      else 
       counter <= counter + 1; 
      end if; 
     end if; 
    end process; 

    clk_out <= signal_level; 
end Behavioral; 

Le message d'avertissement critique montré lors de la compilation de conception est montré ci-dessous:

Critical Warning (332012): Synopsys Design Constraints File file not found: 'monitor.sdc'. 
A Synopsys Design Constraints File is required by the TimeQuest Timing Analyzer to get proper timing constraints. 
Without it, the Compiler will not properly optimize the design. 
Info (332142): No user constrained base clocks found in the design. Calling "derive_clocks -period 1.0" 
Info (5): Deriving Clocks 
    Info (5): create_clock -period 1.000 -name clk clk 
    Info (5): create_clock -period 1.000 -name clk_divider:clk_module|signal_level clk_divider:clk_module|signal_level 
Info: Found TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS = ON 
Info: Can't run Report Timing Closure Recommendations. The current device family is not supported. 
Critical Warning (332148): Timing requirements not met 
Info (332146): Worst-case setup slack is -7.891 
    Info (332119):  Slack  End Point TNS Clock 
    Info (332119): ========= =================== ===================== 
    Info (332119): -7.891   -123.541 clk 
    Info (332119): -1.602    -5.110 clk_divider:clk_module|signal_level 
Info (332146): Worst-case hold slack is -0.816 
    Info (332119):  Slack  End Point TNS Clock 
    Info (332119): ========= =================== ===================== 
    Info (332119): -0.816    -0.816 clk 
    Info (332119):  1.732    0.000 clk_divider:clk_module|signal_level 
Info (332146): Worst-case recovery slack is -4.190 
    Info (332119):  Slack  End Point TNS Clock 
    Info (332119): ========= =================== ===================== 
    Info (332119): -4.190    -20.950 clk_divider:clk_module|signal_level 
    Info (332119): -3.654    -76.734 clk 
Info (332146): Worst-case removal slack is 4.320 
    Info (332119):  Slack  End Point TNS Clock 
    Info (332119): ========= =================== ===================== 
    Info (332119):  4.320    0.000 clk 
    Info (332119):  4.856    0.000 clk_divider:clk_module|signal_level 
Info (332146): Worst-case minimum pulse width slack is -2.289 
    Info (332119):  Slack  End Point TNS Clock 
    Info (332119): ========= =================== ===================== 
    Info (332119): -2.289    -2.289 clk 
    Info (332119):  0.247    0.000 clk_divider:clk_module|signal_level 
Info (332001): The selected device family is not supported by the report_metastability command. 
Info (2): Design is not fully constrained for setup requirements 
Info (2): Design is not fully constrained for hold requirements 

Quelle est la raison de ce message d'avertissement et comment puis-je le résoudre? Aussi, que disent les chiffres sur mon design?

Répondre

1

Depuis monitor.sdc ne peut être trouvé, Quartus essaie de synthétiser votre circuit à 1GHz (période = 1ns) pour autant que les journaux révèlent les contraintes suivantes.

create_clock -period 1.000 -name clk clk 
create_clock -period 1.000 -name clk_divider:clk_module|signal_level clk_divider:clk_module|signal_level 

La première ligne est pour le port clk (il doit être dans le module/entité de niveau supérieur) et la seconde ligne est pour le signal signal_level. Vous pouvez modifier les périodes de manière appropriée et mettre les contraintes dans monitor.sdc. Ensuite, vous devez ajouter ce fichier au projet.

Une valeur lâche indique la différence entre la cible et le réel. Si un chemin répond à l'exigence de temps, il a un jeu positif. Si ce n'est pas le cas, le relâchement est négatif.

Votre période d'horloge cible était de 1ns, mais vous avez un relâchement de -7,891ns pour le chemin critique (pire). La période réelle réalisable peut être calculée comme suit.

actual period = target period - setup slack = 1.000 - (-7.891) = 8.891ns 

Selon les résultats ci-dessus, 8.9ns peut être une période réalisable pour clk. J'essaierais aussi des valeurs plus petites, mais il n'y a aucun besoin si votre vraie horloge d'entrée (clk) n'est pas plus rapide que 100MHz.

La période de signal_level dépend de la valeur minimale de COUNTER_MAX. En fait, le reste du circuit semble déjà plus rapide que le module clk_divider, car le mou (-1.602) de signal_level est meilleur. Vous pouvez définir la même période avec clk.

+0

Merci pour la réponse. Oui, il semble que le fichier .sdc était manquant. J'ai ajouté les deux lignes dans mon fichier .sdc et modifié le paramètre -period. Pour 'clk' j'ai réglé à 488.281 (2.048 MHz) et' signal_level' j'ai réglé sur 1000000000 (1 Hz) puisque je veux avoir 'clk_divider' comme horloge de 1 Hz. Cependant, j'obtiens un avertissement disant que: _Warning (332049): Ignoré create_clock à synopsys-design-constraints.sdc (2): La valeur de temps "1000000000" n'est pas valide Info (332050): create_clock -period 1000000000 -name clk_divider: clk_module | signal_level clk_divider: clk_module | signal_level_ Qu'ai-je fait de mal? Merci – Mrchacha

+0

@Mrchacha Vous pouvez essayer une période plus courte (par exemple 10000). De plus, je vous recommande de mettre une marge pour la première contrainte d'horloge. Par exemple, 20% (~ 400ns). – ahmedus

+0

J'ai enlevé le signal d'horloge interne et l'ai modifié pour émettre une impulsion. Donc, ça fonctionne correctement maintenant. Pourquoi recommanderiez-vous d'avoir une marge pour la contrainte d'horloge? – Mrchacha