Méthode de projet¶
1. Écrire la spécification¶
Pour chaque bloc :
- objectif ;
- ports, largeurs, polarités et unités ;
- domaine d'horloge ;
- reset ;
- latence et débit ;
- séquences légales ;
- erreurs et limites ;
- critères de réussite.
Exemple :
Si enable vaut un au front montant, le compteur 8 bits augmente modulo 256. Le reset synchrone actif à un est prioritaire et remet à zéro. Si enable vaut zéro, le compteur conserve sa valeur.
Ce paragraphe contient presque déjà le RTL et le banc de test.
2. Préparer la hiérarchie¶
Séparez :
- enveloppe de carte ;
- frontière horloge/reset/CDC ;
- FSM de contrôle ;
- chemin de données ;
- interfaces ;
- paquetages partagés.
3. Réaliser une tranche verticale¶
Construisez le plus petit chemin utile depuis l'entrée jusqu'à la sortie. Compilez immédiatement. N'attendez pas d'avoir écrit tout le système.
4. Vérifier du bas vers le haut¶
- Fonctions pures.
- Blocs combinatoires.
- Compteurs et minuteries.
- Interfaces.
- FSM.
- Cœur intégré.
- Test simple de l'enveloppe de carte.
Les tests unitaires localisent les défauts ; l'intégration vérifie les contrats entre blocs.
5. Automatiser tout de suite¶
Dès qu'un test fonctionne :
- l'ajouter à la régression ;
- ajouter un timeout ;
- rendre le verdict lisible par une machine ;
- conserver graines et vecteurs fautifs ;
- tout relancer après chaque modification importante.
6. Ajouter les contraintes¶
Traitez le XDC comme du code source relu :
- broches issues du manuel ;
- périodes d'horloge ;
- délais d'interfaces externes ;
- exceptions étroites et justifiées.
7. Examiner la synthèse¶
- RAM, DSP et chaînes de retenue attendus sont-ils inférés ?
- Existe-t-il des latches ?
- Une logique importante a-t-elle disparu ?
- Largeurs et ressources sont-elles plausibles ?
- Horloges et validations sont-elles reconnues ?
8. Examiner l'implémentation¶
Exigez DRC accepté, bonnes horloges, absence de chemins importants non contraints, timing setup/hold réussi et CDC examinées.
9. Valider sur la carte¶
Préparez l'observabilité :
- LED pour états et erreurs ;
- afficheur pour le statut ;
- UART de diagnostic ;
- ILA pour les signaux internes si nécessaire.
L'ILA consomme des ressources et observe le vrai matériel, mais ne remplace pas le banc de test.
10. Préserver la reproductibilité¶
Versionnez :
- sources
.vhd; - contraintes
.xdc; - vecteurs et générateurs ;
- scripts de simulation et de build ;
- documentation ;
- petits rapports importants.
Ignorez les caches générés.
Revue finale¶
Exigences¶
- Comportement non ambigu.
- Horloge, reset et latence documentés.
- Cas limites définis.
RTL¶
- Types numériques corrects.
- Changements de largeur explicites.
- Affectations combinatoires complètes.
- Propriété claire des registres.
- CDC explicites.
Vérification¶
- Cas normaux et limites automatiques.
- Modèle indépendant.
- Timeout.
- Code de retour non nul sur échec.
Implémentation¶
- Broches et standards corrects.
- Toutes les horloges contraintes.
- Rapports timing et CDC propres ou justifiés.
- Ressources plausibles.
Transmission¶
- Une autre personne peut construire et tester depuis le README.
- Versions des outils et de la carte notées.
- Aucune source essentielle uniquement dans un dossier généré.