สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
แม้ว่า FPGA DueProLogic จะได้รับการออกแบบอย่างเป็นทางการสำหรับ Arduino แต่เราจะทำให้ FPGA และ Raspberry Pi 4B สามารถสื่อสารกันได้
มีการใช้งานสามงานในบทช่วยสอนนี้:
(A) กดปุ่มสองปุ่มพร้อมกันบน FPGA เพื่อพลิกมุมกล้อง RPi
(B) Raspberry Pi 4B ควบคุมวงจร LED ภายนอกของ FPGA
(C) ถ่ายทอดสดกล้อง Raspberry Pi บนเบราว์เซอร์ผ่าน WiFi
ขั้นตอนที่ 1: สร้างวงจรอิเล็กทรอนิกส์
ขั้นตอนที่ 2: แก้ไขรหัส Verilog
เมื่อคุณซื้อ FPGA DueProLogic คุณควรได้รับดีวีดี หลังจากที่คุณเปิด "Projects_HDL" คุณจะเห็นไฟล์โค้ด HDL ดั้งเดิม หลังจากที่คุณตั้งค่าพินแพลนเนอร์แล้ว ให้เพิ่มโค้ดที่ไฮไลท์ตามที่แสดงในหัวข้อ 2A, 2B, 2C และ 2D
2A: หากต้องการเปิดใช้งานปุ่มกด คุณต้องใช้รหัสนี้
// สวิตช์ปุ่มกด
สายอินพุต UBA,
สายเข้า UBB
ในการสื่อสารกับ Raspberry Pi คุณต้องเพิ่มสิ่งเหล่านี้
reg sel_send; // เปิดใช้งาน Raspberry pi
เร็กคอร์ด; //รับจาก raspberry pi
2B: ในการกำหนดค่าให้กับพอร์ต คุณควรแก้ไขรหัสตามนั้น
กำหนด XIO_1[3] = start_stop_cntrl;
กำหนด XIO_2[2] = rece; //เอาต์พุตสูงหรือต่ำในวงจร LED
กำหนด XIO_2[3] = ~UBA; //กดปุ่ม
กำหนด XIO_2[4] = UBB; //กดปุ่ม
กำหนด XIO_2[5] = sel_send; // FPGA ส่งสัญญาณไปยังราสเบอร์รี่ pi
กำหนด sel_read= XIO_5[1]; //FPGA รับสัญญาณจากราสเบอร์รี่ pi
กำหนด c_enable = XIO_5[2]; //XIO_5 -- UB57 -- D17
กำหนด LEDExt = XIO_5[5];
2C: หากกดปุ่มสองปุ่มพร้อมกัน FPGA จะส่งเอาต์พุตสูงไปยัง Raspberry Pi
เสมอ @(sel_send หรือ UBB หรือ UBA) //ส่งไปที่ RPi
เริ่ม
ถ้า (UBB == 1'b0 && UBA == 1'b0)
sel_send = 1'b1;
อื่น
sel_send = 1'b0;
จบ
2D: FPGA อ่านสัญญาณจาก Raspberry Pi ด้วยความถี่สัญญาณนาฬิกา 66MHz พอร์ต XIO_2[2] เชื่อมโยงกับ 'rece'
@(sel_read) เสมอ //read pi
เริ่ม
ถ้า (sel_read == 1'b1)
Rece = 1'b0;
อื่น
Rece = 1'b1;
จบ
ขั้นตอนที่ 3: อัปโหลดรหัส Verilog
จากนั้นอัปโหลดไฟล์ pof ที่คอมไพล์ไปยัง FPGA หากตรวจไม่พบฮาร์ดแวร์โดยอัตโนมัติ ให้คลิก "การตั้งค่าฮาร์ดแวร์" เพื่อแก้ไขด้วยตนเอง
ขั้นตอนที่ 4: อัปโหลดรหัส Raspberry Pi
เส้นที่ไฮไลต์ช่วยให้ FPGA สามารถสื่อสารกับ Raspberry Pi
รหัส Raspberry Pi แบบเต็มสำหรับโครงการนี้
A = GPIO.input(พิน) #read FPGAprint(A);
ถ้า(A==1):
camera.rotation = 0
GPIO.output(18, GPIO. LOW) #ส่งไปที่FPGA
ถ้า(A==0):
camera.rotation = 180
GPIO.output(18, GPIO. HIGH) #ส่งไปที่FPGA
ขั้นตอนที่ 5: มาลองดูกัน
เปิดเบราว์เซอร์ของคุณและพิมพ์ที่อยู่ IP ของคุณเช่น 192.168.xx.xxx:8000.
ท้ายที่สุดระบบควรใช้งานได้!