Vivado 2014.1 permet l'utilisation de scripts .tcl pour régénérer des projets.
Pour ce faire, avec votre projet ouvert, allez Fichier -> Écrire le projet tcl.
Projets de base
Je stocke généralement mes sources et mon script .tcl dans un emplacement en dehors du répertoire du projet. Les cœurs IP xilinx générés dans le projet peuvent être copiés ailleurs en cliquant avec le bouton droit sur le cœur et en sélectionnant "Copier IP". Et en supprimant l'original. Lorsque le script tcl est généré, il crée des liens relatifs vers ces fichiers. Voici généralement à quoi ressemble la structure de mon répertoire:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
Seuls les fichiers IP .xml et .xci doivent être validés. (Et même cela n'est pas nécessaire, techniquement, voir les notes à la fin).
C'est ce qui s'engage à git, notez le manque de project.xpr ou de répertoires de projet.
Lorsque je cours genproject.tcl
, il crée un autre répertoire pour le projet.
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
Ce nouveau dossier est entièrement jetable. Afin de créer cette structure, je modifie le script tcl de la manière suivante.
Je change les 3 premières lignes comme suit:
# Set the reference directory for source file relative paths (by default the value is script directory path)
set origin_dir [file dirname [info script]]
# Set the directory path for the original project from where this script was exported
set orig_proj_dir "[file normalize "$origin_dir/projectdir"]"
# Create project
create_project project $projectdir/project
Cela crée un nouveau répertoire de projet et le nouveau projet dans ce répertoire.
Ensuite, je modifie les chemins pour pointer vers les bons endroits. Vous devrez peut-être modifier ces chemins à d'autres endroits du script.
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
"[file normalize "$origin_dir/srcs/project.v"]"\
"[file normalize "$origin_dir/ip/ip1/ip1.xci"]"\
]
add_files -norecurse -fileset $obj $files
Je modifie également les cycles de conception pour les cœurs IP comme indiqué dans cette réponse .
Les fichiers .wcfg peuvent être inclus d'une manière similaire à l'ip et au srcs.
C'est là que le traitement se termine pour des projets plus simples (contenant uniquement des sources et IP, pas de diagrammes). Les opérations suivantes doivent également être effectuées afin de stocker les données du diagramme.
Projets de diagramme
Pour enregistrer le diagramme, avec le diagramme ouvert, allez Fichier -> Exporter -> Diagramme de blocs vers Tcl, et enregistrez-le dans le même répertoire que l'autre fichier tcl.
Ensuite, j'ai créé un Generate_Wrapper.tcl
script qui crée les fichiers d'encapsulation du diagramme pour que vous n'ayez pas besoin de le faire manuellement. Le dossier project / project.srcs est utilisé pour stocker les données bd, mais il est toujours complètement jetable, car le bd est stocké dans le script tcl. Enregistrez cela avec les deux autres.
set origin_dir [file dirname [info script]]
make_wrapper -files [get_files $origin_dir/project/project.srcs/sources_1/bd/design_1/design_1.bd] -top
add_files -norecurse -force $origin_dir/project/project.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1
À la fin de mon, genproject.tcl
j'ajoute les lignes suivantes pour générer le diagramme et les wrappers:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
Pour les projets sans source (juste un diagramme), mon git commit est juste le suivant:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
Pour tout générer, lancez genproject.tcl
.
Vous pouvez même combiner tous ces éléments en un seul si vous êtes particulièrement efficace, je n'y suis pas encore arrivé.
Composants personnalisés: le projet de composants
Une autre note rapide sur la création d'un composant personnalisé. Si vous avez un component.xml, ajoutez-le à votre liste de sources tcl:
"[file normalize "$origin_dir/component.xml"]"\
Et puis ajoutez également la section suivante:
set file "$origin_dir/component.xml"
set file [file normalize $file]
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property "file_type" "IP-XACT" $file_obj
Cela inclut la conception des composants dans le projet pour une personnalisation facile.
Composants personnalisés: référencer votre composant
Vous pouvez espacer votre chemin de dépôt de composants personnalisé comme ceci:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
Dans mon dossier repo, il y a des dossiers individuels contenant des fichiers .xml. Vous ne faites donc pas référence au dossier contenant le .xml, mais au parent de celui-ci. Par exemple:
repository/
component1/component1.xml
component2/component2.xml
Comment exécuter ces scripts tcl?
Ouvrez Vivado et sans ouvrir aucun projet, sélectionnez Outils -> Exécuter le script TCL et accédez à votre script.
Notes TCL supplémentaires
Chaque commande que vous exécutez dans Vivado est affichée dans la console tcl en tant que commande tcl. Par exemple, lorsque j'ai généré une nouvelle adresse IP Xilinx à l'aide de l'interface graphique, cela est apparu dans la console tcl:
create_ip -name floating_point -vendor xilinx.com -library ip -module_name floating_point_0
set_property -dict [list CONFIG.Operation_Type {Fixed_to_float} CONFIG.A_Precision_Type {Custom} CONFIG.C_A_Exponent_Width {38} CONFIG.C_A_Fraction_Width {0} CONFIG.Result_Precision_Type {Custom} CONFIG.C_Result_Exponent_Width {8} CONFIG.C_Result_Fraction_Width {16} CONFIG.Flow_Control {NonBlocking} CONFIG.Has_ARESETn {true}] [get_ips floating_point_0]
Cela signifie plusieurs choses:
Vous n'avez même pas vraiment besoin d'enregistrer les cœurs ip xilinx - une fois qu'ils sont comme vous le souhaitez, copiez les commandes dans le script tcl et vous n'avez plus besoin de valider ip /.
spécifiez le répertoire IP avec l'argument -dir après -module_name pour le placer où vous le souhaitez (par défaut, il est dans project.srcs).
La plupart du temps, tout ce que vous faites dans l'interface graphique peut être fait en tcl, le moyen le plus simple de voir comment xilinx fait les choses est de le faire dans l'interface graphique et de regarder ensuite ce qui se trouve dans la console TCL.
Ce pdf gigantesque détaille toutes les commandes vivado tcl.