Оглавление:
- Шаг 1. Разработайте схему, которую будет представлять "ПЛИС"
- Шаг 2: введите ПЛИС
- Шаг 3: От FPGA к Arduino
- Шаг 4: От Arduino к DIP-чипу на хлебной доске
- Шаг 5: Заключение
Видео: Arduino как дешевый макет FPGA: 5 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Разработка аппаратных логических схем может быть интересной. Старый школьный способ сделать это заключался в использовании логических элементов NAND на макетной плате, соединенных перемычками. Это все еще возможно, но это не займет много времени, прежде чем количество ворот выйдет из-под контроля. Более новый вариант - использовать FPGA (программируемая вентильная матрица). Эти микросхемы могут реконструироваться, чтобы стать любой цифровой логической схемой, которую вы можете спроектировать, но они недешевы и легкодоступны. Я покажу, как эту FPGA можно заменить дешевым чипом Atmega от Arduino UNO, эффективно поместив цифровую схему в DIP-корпус, который очень удобен для макетов.
Шаг 1. Разработайте схему, которую будет представлять "ПЛИС"
Я построю 2-битный + 2-битный сумматор. Он принимает две пары логических входных контактов и выводит одну тройку выходных контактов.
Чтобы сделать это с воротами NAND, см. Схему на картинке. Требуется 14 вентилей NAND. Я использовал 4 TTL чипа с четырьмя NAND-воротами и подключил их к макетной плате.
Я добавил несколько светодиодов (не забудьте о токоограничивающих резисторах), чтобы показать, когда входные и выходные контакты включены (высокий), а когда выключены (низкий). Чтобы управлять входными контактами, я либо перемыл их к шине заземления, либо к положительной шине питания.
Эта схема работает, но уже занимает 4 микросхемы TTL и представляет собой скопище проводов. Если бы требовалось больше бит, было бы больше макетов и больше перемычек. Очень быстро размер схемы выйдет из-под контроля.
Кстати, при работе с воротами TTL они не выдают точно 0 В или 5 В, как можно было бы ожидать. Они часто выдают около 3 В для «высокого», но точное напряжение находится в очень широком диапазоне. Та же схема, использующая эквивалентные КМОП микросхемы, будет лучше иметь колебания от 0 В до 5 В.
Шаг 2: введите ПЛИС
FPGA - это фантастическая микросхема, которая может буквально стать любой комбинацией логических вентилей, соединенных вместе в любой комбинации. «Схема» разрабатывается на языке проектирования аппаратных средств (HDL). Таких языков несколько, один из которых называется Verilog. Файл.v на картинке - это Verilog-эквивалент двухразрядного сумматора. Приведенный ниже файл.pch также необходим для назначения входных и выходных контактов, указанных в файле verilog, реальным аппаратным контактам на микросхеме.
В этом случае я использую плату разработки iCEstick от Lattice Semiconductors (https://www.latticesemi.com/icestick). Фактическая микросхема FPGA - это iCE40HX-1k с немногим более 1000 вентилей, каждый из которых может стать любым логическим вентилем. Это означает, что каждый вентиль может быть вентилем И-НЕ, вентилем ИЛИ, вентилем НЕ, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и т. Д. Кроме того, каждый вентиль может обрабатывать более двух входов. Это индивидуально для каждого производителя, но на iCE40 каждый вентиль может обрабатывать 4 входа. Таким образом, каждый вентиль намного более эффективен, чем 2 входных логических элемента NAND.
Мне пришлось назначить 4 входных контакта и 3 выходных контакта физическим контактам 91, 90, 88, 87, 81, 80 и 79 соответственно. Это относится к микросхеме fpga и коммутационной плате, на которой он установлен, а также к тому, как эти контакты подключены к порту PMOD. Это доступно в таблицах данных для этой платы FPGA.
Lattice предоставляет свою собственную цепочку инструментов для синтеза (эквивалент FPGA компиляции для процессоров) схем из Verilog, но я использовал бесплатную цепочку инструментов с открытым исходным кодом icestorm (https://www.clifford.at/icestorm/). Инструкции по установке доступны на этом сайте. При установленном icestorm и файлах verilog и pcf команды для загрузки этой схемы в ПЛИС:
yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif
arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc
ледяной пакет twoBitAdder.asc twoBitAdder.bin
iceprog twoBitAdder.bin
Это отлично работает, но с доставкой iCEstick будет стоить около 30 долларов. Это не самый дешевый способ построить цифровую схему, но он мощный. Он имеет более 1000 ворот, и для этой крошечной схемы он использует только 3 из них. Эквивалент логического элемента NAND использовал 14 вентилей. Это связано с тем, что каждый вентиль может стать любым вентилем, и каждый вентиль на самом деле является вентилем с 4 входами. Каждые ворота могут больше. Если вам нужно больше ворот, у iCEstick есть старший брат с 8000 ворот, который стоит примерно вдвое. У других производителей есть другие предложения, но цена может быть довольно высокой.
Шаг 3: От FPGA к Arduino
ПЛИС хороши, но могут быть дорогими, труднодоступными и не очень удобными для макетных плат. Удобный и дешевый чип - это Atmega 328 P, который поставляется в аккуратном DIP-корпусе, идеально подходящем для макетирования. Его также можно купить примерно за 4 доллара. Это сердце Arduino UNO. Вы, конечно, можете использовать UNO целиком, но будьте дешевы, мы можем снять Atmega 328 P с UNO и использовать его отдельно. Тем не менее, я использовал плату 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 кросс-компилирует 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, внутри вашего каталога скетчей 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-чипу на хлебной доске
Теперь, когда программа запущена на Arduino, нам больше не нужна сама плата Arduino. Все, что нам нужно, это процессор.
Осторожно извлеките Atmega 328P из разъема Arduino UNO и, при желании, вставьте его замену.
Поместите Atmega 328P на макетную плату. Положите конец с отверстием вверх на макетную доску. Контакт 1 - это верхний левый контакт. Контакт 2 - следующий вниз, и так далее до контакта 14, который находится внизу слева. Затем контакт 15 находится внизу справа, а контакты с 16 по 28 считаются вверх по правой стороне микросхемы.
Подключите контакты 8 и 22 к земле.
Подключите контакт 7 к VCC (+ 5В).
Подключите кристалл кварца 16 МГц между контактами 9 и 10. Также небольшой конденсатор (22 пФ) между контактом 9 и землей, а также между контактом 10 и землей. Это дает Atmega 328P тактовую частоту 16 МГц. В другом месте есть инструкции по обучению 328P использовать его внутреннюю частоту 8 МГц, что сэкономит пару частей, но замедлит процессор.
Порты Arduino GPIO 5, 6, 7 и 8, которые мы использовали для входных контактов, на самом деле являются физическими контактами 11, 12, 13, 14 на Atmega 328P. Это будут четыре нижних контакта слева.
Порты Arduino GPIO 11, 10 и 9, которые мы использовали для выходных контактов, на самом деле являются физическими контактами 17, 16, 15 на Atmega 328P. Это будут три нижних контакта справа.
Я подключил светодиоды к этим контактам, как и раньше.
Шаг 5: Заключение
Чипы TTL работают, но их нужно много, чтобы что-то построить. ПЛИС работают действительно хорошо, но не из дешевых. Если вы можете жить с меньшим количеством контактов ввода-вывода и более низкой скоростью, тогда Atmega 328P может быть чипом для вас.
Следует помнить о некоторых вещах:
FPGA:
Pro
- Может обрабатывать высокоскоростные сигналы. Поскольку нет ЦП, ограничивающего обработку до одной инструкции за раз, ограничивающим фактором является задержка распространения через вентили в данной схеме. Во многих случаях это может быть намного быстрее, чем часы, поставляемые с микросхемой. Для моего проекта вычисленная задержка позволила бы twoBitAdder реагировать примерно на 100 миллионов изменений входных значений в секунду (100 МГц), даже если встроенные часы - это всего лишь кристалл на 12 МГц.
- По мере усложнения конструкции характеристики существующих цепей не ухудшаются (сильно). Поскольку добавление схем к фабрике просто помещает что-то новое в неиспользуемую недвижимость, это не влияет на существующие схемы.
- В зависимости от FPGA количество доступных контактов ввода-вывода может быть очень большим, и они обычно не привязаны к какой-либо конкретной цели.
Против
- Может быть дорого и / или трудно достать.
- Обычно поставляется в корпусе BGA, который требует какой-то коммутационной платы для работы с чипом в любом любительском проекте. Если вы встраиваете его в проект с помощью специальной многослойной печатной платы SMT, это не проблема.
- Большинство производителей FPGA предоставляют собственное программное обеспечение для проектирования с закрытым исходным кодом, которое в некоторых случаях может стоить денег или иметь срок действия лицензии.
Arduino как ПЛИС:
Pro
- Дешево и легко. Просто найдите atmega328p-pu на Amazon. Они должны быть около 4 долларов за штуку. Некоторые продавцы продают их партиями по 3 или 4 штуки.
- Это DIP-корпус, то есть он идеально подходит для макетной платы своими внешними контактами.
- Это устройство на 5 В, которое упрощает взаимодействие с другими устройствами на 5 В.
Против
- ATMEGA328P имеет ограниченное количество контактов ввода-вывода (23), и некоторые из них зарезервированы для определенных задач.
- По мере увеличения сложности схемы количество кода, выполняемого в методе цикла Arduino, увеличивается, что означает, что продолжительность каждого цикла увеличивается.
- Даже если сложность схемы невелика, каждый цикл требует множества инструкций ЦП для выборки значений входных контактов и записи значений выходных контактов и возврата к началу цикла. С кристаллом 16 МГц, даже при одной инструкции за такт, цикл не будет выполняться чаще, чем, возможно, 1 миллион раз в секунду (1 МГц). Однако для большинства проектов любительской электроники это намного быстрее, чем нужно.
Рекомендуемые:
Макет железной дороги с автоматизированным сайдингом: 13 шагов (с изображениями)
Макет железной дороги с автоматическим сайдингом: создание макетов поездов - отличное хобби, автоматизация сделает его намного лучше! Давайте посмотрим на некоторые преимущества его автоматизации: Низкая стоимость эксплуатации: вся компоновка управляется микроконтроллером Arduino с использованием L298N mo
Макет железной дороги с автоматизированным разъездом (версия 2.0): 13 шагов (с изображениями)
Макет модели железной дороги с автоматическим разъездом (V2.0): этот проект является обновлением одного из предыдущих проектов автоматизации модели железной дороги, Макет модели железной дороги с автоматическим разъездом. В этой версии добавлена функция сцепки и разъединения локомотива с подвижным составом. Работа
Макет платы разработчика: 12 шагов (с изображениями)
Макет платы разработчика: в этих инструкциях показано, как создать индивидуальный макет для платы разработчика
TfCD - Самоходный макет: 6 шагов (с изображениями)
TfCD - Самодвижущийся макет: в этой инструкции мы продемонстрируем одну из технологий, которые часто используются в автономных транспортных средствах: ультразвуковое обнаружение препятствий. В беспилотных автомобилях эта технология используется для распознавания препятствий на коротком расстоянии (< 4м), f
Украсьте свою макетную плату (как добавить светодиодный индикатор питания на прозрачный макет Solarbotics): 7 шагов
Украсьте свою макетную плату (как добавить светодиодный индикатор питания на прозрачный макет Solarbotics): Эти прозрачные макеты очень похожи на любую другую макетную плату для электроники, но они прозрачны! Итак, что можно сделать с прозрачной макетной платой? Думаю очевидный ответ - добавить светодиоды питания