สารบัญ:

Arduino ในฐานะ Breadboard ราคาถูก FPGA: 5 ขั้นตอน (พร้อมรูปภาพ)
Arduino ในฐานะ Breadboard ราคาถูก FPGA: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino ในฐานะ Breadboard ราคาถูก FPGA: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino ในฐานะ Breadboard ราคาถูก FPGA: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: How to use Prototyping Shield with breadboard for Arduino 2024, พฤศจิกายน
Anonim
Arduino เป็น Breadboard ราคาถูก FPGA
Arduino เป็น Breadboard ราคาถูก FPGA

การออกแบบวงจรลอจิกของฮาร์ดแวร์เป็นเรื่องสนุก วิธีเก่าในการทำเช่นนี้คือใช้ประตู 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
ป้อนFPGA
ป้อนFPGA
ป้อน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 ถึง Arduino
จาก 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 สู่ DIP Chip บน Bread Board
จาก 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 เมกะเฮิร์ตซ์) สำหรับโครงการอิเล็กทรอนิกส์มือสมัครเล่นส่วนใหญ่ที่เร็วกว่าที่จำเป็น

แนะนำ: