Vivado 2014.1 cho phép sử dụng các tập lệnh .tcl để tạo lại các dự án.
Để thực hiện việc này, với dự án của bạn mở, hãy vào Tệp -> Viết dự án tcl.
Dự án cơ bản
Tôi thường lưu trữ các nguồn và tập lệnh .tcl của tôi ở một vị trí bên ngoài thư mục dự án. Các lõi IP xilinx được tạo trong dự án có thể được sao chép ở nơi khác bằng cách nhấp chuột phải vào lõi và chọn "Sao chép IP". Và xóa bản gốc. Khi tập lệnh tcl được tạo, nó tạo các liên kết tương đối đến các tệp này. Đây thường là cấu trúc thư mục của tôi trông như thế nào:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
Chỉ các tệp IP .xml và .xci cần được cam kết. (Và thậm chí điều này không cần thiết, về mặt kỹ thuật, hãy xem ghi chú ở cuối).
Đây là những gì được cam kết với git, lưu ý việc thiếu các thư mục project.xpr hoặc dự án.
Khi tôi chạy genproject.tcl
, nó tạo một thư mục khác cho dự án.
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
Thư mục mới này là hoàn toàn dùng một lần. Để tạo cấu trúc này, tôi sửa đổi tập lệnh tcl theo cách sau.
Tôi thay đổi 3 dòng đầu tiên như sau:
# 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
Điều này tạo ra một thư mục dự án mới và dự án mới trong thư mục đó.
Sau đó, tôi sửa đổi các đường dẫn để chỉ đến những nơi chính xác. Bạn có thể cần thay đổi các đường dẫn này ở những nơi khác trong tập lệnh.
# 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
Tôi cũng sửa đổi thiết kế chạy cho lõi IP như trong câu trả lời này .
Các tập tin .wcfg có thể được bao gồm theo cách tương tự như ip và srcs.
Đây là nơi quá trình xử lý kết thúc cho các dự án đơn giản hơn (chỉ chứa các nguồn và IP, không có sơ đồ khối). Những điều sau đây cũng cần được thực hiện để lưu trữ dữ liệu sơ đồ khối.
Dự án sơ đồ khối
Để lưu sơ đồ khối, với sơ đồ khối mở, hãy đi tới Tệp -> Xuất -> Sơ đồ khối sang Tcl và lưu nó trong cùng một thư mục như tệp tcl khác.
Sau đó, tôi đã tạo một Generate_Wrapper.tcl
tập lệnh tạo tập tin trình bao bọc sơ đồ khối để bạn không cần phải thực hiện thủ công. Thư mục project / project.srcs được sử dụng để lưu trữ dữ liệu bd, nhưng nó vẫn hoàn toàn dùng một lần, vì bd được lưu trữ trong tập lệnh tcl. Lưu cái này với hai cái kia.
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
Cuối cùng, genproject.tcl
tôi thêm các dòng sau để tạo sơ đồ khối và trình bao bọc:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
Đối với các dự án không có nguồn (chỉ là sơ đồ khối), cam kết git của tôi chỉ là như sau:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
Để tạo mọi thứ, hãy chạy genproject.tcl
.
Bạn thậm chí có thể kết hợp tất cả những thứ này thành một nếu bạn đặc biệt hiệu quả, tôi chưa làm tròn được điều đó.
Thành phần tùy chỉnh: Dự án thành phần
Một lưu ý nhanh về việc tạo một thành phần tùy chỉnh. Nếu bạn có một tệp thành phần, hãy thêm nó vào danh sách nguồn tcl của bạn:
"[file normalize "$origin_dir/component.xml"]"\
Và sau đó cũng thêm phần sau:
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
Điều này bao gồm thiết kế thành phần vào dự án để dễ dàng tùy chỉnh.
Thành phần tùy chỉnh: Tham khảo thành phần của bạn
Bạn có thể spacify đường dẫn repo thành phần tùy chỉnh của bạn như thế này:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
Trong thư mục repo của tôi, có các thư mục riêng lẻ chứa các tệp .xml. Vì vậy, bạn không tham khảo thư mục chứa .xml, mà là cha mẹ của thư mục đó. Ví dụ:
repository/
component1/component1.xml
component2/component2.xml
Làm thế nào để chúng tôi chạy các kịch bản tcl?
Mở Vivado và không mở bất kỳ dự án nào, chọn Công cụ -> Chạy tập lệnh TCL và điều hướng đến tập lệnh của bạn.
Ghi chú TCL thêm
Mỗi lệnh bạn chạy trong Vivado được hiển thị trong bảng điều khiển tcl dưới dạng lệnh tcl. Ví dụ: khi tôi tạo IP Xilinx mới bằng GUI, điều này xuất hiện trong bảng điều khiển 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]
Điều này có nghĩa là một vài điều:
Bạn thậm chí không cần phải lưu lõi ip xilinx - một khi chúng là cách bạn muốn, hãy sao chép các lệnh vào tập lệnh tcl và bạn không cần phải thực hiện ip / nữa.
chỉ định thư mục IP với đối số -dir sau -module_name để đặt nó ở bất cứ đâu bạn muốn (mặc định nó nằm trong project.srcs).
Hầu hết mọi thứ bạn làm trong GUI đều có thể được thực hiện trong tcl, cách dễ nhất để xem xilinx thực hiện công cụ như thế nào là thực hiện trong GUI và sau đó xem xét những gì trong bảng điều khiển TCL sau đó.
Pdf hài hước này chi tiết tất cả các lệnh tcl vivado.