Vivado 2014.1, projeleri yeniden oluşturmak için .tcl betiklerinin kullanılmasına izin verir.
Bunu yapmak için, projeniz açıkken, Dosya -> Proje Yaz tcl'ye gidin.
Temel Projeler
Genellikle kaynaklarımı ve .tcl betiğini proje dizininin dışındaki bir yerde saklarım. Proje içerisinde üretilen xilinx IP çekirdekleri, çekirdeğe sağ tıklayıp "IP Kopyala" seçilerek başka bir yere kopyalanabilir. Ve orijinali silmek. Tcl betiği oluşturulduğunda, bu dosyalara göreli bağlantılar oluşturur. Bu genellikle benim dizin yapısı gibi görünüyor:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
Yalnızca IP .xml ve .xci dosyalarının işlenmesi gerekir. (Ve bu bile gerekli değildir, teknik olarak, sondaki notlara bakın).
Git'i taahhüt eden şey budur, project.xpr veya proje dizinlerinin eksikliğine dikkat edin.
Çalıştırdığımda genproject.tcl
, proje için başka bir dizin oluşturur.
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
Bu yeni klasör tamamen tek kullanımlıktır. Bu yapıyı oluşturmak için, tcl betiğini aşağıdaki şekilde değiştiriyorum.
İlk 3 satırı aşağıdaki gibi değiştirdim:
# 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
Bu, yeni bir proje dizini ve bu dizinde yeni bir proje oluşturur.
Sonra yolları doğru yerlere işaret edecek şekilde değiştiriyorum. Bu yolları komut dosyasının diğer yerlerinde değiştirmeniz gerekebilir.
# 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
Ayrıca, bu yanıtta görüldüğü gibi IP çekirdekleri için tasarım çalışmalarını da değiştiriyorum .
.Wcfg dosyaları ip ve srcs dosyalarına benzer şekilde eklenebilir.
Bu, işlemenin daha basit projeler için bittiği yerdir (sadece kaynakları ve IP'yi içerir, blok şemaları içermez). Blok diyagram verilerini saklamak için aşağıdakilerin de yapılması gerekir.
Blok Diyagram Projeleri
Blok şemasını kaydetmek için, blok şeması açıkken, Dosya -> Dışa Aktar -> Blok Diyagramı Tcl'ye gidin ve diğer tcl dosyasıyla aynı dizine kaydedin.
Sonra Generate_Wrapper.tcl
blok şeması sarıcı dosyalarını oluşturan bir komut dosyası yaptım , böylece bunu manuel olarak yapmanız gerekmez. Bd verilerini depolamak için project / project.srcs klasörü kullanılır, ancak bd tcl betiğinde depolandığından hala tamamen tek kullanımlıktır. Bunu diğer ikisiyle birlikte sakla.
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
Benim sonunda genproject.tcl
blok şeması ve sarmalayıcıları oluşturmak için aşağıdaki satırları ekliyorum:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
Kaynağı olmayan projeler için (sadece blok şeması) git taahhüm sadece şu şekildedir:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
Her şeyi üretmek için çalıştırın genproject.tcl
.
Özellikle verimli iseniz, bunların hepsini bir araya getiremedim.
Özel Bileşenler: Bileşen projesi
Özel bir bileşen oluşturma hakkında başka bir hızlı not. Component.xml dosyanız varsa, bunu tcl kaynakları listenize ekleyin:
"[file normalize "$origin_dir/component.xml"]"\
Ve sonra aşağıdaki bölümü de ekleyin:
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
Bu, kolay özelleştirme için projeye bileşen tasarımını da içerir.
Özel Bileşenler: Bileşeninize başvurma
Özel bileşen repo yolunuzu şu şekilde aralıklandırabilirsiniz:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
Repo klasörümde .xml dosyaları içeren ayrı klasörler var. Yani .xml dosyasını içeren klasöre değil, üst klasörüne başvuruyorsunuz. Örneğin:
repository/
component1/component1.xml
component2/component2.xml
Bu tcl betiklerini nasıl çalıştırıyoruz?
Vivado'yu açın ve herhangi bir proje açmadan Araçlar -> TCL betiğini çalıştır'ı seçin ve betiğinize gidin.
Ek TCL notları
Vivado'da çalıştırdığınız her komut tcl konsolunda bir tcl komutu olarak gösterilir. Örneğin, GUI kullanarak yeni bir Xilinx IP oluşturduğumda, bu tcl konsolunda geldi:
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]
Bu birkaç şey anlamına gelir:
Gerçekten xilinx ip çekirdeklerini kaydetmenize bile gerek yok - istediğiniz gibi olduklarında, komutları tcl betiğine kopyalayın ve artık ip / artık işlem yapmanız gerekmez.
IP dizinini istediğiniz yere koymak için -module_name öğesinden sonra -dir bağımsız değişkeniyle belirtin (varsayılan olarak project.srcs dosyasındadır).
Çoğunlukla GUI'de yaptığınız her şey tcl'de yapılabilir, xilinx'in işleri nasıl yaptığını görmenin en kolay yolu bunu GUI'de yapmak ve daha sonra TCL konsolunda neler olduğuna bakmaktır.
Bu komik pdf tüm vivado tcl komutlarını detaylandırıyor.