Სარჩევი:

Arduino როგორც იაფი პურის დაფა FPGA: 5 ნაბიჯი (სურათებით)
Arduino როგორც იაფი პურის დაფა FPGA: 5 ნაბიჯი (სურათებით)

ვიდეო: Arduino როგორც იაფი პურის დაფა FPGA: 5 ნაბიჯი (სურათებით)

ვიდეო: Arduino როგორც იაფი პურის დაფა FPGA: 5 ნაბიჯი (სურათებით)
ვიდეო: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, ივლისი
Anonim
Arduino როგორც იაფი პურის დაფა FPGA
Arduino როგორც იაფი პურის დაფა FPGA

აპარატურის ლოგიკური სქემების დიზაინი შეიძლება იყოს სახალისო. ძველი სკოლის გზა იყო ამის გაკეთება NAND კარიბჭეებით, პურის დაფაზე, მავთულხლართებით. ეს ჯერ კიდევ შესაძლებელია, მაგრამ ბევრი დრო არ დასჭირდება, სანამ კარიბჭეების რაოდენობა ხელიდან გამოვა. უფრო ახალი ვარიანტია გამოიყენოთ FPGA (საველე პროგრამირებადი კარიბჭის მასივი). ამ ჩიპებს შეუძლიათ გადააკეთონ საკუთარი თავი და გახდნენ ნებისმიერი ციფრული ლოგიკური წრე, რომლის შემუშავებაც შეგიძლიათ, მაგრამ არ არის იაფი და ადვილად ხელმისაწვდომი. მე ვაჩვენებ, თუ როგორ შეიძლება ეს FPGA შეიცვალოს Arduino UNO– ს იაფი Atmega ჩიპით, რაც ეფექტურად ათავსებს ციფრულ წრეს DIP პაკეტში, რაც ძალიან მოსახერხებელია პურისთვის.

ნაბიჯი 1: შეიმუშავეთ წრე, რომელსაც "FPGA" წარმოადგენს

შეიმუშავეთ წრე, რომელიც
შეიმუშავეთ წრე, რომელიც
შეიმუშავეთ წრე, რომელიც
შეიმუშავეთ წრე, რომელიც
შეიმუშავეთ წრე, რომელიც
შეიმუშავეთ წრე, რომელიც

მე ავაშენებ 2 ბიტიანი + 2 ბიტიანი დამატებულს. მას სჭირდება ორი წყვილი ლოგიკური შეყვანის ქინძისთავები და გამოაქვს ერთი სამმაგი გამომავალი ქინძისთავები.

ამის გაკეთება NAND კარიბჭეებით, იხილეთ სქემატური სურათი. მას სჭირდება 14 NAND კარიბჭე. მე გამოვიყენე 4 quad NAND gate TTL ჩიპი და გავამაგრე ისინი პურის დაფაზე.

მე დავამატე რამდენიმე LED (არ დაგავიწყდეთ მიმდინარე შემზღუდველი რეზისტორები), რათა ნახოთ როდის იყო შეყვანის და გამომავალი ქინძისთავები (მაღალი) და როდის იყო გამორთული (დაბალი). შესასვლელი ქინძისთავების გასავლელად, მე მათ ან მიწისქვეშა სარკინიგზო მაგისტრალთან მივედი, ან დადებითი სიმძლავრის სარკინიგზო ხაზთან.

ეს წრე მუშაობს, მაგრამ ის უკვე იკავებს 4 TTL ჩიპს და წარმოადგენს ვირთხების ბუდეს მავთულხლართებს. თუ მეტი ბიტი იყო საჭირო, იქნებოდა მეტი პურის დაფები და მეტი მხტუნავები. ძალიან სწრაფად წრედის ზომა გამოვა ხელიდან.

მეორე მხრივ, 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, ოდნავ მეტი 1000 კარიბჭით, რომელიც თითოეული შეიძლება გახდეს ნებისმიერი ლოგიკური კარიბჭე. ეს ნიშნავს, რომ თითოეული კარიბჭე შეიძლება იყოს NAND კარიბჭე, ან OR კარიბჭე, არა კარიბჭე, NOR, XOR და ა.შ. დამატებით თითოეულ კარიბჭეს შეუძლია გაატაროს ორზე მეტი შეყვანა. ეს სპეციფიკურია თითოეული მწარმოებლისთვის, მაგრამ iCE40– ის თითოეულ კარიბჭეს შეუძლია 4 შეყვანის დამუშავება. ამრიგად, თითოეული კარიბჭე ბევრად უფრო ძლიერია, ვიდრე 2 შესასვლელი NAND კარიბჭე.

მე უნდა მივანიჭო 4 შეყვანის ფიჭვი და 3 გამომავალი ქინძისთავები ფიზიკურად 91, 90, 88, 87, 81, 80 და 79 შესაბამისად. ეს სპეციფიკურია fpga ჩიპისთვის და ბრეაკოუტ დაფისთვის, და როგორ არის მიერთებული PMIN პორტი. ეს ხელმისაწვდომია ამ FPGA დაფის მონაცემთა ცხრილებში.

Lattice უზრუნველყოფს საკუთარ ინსტრუმენტთა ჯაჭვს Verilog– ის სქემების სინთეზირებისათვის (FPGA ექვივალენტი CPU– ებისათვის), მაგრამ მე გამოვიყენე უფასო ღია წყაროს ინსტრუმენტების ჯაჭვი 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. ეს არ არის ყველაზე იაფი გზა ციფრული მიკროსქემის შესაქმნელად, მაგრამ ის ძლიერია. მას აქვს 1000 -ზე მეტი კარიბჭე და ამ პატარა მიკროსქემისთვის იყენებს მხოლოდ 3 მათგანს. NAND კარიბჭის ექვივალენტში გამოიყენებოდა 14 კარიბჭე. ეს გამოწვეულია იმით, რომ თითოეული კარიბჭე შეიძლება გახდეს ნებისმიერი სახის კარიბჭე და თითოეული კარიბჭე რეალურად არის 4 შესასვლელი კარიბჭე. თითოეულ კარიბჭეს მეტის გაკეთება შეუძლია. თუ თქვენ გჭირდებათ მეტი კარიბჭე, iCEstick– ს ჰყავს უფროსი ძმა 8000 კარიბჭით, რაც დაახლოებით ორჯერ ღირს. სხვა მწარმოებლებს აქვთ სხვა შეთავაზებები, მაგრამ ფასი შეიძლება საკმაოდ მაღალი იყოს.

ნაბიჯი 3: FPGA– დან Arduino– მდე

FPGA– დან Arduino– მდე
FPGA– დან Arduino– მდე

FPGA– ები შესანიშნავია, მაგრამ შეიძლება იყოს ძვირი, ძნელი მისახვედრი და არც ისე პურის დაფა. Breadboard მეგობრული და იაფი ჩიპი არის Atmega 328 P, რომელიც მოდის სისუფთავე DIP პაკეტში, იდეალურია პურის ბორდინგისთვის. მისი ყიდვა ასევე შესაძლებელია 4 დოლარად. ეს არის Arduino UNO– ს გული. თქვენ, რა თქმა უნდა, შეგიძლიათ გამოიყენოთ მთელი UNO, მაგრამ იყავით იაფი, ჩვენ შეგვიძლია Atmega 328 P გავათავისუფლოთ UNO– დან და გამოვიყენოთ იგი თავისთავად. მე გამოვიყენე გაეროს საბჭო, როგორც პროგრამისტი Atmega– სთვის.

ამ ეტაპზე დაგჭირდებათ

1. Arduino UNO, მოსახსნელი Atmega 328P პროცესორით.

2. კიდევ ერთი Atmega 328P Arduino ჩამტვირთველით წინასწარ დამწვარი, რომ შეცვალოს ის, რასაც ჩვენ ვაპირებთ 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 და ა.შ. ორობითი რიცხვებით. სხვა შეყვანის pin სახელები იქნებოდა კარგად როგორც არის, მაგრამ 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. ეს შექმნის ინოს ფაილს ახალ დირექტორიაში, რომელსაც ასევე ჰქვია twoBitAdder, თქვენი Arduino სკეტჩბუქების დირექტორიაში. დააკოპირეთ თქვენი VtwoBitAdder.h და VtwoBitAdder.cpp ფაილები თქვენს Arduino საქაღალდეში ამ twoBitAdder საქაღალდეში.

ახლა დააკოპირეთ სათაურის ფაილები ვერილატორის ინსტალაციიდან.

cp/usr/local/share/verilator/include/verilated*.

საბოლოოდ დააკოპირეთ std c ++ ბიბლიოთეკაში https://github.com/maniacbug/StandardCplusplus. მათი ინსტალაციის ინსტრუქციის მიხედვით "ეს დაინსტალირებულია ისევე, როგორც ჩვეულებრივი Arduino ბიბლიოთეკა. გახსენით დისტრიბუციის შინაარსი" ბიბლიოთეკების "საქაღალდეში თქვენი ესკიზის წიგნის ქვეშ. მაგალითად, ჩემი ესკიზის წიგნი არის/home/maniacbug/Source/Arduino, ასე რომ, ეს ბიბლიოთეკა არის/home/maniacbug/Source/Arduino/ბიბლიოთეკები/StandardCplusplus.

დარწმუნდით, რომ გადააყენეთ თქვენი Arduino IDE მისი ინსტალაციის შემდეგ."

ახლა შეცვალეთ twoBitAdder.ino- ს შინაარსი ამ საფეხურზე მოცემულით. ეს არის საცდელი აღკაზმულობა, რომელსაც ვერილატორი ელოდება, რომელიც ადგენს შეყვანის/გამომავალი ქინძისთავებს, შემდეგ მარყუჟში, კითხულობს შეყვანის ქინძისთავებს, კვებავს მათ VtwoBitAdder- ში (ჩვენი სქემის თარგმნილი ვერსია), შემდეგ კითხულობს VtwoBitAdder– ის შედეგებს და გამოიყენება ისინი გამომავალი ქინძისთავებისთვის.

ეს პროგრამა უნდა იყოს შედგენილი და შესრულებული Arduino UNO– ზე.

ნაბიჯი 4: არდუინოდან DIP ჩიპამდე პურის დაფაზე

არდუინოდან DIP ჩიპამდე პურის დაფაზე
არდუინოდან DIP ჩიპამდე პურის დაფაზე

ახლა, როდესაც პროგრამა მუშაობს Arduino– ზე, ჩვენ აღარ გვჭირდება Arduino დაფა. ყველაფერი რაც ჩვენ გვჭირდება არის პროცესორი.

ამოიღეთ Atmega 328P Arduino UNO სოკეტიდან და სურვილისამებრ ჩადეთ მისი შემცვლელი.

განათავსეთ Atmega 328P პურის დაფაზე. ბოლო მოათავსეთ დივოთი მიუთითეთ პურის დაფაზე. პინი 1 არის ზედა მარცხენა პინი. პინი 2 არის შემდეგი ქვემოთ და ასე შემდეგ მე -14 პინზე, რომელიც მდებარეობს ქვედა მარცხენა კუთხეში. შემდეგ პინ 15 არის ქვედა მარჯვენა, ხოლო ქინძისთავები 16 დან 28 ჩათვლით ჩიპის მარჯვენა მხარეს.

დააკავშირეთ 8 და 22 ქინძისთავები მიწასთან.

შეაერთეთ pin 7 VCC (+5V).

შეაერთეთ 16 მჰც კვარცის ბროლი ქინძისთავებს შორის 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 შეიძლება იყოს თქვენთვის ჩიპი.

ზოგიერთი რამ უნდა გახსოვდეთ:

FPGA:

პრო

- შეუძლია მაღალი სიჩქარის სიგნალების დამუშავება. იმის გამო, რომ არ არსებობს პროცესორი, რომელსაც შეუძლია შეაჩეროს დამუშავება ერთ ინსტრუქციაზე ერთდროულად, შემზღუდველი ფაქტორი არის მოცემულ წრეზე კარიბჭეების გამრავლების შეფერხება. ხშირ შემთხვევაში ეს შეიძლება იყოს ბევრად უფრო სწრაფი ვიდრე ჩიპით მოწოდებული საათი. ჩემი დიზაინისთვის, გამოთვლილი დაგვიანება საშუალებას მისცემს twoBitAdder– ს უპასუხოს შეყვანის მნიშვნელობების დაახლოებით 100 მილიონ ცვლილებას წამში (100 Mhz), მიუხედავად იმისა, რომ ბორტ საათი მხოლოდ 12 Mhz ბროლია.

- რაც უფრო რთულდება დიზაინი, არსებული სქემების შესრულება არ დეგრადირდება (დიდად). იმის გამო, რომ სქემების დამატება ქსოვილში არის რაღაც ახალი გამოუყენებელ უძრავ ქონებაში, ეს არ იმოქმედებს არსებულ სქემებზე.

- FPGA- დან გამომდინარე, ხელმისაწვდომი IO ქინძისთავები შეიძლება იყოს ძალიან მაღალი და ისინი საერთოდ არ არის ჩაკეტილი რაიმე კონკრეტული მიზნით.

კონ

- შეიძლება იყოს ძვირი და/ან ძნელი მისახვედრი.

- ჩვეულებრივ მოდის BGA პაკეტში, რომელიც მოითხოვს რაიმე სახის გარღვევის დაფას ჩიპთან მუშაობისთვის სამოყვარულო პროექტში. თუ თქვენ ააწყობთ მას დიზაინში პერსონალური მრავალ ფენის SMT PCB– ით, ეს არ არის პრობლემა.

- FPGA მწარმოებლების უმეტესობა უზრუნველყოფს საკუთარ დახურულ კოდის დიზაინის პროგრამულ უზრუნველყოფას, რომელსაც ზოგიერთ შემთხვევაში შეიძლება დაუჯდეს ფული, ან აქვს ლიცენზიის ვადის გასვლის თარიღი.

Arduino როგორც FPGA:

პრო

- იაფი და ადვილად მოსაპოვებელი. უბრალოდ მოძებნეთ atmega328p-pu ამაზონზე. ისინი უნდა იყოს დაახლოებით $ 4/ცალი. რამდენიმე გამყიდველი ყიდის მათ ლოტებში 3 ან 4.

- ეს არის DIP პაკეტი, რაც იმას ნიშნავს, რომ მშვენივრად ჯდება პურის დაფაზე მისი გარე ქინძისთავებით.

- ეს არის 5V მოწყობილობა, რომელსაც შეუძლია გაუადვილოს სხვა 5V მოწყობილობებთან კავშირი.

კონ

- ATMEGA328P– ს აქვს შეზღუდული რაოდენობის IO ქინძისთავები (23) და რამდენიმე მათგანი დაცულია კონკრეტული ამოცანებისთვის.

- სქემის სირთულე იზრდება, Arduino მარყუჟის მეთოდით გაშვებული კოდის რაოდენობა იზრდება, რაც იმას ნიშნავს, რომ თითოეული ციკლის ხანგრძლივობა უფრო გრძელია.

- მაშინაც კი, თუ მიკროსქემის სირთულე დაბალია, თითოეული ციკლი მოითხოვს CPU– ს ბევრ ინსტრუქციას შეყვანის pin მნიშვნელობების მოსაპოვებლად და გამომავალი pin მნიშვნელობების დასაწერად და მარყუჟის თავში დასაბრუნებლად. 16 მჰც კრისტალთან ერთად, თუნდაც ერთი მითითებით საათის ციკლზე, მარყუჟი არ გადის 1 მილიონზე მეტჯერ წამში (1 მჰც). სამოყვარულო ელექტრონიკის პროექტების უმეტესობისთვის ეს ბევრად უფრო სწრაფია ვიდრე საჭიროა.

გირჩევთ: