สารบัญ:
- ขั้นตอนที่ 1: ออกแบบวงจรที่ "FPGA" จะเป็นตัวแทน
- ขั้นตอนที่ 2: ป้อนFPGA
- ขั้นตอนที่ 3: จาก FPGA ถึง Arduino
- ขั้นตอนที่ 4: จาก Arduino ถึง DIP Chip บน Bread Board
- ขั้นตอนที่ 5: บทสรุป
วีดีโอ: Arduino ในฐานะ Breadboard ราคาถูก FPGA: 5 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
การออกแบบวงจรลอจิกของฮาร์ดแวร์เป็นเรื่องสนุก วิธีเก่าในการทำเช่นนี้คือใช้ประตู NAND บนกระดานขนมปัง ต่อสายด้วยสายจัมเปอร์ ยังคงเป็นไปได้ แต่ก็ใช้เวลาไม่นานก่อนที่จำนวนประตูจะหมดลง ตัวเลือกที่ใหม่กว่าคือการใช้ FPGA (Field Programmable Gate Array) ชิปเหล่านี้สามารถต่อสายใหม่ได้เองเพื่อให้กลายเป็นวงจรลอจิกดิจิทัลใดๆ ก็ตามที่คุณออกแบบได้ แต่ราคาไม่ได้ถูกและหาได้ง่าย ฉันจะแสดงให้เห็นว่า FPGA นี้สามารถแทนที่ด้วยชิป Atmega ราคาถูกจาก Arduino UNO ได้อย่างไร ซึ่งทำให้วงจรดิจิทัลกลายเป็นแพ็คเกจ DIP ได้อย่างมีประสิทธิภาพ ซึ่งเป็นมิตรกับบอร์ดบอร์ดมาก
ขั้นตอนที่ 1: ออกแบบวงจรที่ "FPGA" จะเป็นตัวแทน
ฉันจะสร้างแอดเดอร์ 2 บิต + 2 บิต ใช้พินอินพุตลอจิกสองคู่และเอาต์พุตพินเอาต์พุตสามพิน
ในการทำเช่นนี้กับประตู NAND ให้ดูแผนผังในภาพ ต้องการเกท NAND 14 ประตู ฉันใช้ชิป NAND gate TTL 4 ตัวและต่อเข้ากับบอร์ดขนมปัง
ฉันเพิ่ม LED บางตัว (อย่าลืมตัวต้านทานจำกัดกระแส) เพื่อแสดงเมื่อพินอินพุตและเอาต์พุตเปิดอยู่ (สูง) และเมื่อปิด (ต่ำ) ในการขับเคลื่อนพินอินพุต ฉันจัมมันไปที่รางกราวด์หรือรางไฟบวก
วงจรนี้ใช้งานได้ แต่ใช้ชิป TTL ถึง 4 ชิปแล้วและเป็นรังของหนู หากต้องการบิตมากขึ้น ก็จะมีแผงขนมปังมากขึ้นและจัมเปอร์มากขึ้น ขนาดของวงจรจะหลุดมือไปอย่างรวดเร็ว
ในทางกลับกัน เมื่อทำงานกับเกท TTL เกทเหล่านี้จะไม่ส่งเอาต์พุต 0V หรือ 5V ตรงตามที่คาดไว้ พวกเขามักจะส่งออกประมาณ 3V สำหรับ "สูง" แต่แรงดันไฟฟ้าที่แน่นอนนั้นอยู่ในช่วงกว้างมาก วงจรเดียวกันที่ใช้ชิปเทียบเท่า CMOS จะดีกว่าตรง 0V ถึง 5V สวิงพอดี
ขั้นตอนที่ 2: ป้อนFPGA
FPGA เป็นชิปที่น่าอัศจรรย์ที่สามารถกลายเป็นการรวมกันของลอจิกเกตที่เชื่อมต่อเข้าด้วยกันในรูปแบบใดก็ได้ หนึ่งออกแบบ "วงจร" ในภาษาการออกแบบฮาร์ดแวร์ (HDL) มีหลายภาษา ซึ่งหนึ่งในนั้นเรียกว่า Verilog ไฟล์.v ในภาพคือ Verilog ที่เทียบเท่ากับแอดเดอร์สองบิต ไฟล์.pch ด้านล่างนี้ยังจำเป็นสำหรับการกำหนดพินอินพุตและเอาต์พุตที่มีชื่อในไฟล์ verilog ให้กับพินฮาร์ดแวร์จริงบนชิป
ในกรณีนี้ ฉันใช้บอร์ดพัฒนา Lattice Semiconductors iCEstick (https://www.latticesemi.com/icestick) ชิป FPGA ที่แท้จริงคือ iCE40HX-1k โดยมีเกตมากกว่า 1,000 เกทเล็กน้อย ซึ่งแต่ละอันสามารถกลายเป็นลอจิกเกตใดก็ได้ นั่นหมายความว่าแต่ละเกทสามารถเป็นเกท NAND หรือเกท OR ไม่ใช่เกท, NOR, XOR เป็นต้น นอกจากนี้ แต่ละเกทสามารถรองรับอินพุตได้มากกว่าสองอินพุท นี่เป็นข้อมูลเฉพาะสำหรับผู้ผลิตแต่ละราย แต่ในแต่ละเกตของ iCE40 สามารถรองรับได้ 4 อินพุต ดังนั้นแต่ละเกตจึงมีความสามารถมากกว่า 2 อินพุต NAND เกทอย่างมาก
ฉันต้องกำหนดพินอินพุท 4 อันและพินเอาต์พุต 3 พินให้กับพินจริง 91, 90, 88, 87, 81, 80 และ 79 ตามลำดับ นี่เป็นข้อมูลเฉพาะสำหรับชิป fpga และบอร์ดฝ่าวงล้อมที่เปิดอยู่ และวิธีที่พินเหล่านั้นเชื่อมต่อกับพอร์ต PMOD มีอยู่ในเอกสารข้อมูลสำหรับบอร์ด FPGA นี้
Lattice จัดเตรียมชุดเครื่องมือของตนเองเพื่อสังเคราะห์วงจร (FPGA เทียบเท่ากับการรวบรวมสำหรับ CPU) จาก Verilog แต่ฉันใช้ icestorm ของห่วงโซ่เครื่องมือโอเพ่นซอร์สฟรี (https://www.clifford.at/icestorm/) คำแนะนำในการติดตั้งมีอยู่ในเว็บไซต์นั้น เมื่อติดตั้ง icestorm และไฟล์ verilog และ pcf แล้ว คำสั่งในการโหลดวงจรนี้ลงใน FPGA คือ:
yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif
arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc
icepack twoBitAdder.asc twoBitAdder.bin
iceprog twoBitAdder.bin
ใช้งานได้ดี แต่การจัดส่ง iCEstick นี้จะมีราคาประมาณ 30 เหรียญ นี่ไม่ใช่วิธีที่ถูกที่สุดในการสร้างวงจรดิจิทัล แต่มีประสิทธิภาพ มีเกทมากกว่า 1,000 เกท และสำหรับวงจรเล็กๆ นี้ ใช้เพียง 3 เกทเท่านั้น ประตู NAND เทียบเท่าใช้ 14 ประตู เนื่องจากแต่ละเกทสามารถเป็นเกทชนิดใดก็ได้ และแต่ละเกทเป็นเกท 4 ตัว แต่ละประตูสามารถทำอะไรได้มากกว่า หากคุณต้องการประตูเพิ่ม iCEstick มีพี่ชายที่ใหญ่กว่าด้วยประตู 8000 ซึ่งมีค่าใช้จ่ายประมาณสองเท่า ผู้ผลิตรายอื่นมีข้อเสนออื่น ๆ แต่ราคาอาจค่อนข้างสูงชัน
ขั้นตอนที่ 3: จาก FPGA ถึง Arduino
FPGA นั้นยอดเยี่ยม แต่อาจมีราคาแพง หาซื้อได้ยาก และไม่เป็นมิตรกับบอร์ดทดลอง ชิปราคาถูกที่เป็นมิตรและราคาถูกคือ Atmega 328 P ซึ่งมาในแพ็คเกจ DIP ที่เรียบร้อยเหมาะสำหรับการทำเขียงหั่นขนม นอกจากนี้ยังสามารถมีได้ประมาณ 4 เหรียญ นี่คือหัวใจของ Arduino UNO คุณสามารถใช้ UNO ได้ทั้งหมด แต่ราคาถูก เราสามารถดึง Atmega 328 P ออกจาก UNO และใช้เองได้ ฉันใช้บอร์ด UNO เป็นโปรแกรมเมอร์สำหรับ Atmega
ณ จุดนี้คุณจะต้อง
1. Arduino UNO พร้อม Atmega 328P CPU แบบถอดได้
2. Atmega 328P อีกเครื่องหนึ่งที่มี Arduino bootloader ถูกเบิร์นไว้ล่วงหน้า เพื่อแทนที่อันที่เรากำลังจะถอดออกจาก UNO (เป็นทางเลือก สมมติว่าคุณยังต้องการมี UNO ที่ใช้งานได้)
เป้าหมายคือการแปลงไฟล์ verilog เป็นโครงการ Arduino ที่สามารถโหลดลงใน 328P ได้ Arduino ใช้ C ++ สะดวกมีนักแปลจาก Verilog เป็น C++ ชื่อ Verilator (https://www.veripool.org/wiki/verilator) Verilator มีวัตถุประสงค์เพื่อใช้โดยนักออกแบบฮาร์ดแวร์ที่ต้องการจำลองการออกแบบก่อนที่จะส่งการออกแบบเหล่านั้นไปยังฮาร์ดแวร์ราคาแพง Verilator cross รวบรวม verilog เป็น C ++ จากนั้นผู้ใช้จะจัดเตรียมสายรัดทดสอบเพื่อให้สัญญาณอินพุตจำลองและบันทึกสัญญาณเอาต์พุต เราจะใช้มันเพื่อยัดเยียดการออกแบบ verilog ลงใน Atmega 328P โดยใช้ชุดเครื่องมือ Arduino
ขั้นแรกให้ติดตั้ง Verilator ทำตามคำแนะนำได้ที่
ติดตั้ง Arduino IDE และทดสอบว่าสามารถเชื่อมต่อกับ Arduino UNO ผ่าน USB ได้หรือไม่
เราจะใช้ไฟล์ verilog เดียวกันกับ FPGA ยกเว้นว่าต้องเปลี่ยนชื่อพิน ฉันเพิ่มขีดล่าง (_) ที่จุดเริ่มต้นของแต่ละรายการ สิ่งนี้จำเป็นเนื่องจากไลบรารี Arduino มีไฟล์ส่วนหัวที่แปลสิ่งต่าง ๆ เช่น B0, B001 ฯลฯ เป็นเลขฐานสอง ชื่อพินอินพุตอื่น ๆ นั้นใช้ได้ตามปกติ แต่ B0 และ B1 จะทำให้บิลด์ล้มเหลว
ในไดเร็กทอรีที่มี twoBitAdder.v และ iCEstick.pcf ให้รันสิ่งต่อไปนี้:
verilator -Wall --cc twoBitAdder.v
สิ่งนี้จะสร้างไดเร็กทอรีย่อยชื่อ obj_dir ที่มีไฟล์ใหม่หลายไฟล์ เราต้องการเฉพาะไฟล์ส่วนหัวและ cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h และ VtwoBitAdder_Syms.cpp
ใน Arduino IDE ให้สร้างสเก็ตช์ใหม่ชื่อ twoBitAdder.ino สิ่งนี้จะสร้างไฟล์ ino ในไดเร็กทอรีใหม่ที่เรียกว่า twoBitAdder ภายในไดเร็กทอรี Sketchbook Arduino ของคุณ คัดลอกไฟล์ VtwoBitAdder.h และ VtwoBitAdder.cpp ของคุณไปยังโฟลเดอร์ twoBitAdder ในโฟลเดอร์ Arduino ของคุณ
ตอนนี้คัดลอกไฟล์ส่วนหัวจากการติดตั้งตัวตรวจสอบ
cp /usr/local/share/verilator/include/verilated*.
ในที่สุดก็คัดลอกในไลบรารี std c++ จาก https://github.com/maniacbug/StandardCplusplus ตามคำแนะนำในการติดตั้ง สิ่งนี้ได้รับการติดตั้งเช่นเดียวกับไลบรารี Arduino ทั่วไป แกะเนื้อหาของการแจกจ่ายลงในโฟลเดอร์ 'ไลบรารี' ใต้สมุดร่างของคุณ ตัวอย่างเช่น สมุดร่างของฉันอยู่ที่ /home/maniacbug/Source/Arduino ดังนั้นไลบรารีนี้ อยู่ใน /home/maniacbug/Source/Arduino/libraries/StandardCplusplus
อย่าลืมรีเซ็ต Arduino IDE ของคุณหลังจากติดตั้ง"
ตอนนี้แทนที่เนื้อหาของ twoBitAdder.ino ด้วยเนื้อหาที่ให้ไว้ในขั้นตอนนี้ นี่คือสายรัดทดสอบที่ผู้ตรวจสอบคาดหวัง ซึ่งตั้งค่าพินอินพุต/เอาต์พุต จากนั้นในลูป อ่านพินอินพุต ป้อนพวกมันไปยัง VtwoBitAdder (เวอร์ชันแปลของวงจรของเรา) จากนั้นอ่านเอาต์พุตจาก VtwoBitAdder และนำไปใช้ ไปที่ขาออก
โปรแกรมนี้ควรคอมไพล์และรันบน Arduino UNO
ขั้นตอนที่ 4: จาก Arduino ถึง DIP Chip บน Bread Board
ตอนนี้โปรแกรมกำลังทำงานบน Arduino เราไม่ต้องการบอร์ด Arduino อีกต่อไป ทั้งหมดที่เราต้องการคือซีพียู
ถอด Atmega 328P อย่างระมัดระวังจากซ็อกเก็ต Arduino UNO และเลือกที่จะใส่แทน
วาง Atmega 328P ลงบนเขียงหั่นขนม ปิดท้ายด้วยตัวหารที่ชี้ขึ้นบนกระดานขนมปัง พิน 1 คือพินซ้ายบน พิน 2 คืออันถัดไปที่ด้านล่าง และต่อไปยังพิน 14 ซึ่งอยู่ด้านล่างซ้าย จากนั้นพิน 15 จะอยู่ด้านล่างขวา และพิน 16 ถึง 28 นับถอยหลังทางด้านขวาของชิป
ต่อพิน 8 และ 22 เข้ากับกราวด์
เชื่อมต่อพิน 7 กับ VCC (+5V)
เชื่อมต่อคริสตัลควอตซ์ 16Mhz ระหว่างพิน 9 และ 10 นอกจากนี้ยังมีตัวเก็บประจุขนาดเล็ก (22pF) ระหว่างพิน 9 กับกราวด์ และระหว่างพิน 10 กับกราวด์ สิ่งนี้ทำให้ Atmega 328P มีความเร็วสัญญาณนาฬิกา 16Mhz มีคำแนะนำอื่น ๆ ในการสอน 328P ให้ใช้นาฬิกา 8Mhz ภายในแทนซึ่งจะช่วยประหยัดสองสามส่วน แต่จะทำให้โปรเซสเซอร์ช้าลง
พอร์ต Arduino GPIO 5, 6, 7 และ 8 ซึ่งเราใช้สำหรับพินอินพุตนั้นเป็นพินจริง 11, 12, 13, 14 บน Atmega 328P นั่นจะเป็นหมุดสี่ตัวล่างทางด้านซ้าย
พอร์ต Arduino GPIO 11, 10 และ 9 ซึ่งเราใช้สำหรับพินเอาต์พุตนั้นเป็นพินจริง 17, 16, 15 บน Atmega 328P นั่นจะเป็นหมุดสามตัวล่างทางด้านขวา
ฉันต่อไฟ LED กับหมุดเหล่านี้เหมือนเมื่อก่อน
ขั้นตอนที่ 5: บทสรุป
ชิป TTL ใช้งานได้ แต่ต้องใช้เวลามากในการสร้างทุกอย่าง FPGA ทำงานได้ดี แต่ไม่ถูก หากคุณสามารถใช้หมุด IO น้อยลงและความเร็วต่ำลง Atmega 328P อาจเป็นชิปสำหรับคุณ
สิ่งที่ควรทราบ:
เอฟพีจีเอ:
มือโปร
- สามารถรองรับสัญญาณความเร็วสูง เนื่องจากไม่มีซีพียูในการประมวลผลคอขวดทีละคำสั่ง ปัจจัยจำกัดคือความล่าช้าในการแพร่กระจายผ่านเกตบนวงจรที่กำหนด ในหลายกรณี อาจเร็วกว่านาฬิกาที่ให้มากับชิปมาก สำหรับการออกแบบของฉัน ความล่าช้าที่คำนวณได้จะทำให้ twoBitAdder ตอบสนองต่อการเปลี่ยนแปลงค่าอินพุตประมาณ 100 ล้านครั้งต่อวินาที (100Mhz) แม้ว่านาฬิกาออนบอร์ดจะเป็นเพียงคริสตัล 12 เมกะเฮิร์ตซ์
- เมื่อการออกแบบมีความซับซ้อนมากขึ้น ประสิทธิภาพของวงจรที่มีอยู่ก็ไม่ลดลง (มาก) เนื่องจากการเพิ่มวงจรลงในผ้าเป็นเพียงการนำสิ่งใหม่ๆ เข้ามาในอสังหาริมทรัพย์ที่ไม่ได้ใช้ จึงไม่ส่งผลกระทบต่อวงจรที่มีอยู่
- ขึ้นอยู่กับ FPGA จำนวนพิน IO ที่มีอยู่อาจสูงมาก และโดยทั่วไปจะไม่ถูกล็อกไว้เพื่อจุดประสงค์ใดโดยเฉพาะ
คอน
- อาจมีราคาแพงและ/หรือหาได้ยาก
- มักจะมาในแพ็คเกจ BGA ที่ต้องใช้บอร์ดฝ่าวงล้อมเพื่อทำงานกับชิปในโครงการมือสมัครเล่น หากคุณกำลังสร้างเป็นการออกแบบด้วย SMT PCB แบบหลายชั้นแบบกำหนดเอง นี่ไม่ใช่ปัญหา
- ผู้ผลิต FPGA ส่วนใหญ่มีซอฟต์แวร์ออกแบบโอเพ่นซอร์สของตัวเอง ซึ่งในบางกรณีอาจต้องเสียค่าใช้จ่าย หรือมีวันหมดอายุของใบอนุญาต
Arduino เป็น FPGA:
มือโปร
- ราคาถูกและหาง่าย เพียงค้นหา atmega328p-pu บน Amazon พวกเขาควรจะประมาณ $4/ชิ้น ผู้ขายหลายรายขายในล็อต 3 หรือ 4
- นี่คือแพ็คเกจ DIP ที่เข้ากันได้ดีกับเขียงหั่นขนมที่มีหมุดภายนอก
- นี่คืออุปกรณ์ 5V ซึ่งสามารถเชื่อมต่อกับอุปกรณ์ 5V อื่น ๆ ได้ง่าย
คอน
- ATMEGA328P มีพิน IO จำนวนจำกัด (23) และหลายพินสงวนไว้สำหรับงานเฉพาะ
- เมื่อความซับซ้อนของวงจรเพิ่มขึ้น ปริมาณการรันโค้ดในวิธี Arduino loop จะเพิ่มขึ้น ซึ่งหมายความว่าระยะเวลาของแต่ละรอบจะนานขึ้น
- แม้ว่าความซับซ้อนของวงจรจะต่ำ แต่แต่ละรอบต้องใช้คำสั่ง CPU หลายคำสั่งเพื่อดึงค่าพินอินพุต และเขียนค่าพินเอาต์พุต และกลับสู่ด้านบนสุดของลูป ด้วยคริสตัล 16 เมกะเฮิร์ตซ์ แม้ในหนึ่งคำสั่งต่อรอบนาฬิกา ลูปจะไม่ทำงานมากกว่า 1 ล้านครั้งต่อวินาที (1 เมกะเฮิร์ตซ์) สำหรับโครงการอิเล็กทรอนิกส์มือสมัครเล่นส่วนใหญ่ที่เร็วกว่าที่จำเป็น
แนะนำ:
วิธีการสร้างบอร์ด Attiny Arduino ราคาถูก: 4 ขั้นตอน (พร้อมรูปภาพ)
วิธีทำ Attiny Arduino Board ราคาถูก: ส่วนใหญ่แล้วฉันจะมีปัญหาเมื่อฉันต้องการ Arduino ในบางโครงการที่ฉันต้องการพิน I/O ไม่กี่อัน ต้องขอบคุณแพลตฟอร์ม Arduino-Tiny โปรแกรม Arduino สามารถเขียนลงใน Avr-tiny Series เช่น Attiny 85/45Arduino-Tiny เป็นชุดโอเพ่นซอร์สของ ATtiny
Dirt-O-Meter ราคาถูก - เครื่องวัดระยะสูงจาก Arduino $ 9: 4 ขั้นตอน (พร้อมรูปภาพ)
Dirt-O-Meter ราคาถูก - เครื่องวัดระยะสูงแบบได้ยินจาก Arduino ราคา $ 9: Dytters (A.K.A Audible Altimeters) ช่วยชีวิตนักกระโดดร่มมาหลายปีแล้ว ตอนนี้ Audible Abby จะช่วยพวกเขาประหยัดเงินด้วย Dytters พื้นฐานมีนาฬิกาปลุก 4 ตัว ระหว่างทางขึ้นและลง 3 ตัว ในการนั่งเครื่องบิน นักดิ่งพสุธาจำเป็นต้องรู้เมื่อ
DIY Arduino Gameboy ราคาถูก: 5 ขั้นตอน (พร้อมรูปภาพ)
DIY Arduino Gameboy ราคาถูก: ทุกคนจะรู้สึกเบื่อเวลาเดินทางไกลและต้องการหาอะไรมาให้กำลังใจ!! การอ่านนิยายสามารถเลือกได้:/แต่เมื่อเวลาผ่านไปมันก็น่าเบื่อขึ้นด้วย!!ดังนั้นในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นวิธีการทำ อุปกรณ์เกมมิ่งมือถือที่ใช้ Arduino
Arduino Combat Robot Control ราคาถูก: 10 ขั้นตอน (พร้อมรูปภาพ)
Arduino Combat Robot Control ราคาถูก: การกลับมาของ Battlebots ในอเมริกาและ Robot Wars ในสหราชอาณาจักร ทำให้ฉันหลงรักหุ่นยนต์ต่อสู้ ดังนั้นฉันจึงพบกลุ่มผู้สร้างบอทในท้องถิ่นและพุ่งเข้ามา เราต่อสู้กันในระดับน้ำหนักมดในสหราชอาณาจักร (จำกัดน้ำหนัก 150 กรัม) และฉันก็ตระหนักได้อย่างรวดเร็วว่า
ATmega8 ในฐานะ Arduino (ใช้ Internal 8Mhz Crystal): 7 ขั้นตอน (พร้อมรูปภาพ)
ATmega8 ในฐานะ Arduino (ใช้ Internal 8Mhz Crystal): ทุกวันนี้ อุปกรณ์อย่าง Arduino ได้รับความนิยมอย่างมาก สามารถใช้เพื่อสร้างโครงการได้มากมาย อย่างไรก็ตาม พวกเขาใช้พื้นที่มากและมีราคาแพงสำหรับพวกเราบางคน (รวมถึงฉันด้วย) เพื่อแก้ปัญหานี้ ผมขอนำเสนอคำแนะนำนี้แก่คุณ