Vivado 2014.1 อนุญาตให้ใช้สคริปต์. tcl เพื่อสร้างโปรเจ็กต์ใหม่
ในการทำเช่นนี้เมื่อโครงการของคุณเปิดขึ้นให้ไปที่ไฟล์ -> เขียนโครงการ tcl
โครงการพื้นฐาน
ฉันมักจะจัดเก็บซอร์สและสคริปต์. tcl ไว้ในตำแหน่งภายนอกไดเรกทอรีโครงการ แกน xilinx IP ที่สร้างขึ้นภายในโครงการอาจถูกคัดลอกที่อื่นโดยคลิกขวาที่แกนหลักและเลือก "คัดลอก IP" และการลบต้นฉบับ เมื่อสคริปต์ tcl ถูกสร้างขึ้นมันจะสร้างลิงค์ที่สัมพันธ์กับไฟล์เหล่านี้ นี่เป็นลักษณะโครงสร้างไดเรกทอรีของฉัน:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
เฉพาะไฟล์ IP .xml และ. xci เท่านั้นที่จะถูกยืนยัน (และแม้กระทั่งสิ่งนี้ไม่จำเป็นในทางเทคนิคดูโน้ตตอนท้าย)
นี่คือสิ่งที่ได้รับความมุ่งมั่นในการคอมไพล์บันทึกการขาด project.xpr หรือไดเรกทอรีโครงการ
เมื่อฉันเรียกใช้genproject.tcl
มันจะสร้างไดเรกทอรีอื่นสำหรับโครงการ
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
โฟลเดอร์ใหม่นี้ใช้แล้วทิ้งอย่างสมบูรณ์ เพื่อสร้างโครงสร้างนี้ฉันปรับเปลี่ยนสคริปต์ tcl ด้วยวิธีต่อไปนี้
ฉันเปลี่ยน 3 บรรทัดแรกดังนี้:
# 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
สิ่งนี้จะสร้างไดเรกทอรีโครงการใหม่และโครงการใหม่ใน dir นั้น
จากนั้นฉันจะปรับเปลี่ยนเส้นทางเพื่อชี้ไปยังตำแหน่งที่ถูกต้อง คุณอาจต้องเปลี่ยนเส้นทางเหล่านี้ในที่อื่น ๆ ในสคริปต์
# 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
ฉันยังแก้ไขการออกแบบที่ทำงานสำหรับแกน IP ตามที่เห็นในคำตอบนี้
ไฟล์. wcfg สามารถรวมไว้ในวิธีที่คล้ายกับ ip และ srcs
นี่คือที่การประมวลผลสิ้นสุดลงสำหรับโครงการที่ง่ายขึ้น (ที่มีเฉพาะแหล่งที่มาและ IP ไม่มีไดอะแกรมบล็อก) จำเป็นต้องทำสิ่งต่อไปนี้เพื่อจัดเก็บข้อมูลบล็อกไดอะแกรม
บล็อกโครงการไดอะแกรม
ในการบันทึกบล็อกไดอะแกรมโดยเปิดบล็อกไดอะแกรมให้ไปที่ไฟล์ -> ส่งออก -> บล็อกไดอะแกรมไปที่ Tcl และบันทึกไว้ใน dir เดียวกับไฟล์ tcl อื่น ๆ
จากนั้นฉันก็สร้างGenerate_Wrapper.tcl
สคริปต์ที่สร้างไฟล์ตัวบล็อกไดอะแกรมเพื่อที่คุณจะได้ไม่ต้องทำมันเอง โฟลเดอร์ project / project.srcs ใช้เพื่อจัดเก็บข้อมูล bd แต่ก็ยังคงทิ้งอยู่อย่างสมบูรณ์เนื่องจาก bd ถูกเก็บไว้ในสคริปต์ tcl บันทึกสิ่งนี้กับอีกสองคน
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
ในตอนท้ายของฉันgenproject.tcl
ฉันเพิ่มบรรทัดต่อไปนี้เพื่อสร้างบล็อกไดอะแกรมและ wrappers:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
สำหรับโครงการที่ไม่มีแหล่งที่มา (เพียงบล็อกไดอะแกรม) คอมไพล์คอมมิตของฉันมีดังต่อไปนี้:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
genproject.tcl
เพื่อที่จะสร้างทุกอย่างทำงาน
คุณยังสามารถรวมสิ่งเหล่านี้เข้าเป็นหนึ่งเดียวถ้าคุณมีประสิทธิภาพเป็นพิเศษฉันยังไม่ได้เข้าร่วม
Custom Components: โครงการส่วนประกอบ
อีกอย่างรวดเร็วทราบเกี่ยวกับการสร้างองค์ประกอบที่กำหนดเอง หากคุณมี component.xml ให้เพิ่มเข้าไปในรายการแหล่ง tcl ของคุณ:
"[file normalize "$origin_dir/component.xml"]"\
แล้วเพิ่มส่วนต่อไปนี้:
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
ซึ่งรวมถึงการออกแบบส่วนประกอบในโครงการเพื่อให้ปรับแต่งง่าย
คอมโพเนนต์ที่กำหนดเอง: การอ้างอิงองค์ประกอบของคุณ
คุณสามารถกำหนดเส้นทาง repo คอมโพเนนต์ที่กำหนดเองของคุณเช่นนี้:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
ในโฟลเดอร์ repo ของฉันมีหลายโฟลเดอร์ที่มีไฟล์. xml ดังนั้นคุณไม่ได้อ้างอิงโฟลเดอร์ที่มี. xml แต่เป็นพาเรนต์ของโฟลเดอร์นั้น เช่น:
repository/
component1/component1.xml
component2/component2.xml
เราจะเรียกใช้สคริปต์ tcl เหล่านี้ได้อย่างไร
เปิด Vivado และโดยไม่ต้องเปิดโครงการใด ๆ ให้เลือกเครื่องมือ -> เรียกใช้สคริปต์ TCL และไปที่สคริปต์ของคุณ
บันทึกเสริมของ TCL
ทุกคำสั่งที่คุณเรียกใช้ใน Vivado จะแสดงในคอนโซล tcl เป็นคำสั่ง tcl ตัวอย่างเช่นเมื่อฉันสร้าง Xilinx IP ใหม่โดยใช้ GUI สิ่งนี้เกิดขึ้นในคอนโซล 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]
นี่หมายถึงสองสิ่ง:
คุณไม่จำเป็นต้องบันทึก xilinx ip cores จริงๆเมื่อพวกเขาเป็นแบบที่คุณต้องการคัดลอกคำสั่งไปยังสคริปต์ tcl และคุณไม่จำเป็นต้องยอมรับ ip / อีกต่อไป
ระบุไดเรกทอรี IP ด้วยอาร์กิวเมนต์ -dir หลัง -module_name เพื่อวางไว้ทุกที่ที่คุณต้องการ (โดยค่าเริ่มต้นจะอยู่ใน project.srcs)
ส่วนใหญ่สิ่งที่คุณทำใน GUI สามารถทำได้ใน tcl วิธีที่ง่ายที่สุดในการดูว่า xilinx ทำสิ่งนั้นได้อย่างไรใน GUI จากนั้นดูสิ่งที่อยู่ในคอนโซล TCL หลังจากนั้น
ไฟล์ PDF นี้มีรายละเอียดทั้งหมดคำสั่ง vivado tcl