ใช้ SVN กับ Xilinx Vivado หรือไม่


13

ฉันเพิ่งใช้ Vivado ในโครงการใหม่และต้องการวางไฟล์โครงการภายใต้ SVN

Vivado ดูเหมือนว่าจะสร้างไฟล์โครงการทั้งหมดภายใต้ชื่อโครงการ (พูด proj1):

/<path to the project>/proj1/
                            proj1.xpr
                            proj1.srcs/
                                       constrs_1/
                                                new/
                                                    const1.xdc
                            proj1.runs/
                            proj1.data/
                            proj1.cache/

คำถามของฉันคือไฟล์ที่ฉันต้องใส่ใน SVN นอกเหนือจากไฟล์ XDC และไฟล์ XPR คืออะไร?


1
ทำไมคุณคิดว่าคุณไม่ต้องการทั้งหมดถ้าพวกเขา?
ผู้เล่น Grady

6
ฉันไม่เข้าใจสิ่งที่คุณหมายถึงที่นี่ Vivado สร้างไฟล์จำนวนมากที่ไม่ต้องการควบคุมตั้งแต่สร้างขึ้น ไฟล์ต้นฉบับของฉันอยู่ที่อื่นฉันแค่ต้องบันทึกไฟล์ที่สำคัญสำหรับ Vivado
FarhadA

ฉันพูดได้ว่าเนื่องจากอินพุตเพียงอย่างเดียวคือซอร์สโค้ดนั่นเป็นไฟล์เดียวที่จะวางไว้ภายใต้ SVN แต่ฉันไม่เคยใช้มันแค่เดา
clabacchio

มีตัวเลือกที่สะอาดหรือไม่? คุณสามารถทำความสะอาดได้จากนั้นตรวจสอบทุกอย่าง
เกรดี้ผู้เล่น

2
ฉันกำลังสร้างสคริปต์ TCL เพื่อสร้างโครงการ Vivado อีกครั้ง และวางอันนั้นไว้ภายใต้การควบคุมเวอร์ชัน เมื่อสร้างโครงการ (พร้อมกับสร้าง) มันจะสร้างไฟล์ที่ต้องการ Xilinx ที่ทำให้ฉันต้องตรวจสอบไดเรกทอรีโครงการเต็มรูปแบบและไฟล์ของ Xilinx
vermaete

คำตอบ:


6

Xilinx สร้างวิดีโอ YouTube (ถอนหายใจ) เพื่อจัดการกับสิ่งนี้ นี่คือลิงค์ไปยังวิดีโอ

http://www.xilinx.com/training/vivado/vivado-version-control-overview.htm

นี่คือบทสรุปของฉันของวิดีโอ (8 นาที)

ก่อนคุณเริ่ม

หากคุณชอบการควบคุมแบบเต็มรูปแบบ Xilinx แนะนำให้คุณเลิกใช้ GUI อย่างสมบูรณ์และทำทุกอย่างในบรรทัดคำสั่งจากนั้นคุณก็รู้ว่าอะไรคือแหล่งที่มาและสิ่งที่ไม่เป็นจริง

มิฉะนั้น Xilinx ตระหนักดีว่าโครงการ Vivado ไม่ได้ออกแบบมาสำหรับการควบคุมเวอร์ชัน อย่าตรวจสอบในโครงการทั้งหมด แต่อ่านเพื่อขอคำแนะนำ ...

พื้นฐาน

แน่นอนสิ่งที่คุณเขียนนอกเครื่องมือ Vivado ควรได้รับการตรวจสอบ

เช็คอินไฟล์ต่อไปนี้

*.v, *.vh, *.vhdl, *.edif  - HDL and Netlist
*.xdc - Constraints
*.xci - IP Core
*.bd  - IP Integrator Block Diagram
*.xmp - Embedded Subsystem
*.sgp - System Generator Subsystem
*.bmm
*.cdc - Chipscope
*.elf
*.mem

บล็อก IP

หากคุณใช้บล็อก IP ให้สร้าง IP ในโฟลเดอร์ที่ไม่ซ้ำกันและตรวจสอบทุกอย่าง

จุดตรวจ

หากคุณต้องการที่จะเรียกใช้ส่วนของการไหลซ้ำโดยไม่ต้องรันทุกอย่างให้ตรวจสอบในไฟล์จุดตรวจ

*.dcp - Design Checkpoints

ภาคผนวกของฉัน

หากเครื่องมือ Xilinx มีประสิทธิภาพฉันไม่แนะนำให้ตรวจสอบในไฟล์ dcp แต่พวกเขาใช้เวลาหลายชั่วโมงในการรันมันอาจคุ้มค่ากับต้นทุนของระบบควบคุมเวอร์ชันที่น่าเกลียด

วิดีโอไม่ได้พูดอะไรเกี่ยวกับไฟล์โครงการ Vivado (* .xpr) ดังนั้นนี่คือคำแนะนำของฉัน:

*.xpr
*.data/*/fileset.xml
*.data/*/runs.xml

ทางเลือกที่ Xilinx แนะนำ (ซึ่งจริงๆแล้วแฮ็กไม่เหมาะสำหรับการควบคุมเวอร์ชัน) คือการเรียกใช้File -> Write Project Tclคำสั่งทุกครั้งที่คุณต้องการคอมมิทจากนั้นคอมมิทไฟล์ TCL ไปยังการควบคุมเวอร์ชัน เมื่อคุณอัปเดตโฟลเดอร์ในเครื่องของคุณคุณจะต้องรันไฟล์ TCL อีกครั้งเพื่อสร้างไฟล์โครงการทั้งหมด yuck


เยี่ยมมากนั่นเป็นประโยชน์จริงๆ ฉันไม่ได้ใช้ SVN อีกต่อไป แต่เป็น GIT แต่สิ่งนี้จะช่วยให้ฉันได้รับไฟล์ที่ถูกต้องลงในที่เก็บ
FarhadA

1
ฉันใช้ไฟล์ tcl และมันใช้งานได้ดีจริงๆ สคริปต์ tcl จำเป็นต้องได้รับการอัปเดตเมื่อไฟล์ถูกเพิ่มเข้าไปในโครงการและโดยปกติฉันจะสร้าง tcl เมื่อไฟล์ทั้งหมดอยู่ในนั้นพวกเขาไม่ได้เกือบจะแหยะหรือแฮ็คที่คุณทำให้พวกเขาเป็น
stanri

โซลูชันของ TCL จะเหมาะสมที่สุดหาก Vivado สร้างไฟล์ TCL โดยอัตโนมัติหลังจากที่ทุกโครงการเปลี่ยนแปลงและอ่านไฟล์ TCL เป็นไฟล์ "project" แทนไฟล์ xpr กล่าวอีกนัยหนึ่งถ้า Xilinx กำจัดไฟล์ xpr และแทนที่ด้วยไฟล์ tcl
Mark Lakata

มีปัญหาเล็กน้อยในการยอมรับไฟล์ xpr: มันเปลี่ยนแปลงทุกครั้งแม้ว่าคุณจะเปิด Vivado เท่านั้น ...
Piedone

3

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


2

มีวิดีโอการฝึกอบรม Xilinxซึ่งอธิบายวิธีการใช้ระบบควบคุมเวอร์ชันด้วย Vivado โดยทั่วไปรายการไฟล์จะขึ้นอยู่กับคุณสมบัติที่คุณใช้

หากคุณใช้วิธีเขียนสคริปต์ (เหมือน vermaete) คุณสามารถให้ Vivado เขียนไฟล์กลาง / ชั่วคราวทั้งหมดไปยังไดเรกทอรีที่แยกต่างหาก ( ดูที่นี่ ) เพื่อให้คุณสามารถแยกพวกเขาได้อย่างง่ายดาย

มิฉะนั้นคุณสามารถล้างข้อมูลโฟลเดอร์ build โดย Vivado และสิ่งที่เหลืออยู่อาจอยู่ภายใต้การควบคุมเวอร์ชัน


1
ขอบคุณฉันจะตรวจสอบมันน่าประหลาดใจที่ Xilinx สามารถสร้างเครื่องมือที่มีราคาแพง แต่ไม่ต้องกังวลกับการสนับสนุนการควบคุมการแก้ไขที่เหมาะสม
FarhadA

1
มีความคิดเห็นที่น่าสนใจในฟอรัม Xilinx (จาก 2009 IIRC): เครื่องมือนี้มีไว้สำหรับวิศวกรฮาร์ดแวร์ และวิศวกรฮาร์ดแวร์ไม่ทราบและไม่สนใจการควบคุมการแก้ไข แต่ฉันคิดว่าทัศนคตินั้นเปลี่ยนไปและมีวิศวกร SW มากขึ้นเรื่อย ๆ ที่ใช้เครื่องมือเหล่านี้ ดังนั้นตอนนี้การควบคุมการแก้ไขมีความสำคัญมากกว่าในอดีต
hli

2
นั่นคือการดูถูกผู้บริสุทธิ์ที่เคยพูดคำเหล่านั้น วิศวกร HW ใช้การควบคุมการแก้ไขหลายประเภทเครื่องมือมากมายสนับสนุนซึ่งวิศวกรจำนวนมากใช้ RC มาตรฐานและอื่น ๆ ใช้เครื่องมือเช่นนักออกแบบ Mentor HDL พร้อม RC ในตัว น่าเศร้าที่ผู้ขาย FPGA เช่น Xilinx และ Altera ดูเหมือนจะไม่สนใจปัญหาเหล่านี้และนั่นคือปัญหาหลัก
FarhadA

1

2
คำตอบของคุณจะเป็นประโยชน์มากขึ้นถ้าคุณสามารถมีเนื้อหาที่น่าสนใจบางอย่างจากการสนทนาว่ายังเพราะมันจะมีชีวิตรอดเพื่อลิงค์ตายในที่สุด (เป็นฟอรั่มที่จะสามารถเกิดขึ้นได้ที่จะได้รับการเก็บไว้)
clabacchio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.