บทที่ 3 บทความแนะนำขั้นตอนการสร้างโปรเจกต์และรันโปรเจกต์ลงบอร์ด ALINX AX7010

บทความนี้แนะนำขั้นตอนการสร้างโปรเจกต์ใน Vivado 2023.1 ตั้งแต่เริ่มต้นจนถึงการรันโปรแกรมบนบอร์ด ALINX AX7010 โดยใช้โค้ดตัวอย่างที่มาพร้อมกับบอร์ดในการรันโปรเจกต์ เพื่อให้คุณสามารถสร้างโปรเจกต์และปรับแต่งวงจรได้ตามต้องการ

การสร้างโปรเจกต์

มีขั้นตอนดังนี้

  1. เข้าโปรแกรม Vivado 2023.1 จากนั้นเลือก Create New Project เพื่อสร้างโปรเจกต์ใหม่ แล้วกด Next

Create Project ใน Vivado 2023.1
Create Project ใน Vivado 2023.1
  1. ตั้งชื่อโปรเจกต์ที่ช่อง Project name จากนั้นเลือกที่ตำแหน่งที่ต้องการจะเก็บโฟลเดอร์ของโปรเจกต์นี้ที่ช่อง Project location

ตั้งค่า Project Name และ Project Location
ตั้งค่า Project Name และ Project Location
  1. เลือก RTL Project เพื่อออกแบบในระดับ Register Transfer Level (RTL) หรือออกแบบลอจิก

เลือก Project Type เป็น RTL Project
เลือก Project Type เป็น RTL Project
  1. เลือกภาษาที่ต้องการใช้ในการออกแบบวงจร ในการออกแบบครั้งนี้จะใช้ภาษา Verilog จากนั้นกด Next เพื่อดำเนินการต่อ

เลือกภาษาที่ใช้เป็น Verilog
เลือกภาษาที่ใช้เป็น Verilog
กด Next โดยยังไม่ Add Constraints
กด Next โดยยังไม่ Add Constraints
  1. เลือกบอร์ดที่ใช้ในการออกแบบ ซึ่งก็คือบอร์ด ALINX AX7010 ที่ใช้ชิป Zynq™ 7000 SoC XC7Z010 ดังนั้นให้เลือก Family เป็น Zynq-7000, Package เป็น clg400, Speed เป็น -1 และเลือกรุ่นที่ใช้เป็น XC7Z010

ตั้งค่าบอร์ดสำหรับใช้ในโปรเจกต์เป็น ALINX AX7010
ตั้งค่าบอร์ดสำหรับใช้ในโปรเจกต์เป็น ALINX AX7010
ตรวจสอบการตั้งค่าต่าง ๆ ก่อนสร้างโปรเจกต์
ตรวจสอบการตั้งค่าต่าง ๆ ก่อนสร้างโปรเจกต์
  1. เมื่อเสร็จสิ้นขั้นตอนที่ 5. จะได้หน้าสำหรับการแก้ไขโปรเจกต์นี้ ซึ่งหมายความว่าสร้างโปรเจกต์เรียบร้อยแล้ว

หน้าสำหรับการแก้ไขโปรเจกต์
หน้าสำหรับการแก้ไขโปรเจกต์

การเพิ่ม/สร้างไฟล์โค้ด

มีขั้นตอนดังนี้

  1. เลือก Add Sources เพื่อเพิ่มโค้ดที่ใช้ในวงจร

เพิ่มไฟล์โค้ดที่ใช้ในโปรเจกต์
เพิ่มไฟล์โค้ดที่ใช้ในโปรเจกต์
  1. เลือก Add or create design sources เพื่อเพิ่ม/สร้างไฟล์โค้ด

เลือกเพิ่ม/สร้างไฟล์โค้ดสำหรับออกแบบ
เลือกเพิ่ม/สร้างไฟล์โค้ดสำหรับออกแบบ

แบ่งการยกตัวอย่างออกเป็น 2 แบบ คือ เพิ่มไฟล์โค้ดและสร้างไฟล์โค้ด

  • เพิ่มไฟล์โค้ด สำหรับในกรณีที่มีไฟล์โค้ดอยู่แล้วสามารถเพิ่มโค้ดได้โดยคลิกที่ Add File

เลือกเพิ่มไฟล์โค้ดสำหรับออกแบบ
เลือกเพิ่มไฟล์โค้ดสำหรับออกแบบ

เลือกที่อยู่ที่เก็บไฟล์โค้ดไว้ จากนั้นเลือกไฟล์ที่ต้องการแล้วกด OK

เลือกไฟล์โค้ดที่ต้องการ
เลือกไฟล์โค้ดที่ต้องการ

เมื่อได้ไฟล์โค้ดที่ต้องการแล้ว กด Finish

กด Finish เพื่อเพิ่มไฟล์โค้ดไว้ในโปรเจกต์
กด Finish เพื่อเพิ่มไฟล์โค้ดไว้ในโปรเจกต์
  • สร้างไฟล์โค้ด สำหรับในกรณีที่ไม่มีไฟล์โค้ด คลิกที่ Create File

เลือกสร้างไฟล์โค้ดสำหรับออกแบบ
เลือกสร้างไฟล์โค้ดสำหรับออกแบบ

เลือกภาษาที่ใช้ในการเขียนโค้ด ตั้งชื่อไฟล์ และเลือกตำแหน่งที่จะเก็บไฟล์ จากนั้นกด Finish

ตั้งค่าสำหรับการสร้างไฟล์โค้ด
ตั้งค่าสำหรับการสร้างไฟล์โค้ด
ตั้งชื่อ Module แล้วกด OK จากนั้นกด YES
ตั้งค่าไฟล์โค้ดเสร็จสิ้น

ตั้งชื่อ Module แล้วกด OK จากนั้นกด YES

ตั้งชื่อ Module ที่อยู่ในไฟล์โค้ด
ตั้งชื่อ Module ที่อยู่ในไฟล์โค้ด
กด Yes โดยยังไม่ต้องตั้งค่า I/O Port
กด Yes โดยยังไม่ต้องตั้งค่า I/O Port
  1. กด PROJECT MANAGER กดเปิด Design Sources แล้วกดดับเบิลคลิกที่ Key เพื่อดูไฟล์โค้ดที่เราสร้าง/เพิ่มเข้ามา

เปิดไฟล์โค้ดในโปรเจกต์
เปิดไฟล์โค้ดในโปรเจกต์

ในกรณีที่ยังไม่มีไฟล์โค้ด ให้เข้าไปคัดลอกไฟล์โค้ดตัวอย่างที่มากับบอร์ดโดยไปที่โฟลเดอร์ที่เก็บ course_s1_fpga ไว้จากนั้นเลือก 06_key > auto_create_project > src > design แล้วเปิดไฟล์ key_test.v

ลือกไฟล์ key_test.v จากโปรเจกต์ตัวอย่างที่มาพร้อมกับบอร์ด
เลือกไฟล์ key_test.v จากโปรเจกต์ตัวอย่างที่มาพร้อมกับบอร์ด

คัดลอกโค้ดในไฟล์ key_test.v จากนั้นนำมาวางที่ไฟล์ key.v ในโปรแกรม Vivado แล้วกด Save

ไฟล์ key_test.v
ไฟล์ key_test.v
ไฟล์โค้ด key.v ในโปรแกรม Vivado
ไฟล์โค้ด key.v ในโปรแกรม Vivado

การกำหนดขาเชื่อมต่อ

ในหัวข้อนี้ เราจะต้องกำหนดให้ขาเข้า (Input) ขาออก (Output) ของไฟล์ key.v ให้เชื่อมต่อกับขาบน บอร์ด FPGA โดยใช้ไฟล์ .xdc ซึ่งไฟล์นี้เป็นไฟล์ที่ใช้สำหรับกำหนดขาเชื่อมต่อต่างๆใน Vivado

**สามารถดูรายละเอียดของขาเชื่อมต่อต่างๆ บนบอร์ดได้จากเอกสาร ALINX AX7010 User Manual

มีขั้นตอนดังนี้

  1. กด Open Elaborated Design เพื่อกำหนดพอร์ต I/O และตรวจสอบการเชื่อมต่อของลอจิกภายใน (Netlist) ของวงจร จากนั้นกด OK เพื่อดำเนินการต่อ

Open Elaborated Design
Open Elaborated Design
  1. กด Window แล้วเลือก I/O Ports

I/O Port
I/O Port
  1. หน้าการตั้งค่า I/O Port จะแสดงขึ้นมาในเมนูด้านล่าง ให้ตั้งค่า Package Pin และ I/O std ดังนี้

ตั้งค่า Package Pin และ I/O std
ตั้งค่า Package Pin และ I/O std

ในโปรเจกต์ตัวอย่างในที่นี้ผลลัพธ์ของวงจรคือ เมื่อกดปุ่ม (Key) บนบอร์ดจาก ไฟ LED จะสว่างขึ้น ดังนั้น I/O Port ที่ต้องกำหนดจึงมี LED และ Key ทั้งหมด 4 ปุ่ม และสัญญาณนาฬิกา (Clock) ซึ่ง Package Pin และ I/O std ที่ตั้งค่าในโปรเจกต์นี้สามารถดูได้จากส่วน Pin Number และ Power Supply ของหัวข้อที่ต้องการตั้งค่าในเอกสาร ALINX AX7010 User Manual เช่น การตั้งค่าสำหรับ LED สามารถหาได้ในหัวข้อ ZYNQ ProgrammableLogic (PL) peripherals > User LEDs

  • LED

ตารางหมายเลขขาพิน (Pin Number) ของ LED บนบอร์ด จาก User Manual
ตารางหมายเลขขาพิน (Pin Number) ของ LED บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ LED บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ LED บนบอร์ด จาก User Manual
  • KEY

ตารางหมายเลขขาพิน (Pin Number) ของ KEY บนบอร์ด จาก User Manual
ตารางหมายเลขขาพิน (Pin Number) ของ KEY บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ KEY บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ KEY บนบอร์ด จาก User Manual
  • Clock

ตารางหมายเลขขาพิน (Pin Number) ของ PL Clock บนบอร์ด จาก User Manual
ตารางหมายเลขขาพิน (Pin Number) ของ PL Clock บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ PL Clock บนบอร์ด จาก User Manual
รูปภาพแสดงการเชื่อมต่อของต่างๆ ของ PL Clock บนบอร์ด จาก User Manual
  1. กด Save (Ctrl+S) และตั้งชื่อไฟล์ จากนั้นกด OK

ตั้งชื่อสำหรับไฟล์ Constraints (.xdc)
ตั้งชื่อสำหรับไฟล์ Constraints (.xdc)
  1. กด PROJECT MANAGER แล้วเลือก Constraints > constrs_1 > key.xdc (target) เพื่อดูขาเชื่อมต่อที่เรากำหนดไว้

ตรวจสอบไฟล์ key.xdc
ตรวจสอบไฟล์ key.xdc

แนะนำรูปแบบพื้นฐานของการเขียน XDC (Xilinx Design Constraints)

พอร์ต I/O ทั่วไปจำเป็นต้องกำหนดหมายเลขพิน (Pin number) และมาตรฐานระดับสัญญาณ (Level Standard) หรือระดับแรงดันไฟฟ้า

  • การกำหนดขาเชื่อมต่อ (Pin number) มีดังนี้

set_property PACKAGE_PIN "pin number" [get_ports "Port name"]

  • การกำหนดระดับสัญญาณ (level signal) มีดังนี้:

set_property IOSTANDARD "Level Standard" [get_ports "Port Name"]

เมื่อกำหนด Package Pin และ I/O std ใน I/O Ports โปรแกรม Vivado จะกำหนดขาเชื่อมต่อ (Pin number) และสัญญาณระดับ (level signal) ในไฟล์ .xdc ทั้งหมดโดยอัตโนมัติ

ข้อควรระวัง ใช้ตัวอักษรใหญ่-เล็กอย่างถูกต้อง ชื่อพอร์ตต้องตรงกับชื่อในไฟล์โค้ดเท่านั้น

การตั้งค่าสัญญาณนาฬิกา (Clock)

นอกเหนือจากการกำหนดขาเชื่อมต่อแล้ว การออกแบบ FPGA ยังมีข้อกำหนดที่สำคัญอีกอย่างหนึ่งคือการกำหนดสัญญาณนาฬิกา ในที่นี้จะใช้ Constraints Wizard เพื่อสาธิตวิธีการกำหนดสัญญาณนาฬิกา

มีขั้นตอนดังนี้

  1. กด Run Synthesis

Synthesis
Synthesis
  1. กด OK และเมื่อ Synthesis Completed แล้วเลือก Cancel เนื่องจากยังไม่ต้องการ Run Implementation

Synthesis Completed
Synthesis Completed
  1. กด Constraints Wizard แล้วเลือก Next

Constraints Wizard ในเมนู Synthesis
Constraints Wizard ในเมนู Synthesis
Timing Constraints Wizard
Timing Constraints Wizard
  1. ในการออกแบบนี้จะตั้งค่าความถี่ (Frequency) ของสัญญาณนาฬิกา (Clock) เป็น 50.000 MHz แล้วกด Skip to Finish จากนั้นเลือก Finish

ตั้งค่า Primary Clocks ใน Timing Constraints Wizard
ตั้งค่า Primary Clocks ใน Timing Constraints Wizard
ตั้งค่า Timing Constraints Wizard เสร็จสิ้น
ตั้งค่า Timing Constraints Wizard เสร็จสิ้น
  1. เมื่อตั้งค่าเสร็จสิ้นแล้วกดเข้ามาดูที่ไฟล์ key.xdc จะได้ค่าดังนี้

“create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]”

จากนั้นให้กด Save

ตรวจสอบ Primary Clocks ในไฟล์ key.xdc
ตรวจสอบ Primary Clocks ในไฟล์ key.xdc

รายละเอียดการกำหนดสัญญาณนาฬิกา (Clock) มีดังนี้

create_clock -period “Clock period” -name “Port name” -waveform {“Rising edge timing” “Falling edge timing”} [get_ports “Port name”]

การสร้าง Bit file เพื่อโปรแกรมลงบอร์ด FPGA

Bit file คือวงจร FPGA ที่ออกแบบสมบูรณ์แล้วและแปลงให้อยู่ในรูป Bit File เพื่อนำไปใช้สำหรับโปรแกรมลงบนบอร์ด FPGA ให้บอร์ดทำงานตามที่ออกแบบไว้

มีขั้นตอนดังนี้

  1. ไปที่เมนู PROGRAM AND DEBUG เลือก Generate Bitstream จากนั้นกด OK

เพิ่มเติม สามารถกด Generate Bitstream ได้เลยโดยไม่ต้องกด Synthesis และ Implement เนื่องจากการกด Generate Bitstream จะรัน Synthesis และ Implement ให้อัตโนมัติ

Generate Bitstream
Generate Bitstream
Generate Bitstream
Generate Bitstream
  1. หากไม่พบข้อผิดพลาด จะปรากฏหน้าจอ Bitstream Generation Completed กด OK เพื่อดำเนินการต่อ

Bitstream Generation Completed
Bitstream Generation Completed

แต่หากมีข้อผิดพลาด สามารถดูรายละเอียดของข้อผิดพลาดได้ที่หน้า Messages

ตรวจสอบข้อผิดพลาดในหน้า Messages
ตรวจสอบข้อผิดพลาดในหน้า Messages

การดาวน์โหลด Bit File ลงบอร์ดเพื่อดูการทำงานของวงจร

ในการดาวน์โหลด Bit file ลงบอร์ด สามารถอ่านขั้นตอนได้ในบทที่ 2 เรื่อง บทความสอนการติดตั้งและการรันโปรเจกต์ตัวอย่าง ในหัวข้อ สอนการรันโปรเจกต์ตัวอย่าง

เมื่อทำตามขั้นตอนและดาวน์โหลดไฟล์ลงบอร์ดเสร็จเรียบร้อย เมื่อดูผลลัพธ์จากบอร์ดจะได้ดังนี้

ตารางการทำงานของโค้ดที่ออกแบบในไฟล์ key.v
ตารางการทำงานของโค้ดที่ออกแบบในไฟล์ key.v

จะได้ดังรูปนี้

ผลลัพธ์จากการทดสอบบนบอร์ด ALINX AX7010
ผลลัพธ์จากการทดสอบบนบอร์ด ALINX AX7010

การแก้ไขไฟล์โค้ด

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

โดยมีขั้นตอนดังต่อไปนี้

  1. ไปที่ไฟล์โค้ด key.v และแก้ไขโค้ดตามที่ต้องการ ตัวอย่างการแก้ไขในหัวข้อนี้ คือการเปลี่ยนรูปแบบการทำงานเดิม โดยแก้ไขการทำงานดังตารางด้านล่างนี้

ตารางการทำงานของโค้ดที่เปรียบเทียบผลลัพธ์ของไฟล์โค้คเดิมและไฟล์โค้ดใหม่
ตารางการทำงานของโค้ดที่เปรียบเทียบผลลัพธ์ของไฟล์โค้คเดิมและไฟล์โค้ดใหม่
โค้ด key.v ที่แก้ไขการทำงานใหม่
โค้ด key.v ที่แก้ไขการทำงานใหม่

เมื่อแก้ไขโค้ดเรียบร้อย จากนั้นกด Save

  1. จากนั้น Generate Bitstream เพื่อสร้าง Bit File สำหรับโปรแกรมลงบอร์ด และเมื่อดาวน์โหลดไฟล์ลงบอร์ดเสร็จเรียบร้อย จะได้ผลลัพธ์ดังนี้

ผลลัพธ์ของไฟล์โค้ดใหม่จากการทดสอบบนบอร์ด ALINX AX7010
ผลลัพธ์ของไฟล์โค้ดใหม่จากการทดสอบบนบอร์ด ALINX AX7010

จากหัวข้อที่กล่าวมาทั้งหมดนี้ เพียงพอสำหรับให้ผู้ใช้สร้างและรันโปรเจกต์ตัวอย่างได้ด้วยตนเอง นอกจากนี้ ผู้ใช้ยังสามารถศึกษาหรือลองรันโปรเจกต์ตัวอย่างอื่น ๆ ที่มาพร้อมกับบอร์ด ALINX AX7010 เพื่อเสริมความเข้าใจได้อีกด้วย

สอนสร้างโปรเจกต์ใน Vivado กับบอร์ด AX7010 | Part 1: วิธีสร้างโปรเจกต์พร้อมเพิ่มไฟล์ Source Code
สอนสร้างโปรเจกต์ใน Vivado กับบอร์ด AX7010 | Part 2: การตั้งค่า I/O Pin และสัญญาณนาฬิกาใน Vivado
สอนสร้างโปรเจกต์ใน Vivado กับบอร์ด AX7010 | Part 3: Generate Bit File และวิธีแก้ไข Source Code

Last updated