ลิขสิทธิ์ (C) 2018-2020, Wuklab, UCSD
นี่คือระบบปฏิบัติการ (OS) ที่ทำงานอยู่ภายใน FPGA ที่ให้บริการระบบปฏิบัติการระบบปฏิบัติการที่คุ้นเคย (เช่น MM, Sched, NET) สำหรับแอปพลิเคชัน FPGA นี่คือต้นแบบการวิจัยระยะแรกที่ไม่เป็นทางการ รหัสส่วนใหญ่เขียนใน Xilinx HLS มันได้รับการทดสอบใน VCU118 และ VCU108
มันถูกเปิดเผยสู่สาธารณะเพื่อจุดประสงค์ทางการศึกษา หวังว่าคุณจะพบว่ามีประโยชน์
host/ : สแต็กเครือข่ายโฮสต์และไดรเวอร์ DMAalloc/ : allocator หน่วยความจำmm/ : การจัดการหน่วยความจำnet/ : ระบบย่อยเครือข่ายkernel/ : รหัสที่เกี่ยวข้องกับการประชาสัมพันธ์บางส่วนsystem/ : ระบบบูรณาการขนาดใหญ่สุดท้ายapp/ : แอปพลิเคชันสามารถมีทั้ง FPGA และรหัสโฮสต์include/ : ไฟล์ส่วนหัวที่ใช้โดยทั้ง FPGA และรหัสโฮสต์ เช่นส่วนหัวเครือข่ายinclude/fpga : ส่วนหัวที่ใช้โดย HLS เท่านั้นinclude/uapi : ส่วนหัวที่ใช้โดยทั้ง HLS และรหัสโฮสต์tools/ : ผู้ช่วยที่หลากหลายscripts/ : ไฟล์สคริปต์เทมเพลตgenerated_ip/ : IPS ที่สร้างขึ้นทั้งหมดที่นี่generated_hls_project/ : โครงการ Vivado HLSgenerated_vivado_project/ : โครงการ Vivadoรูปแบบ:
run_hls.tclmm_axi_wrapper เป็น AXI Wrapper IP ภายใต้ระบบย่อย MMmake help เพื่อดูคำอธิบายโดยละเอียดmake ที่ระดับบนสุดจะรวบรวมโครงการทั้งหมดโดยใช้บอร์ดเริ่มต้นsystem/ โฟลเดอร์make ในแต่ละโฟลเดอร์ย่อยจะรวบรวมโฟลเดอร์นั้นเท่านั้นเวิร์กโฟลว์: คุณควรรวบรวมโครงการเมื่อคุณดาวน์โหลดซอร์สโค้ดเป็นครั้งแรก IPS ขนาดเล็กขนาดกลางและโครงการขนาดใหญ่ทั้งหมดจะพร้อมใช้งาน หลังจากนี้คุณสามารถมุ่งเน้นไปที่ IPS ที่คุณกำลังสร้าง การเปลี่ยนแปลงจะปรากฏขึ้นโดยอัตโนมัติภายใน Vivado
นอกจากนี้ให้ความสนใจกับบอร์ดที่คุณกำหนดเป้าหมาย
เป้าหมายของการใช้สคริปต์คือสองเท่า
generated_vivado_project/ โฟลเดอร์ที่โฟลเดอร์เดียวกันกับที่สคริปต์และซอร์สโค้ดที่เกี่ยวข้องอยู่สคริปต์โหมดโครงการ Vivado เหล่านั้นสร้างขึ้นโดย Vivado เอง และสคริปต์เหล่านั้นสามารถใช้ในการสร้างโครงการทั้งหมดใหม่ตามที่เป็นอยู่
นี่คือขั้นตอนที่ไม่เป็นทางการของฉันในการสร้างและแฮ็คสคริปต์เหล่านั้น:
วิ่ง:
vivado -mode tcl -source run_vivado.tclgenerated_vivado_project/ จะถูกสร้างขึ้นที่โฟลเดอร์ปัจจุบันgenerated_ip/ Folderการสร้าง:
write_project_tcl เพื่อสร้างสคริปต์ คุณควรแจ้งให้สคริปต์ใหม่ทราบว่าควรจะวางโครงการที่จะนำไปใช้ใหม่ภายใต้ภายใต้ Folder's generated_vivado_project และคุณควรตั้งชื่อสคริปต์เป็น run_vivado.tclwrite_project_tcl -force -no_copy_sources -target_proj_dir ./generated_vivado_project ./run_vivado.tclwrite_project_tcl -force -target_proj_dir ./generated_vivado_project ./run_vivado.tclสับ:
เพิ่มเส้นทาง IP ลงในสคริปต์ระดับบนสุด:
generated_ip/ โฟลเดอร์ สิ่งนี้ทำให้การติดตาม IP ง่ายขึ้น คุณสามารถเพิ่มบรรทัดลงในสคริปต์เพื่อให้ Vivado รู้ว่าจะหา IP ใหม่ได้ที่ไหน ตรวจสอบ scripts/template_vivado_ip.tcl สำหรับบรรทัดเหล่านั้นแพ็คเกจ IP โดยอัตโนมัติ:
generated_ip/ ตัวอย่างเช่น ipx::package_project -root_dir ../../generated_ip/mm_axi_wrapper -vendor wuklab -library user -taxonomy UserIP -import_files -set_current false -forceipx::package_project -root_dir ../../generated_ip/mm_axi_rab_vcu118 -vendor wuklab -library user -taxonomy UserIP -module THE_BD_NAME -import_filesเพิ่มไฟล์ Source/XDC/Simulation เพิ่มเติม:
top.v , add_files ฯลฯwrite_project_tcl อีกครั้งเพื่อสร้างสคริปต์อื่น จากนั้นตรวจสอบความแตกต่างเสื้อคลุม BD Autogenerate
การตั้งค่าอื่น ๆ :
write_project_tcl เพื่อสร้างสคริปต์ใหม่และบันทึกการเปลี่ยนแปลงที่เกี่ยวข้อง เมื่อคุณคุ้นเคยกับคำสั่ง Vivado คุณควรจะสามารถทำด้วยตนเองได้ด้วยการเปลี่ยนสคริปต์ข้อแม้:
สำหรับตอนนี้คุณสามารถค้นหาสคริปต์ตัวอย่างได้ที่ mm/axi_wrapper/run_vivado.tcl และ mm/sys/run_vivado.tcl
Vivado รองรับเพียงหนึ่งเวอร์ชัน IP ในแต่ละเวอร์ชัน มันเป็นตัวตนที่ดีมากถ้าเราใช้สคริปต์ที่สร้างขึ้น โชคดีที่มีวิธีหนึ่งในการแก้ปัญหา รหัสต่อไปนี้แทนที่สตริง IP ด้วยตัวแปร อย่างไรก็ตามระวังหาก IP ที่อัปเดตมีพอร์ตที่แตกต่างกัน
set axis_data_fifo [get_ipdefs -filter NAME==axis_data_fifo]
Replace all `xilinx.com:ip:axis_data_fifo:1.1` with `$axis_data_fifo
สคริปต์ Vivado HLS นั้นค่อนข้างง่ายกว่าสคริปต์ Vivado คุณสามารถค้นหาสคริปต์เทมเพลตใน scripts/template_run_hls.tcl คุณควรปรับแต่งชิ้นส่วนไฟล์ที่เพิ่มความถี่และดังนั้น หากคุณต้องการสร้าง HL หลายตัวโดยอัตโนมัติภายใต้โฟลเดอร์เดียวกันให้ใช้ scripts/template_generate_hls.sh