32bit_me (32bit_me) wrote,
32bit_me
32bit_me

Category:

Небольшой проект на FPGA

Пока были праздники, сделал небольшой проект на Verilog, который давно хотел попробовать.

Суть проекта в следующем: к FPGA подключено быстродействующее (относительно, конечно) АЦП с двумя каналами и параллельным интерфейсом (14-16 бит на канал). FPGA читает данные с АЦП и складывает в буфер (свою внутреннюю память BRAM). Когда буфер заполнен, чтение останавливается, и внешнее устройство (микроконтроллер) может считать данные из буфера по интерфейсу SPI. Также можно по SPI конфигурировать некоторые параметры (об этом будет написано в следующем посте).



Тест проекта (картинка кликабельна).

Результат синтеза для Cyclone IVE

Результат я синтезировал в Quartus II, для FPGA семейства Cyclone IVE (EP4CE6E22A7). Это одна из самых простых и недорогих FPGA в корпусе QFP144 на 6272 логических элемента. Микросхема имеет память объёмом 30K * 9 бит. Пользовательских пинов - 92.

микросхема EP4CE6E22A7
логических элементов - 301 (5%)
пинов - 41 (45%)
память - 65536 бит (24%)
частота для наихудшего случая (125 С) - 151 МГц.

Память 8 Кб, это собственно буфер, куда происходит запись данных. При двух каналах по 16 бит получается 32 бита на отсчёт, и 2048 отсчётов. Я решил, что этого вполне хватит, хотя буфер можно расширить хоть на весь объём.

Частота вполне устраивает, я рассчитывал, что будет частота тактирования 50 МГц, и АЦП на 25 МГц. То есть получается трёхкратный запас по частоте.

Количество логических элементов совершенно незначительно для такой FPGA, т.е. можно при желании много чего ещё туда приделать, тем более, что и пинов остаётся целых 51.

Есть более новое семейство Cyclone 10.

Результат синтеза для Cyclone 10

Выбираем чип 10CL006YE144C8G. Он имеет столько же логических элементов (6272), что и вариант на Cyclone 4, и столько же памяти (30К х 9). Корпус такой же, QFP144, пользовательских пинов даже меньше - 89.

микросхема 10CL006YE144C8G
логических элементов - 289 (5%)
пинов - 41 (46%)
память - 65536 бит (24%)
частота для наихудшего случая (85 С) - 145,5 МГц.

Любопытно то, что проект стал компактнее по логическим элементам. То есть при той же ёмкости логики в Cyclone 10 влезет более сложный проект. Всё остальное примерно на том же уровне.

Возникает резонный вопрос: можно ли сэкономить, поставив другую FPGA или CPLD?

Давайте попробуем FPGA MAX10.

Результат синтеза для MAX 10

Здесь читатель (если он в теме) может воскликнуть: нет, всё не так! Семейство MAX - это CPLD, а не FPGA, а путать эти понятия - вопиющий непрофессионализм!

Однако стараниями маркетологов Intel (все ведь в курсе, что речь про чипы Intel?) семейство MAX10 превратилось в FPGA, хотя и имеет внутреннюю энергонезависимую память конфигурации, как любая CPLD.

Итак, выбираем чип, например, 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), корпус QFP144.

микросхема 10M02SCE144A7G.
логических элементов - 298 (13%)
пинов - 41 (41%)
память - 65536 бит (59%)
частота для наихудшего случая (125 С) - 153 МГц.

Мы видим, что абсолютные показатели остались практически теми же, увеличилась только степень заполнения кристалла, что и понятно - 2304LE против 6272 LE.

Можно ли использовать MAX II?

Теперь вопрос: а можно ли использовать какую-либо совсем дешёвую CPLD, типа MAX II? Здесь всё сложнее. У них нет памяти BRAM, т.е. нужна будет ещё и внешняя быстрая SRAM.

Для подключения SRAM нужна будет дополнительная логика, конечно. Если мы используем память объёмом 4K x 16, то нам будет нужно дополнительно 16 пинов для данных, 12 для адреса и 3 для управления (/cs, /we, /oe), всего 31 дополнительный пин.

Логика также увеличится в размерах. На сколько точно, сложно сказать, но в CPLD на 240 LE она не влезет изначально, а в 570 LE может быть, и влезет.

Выбираем CPLD EPM570 в корпусе QFP100. Нам нужно всего 72 пина, корпус имеет 76 пинов для GPIO, т.е. должно хватить на всё, но для расширения уже совсем мало места.

Плюсы такого решения: возможно, более низкая цена (даже с учётом дополнительной микросхемы SRAM), минусы: бОльшая сложность схемы и площадь платы.

Цена вопроса

Вот что я нашёл с помощью efind. Микросхемы немного другие, но цифра и буква в конце - это индекс быстродействия и температурный диапазон (коммерческий). Так как у нас трёхкратный запас по частоте, нам эти цифры абсолютно не важны.

EP4CE6E22C8N - 456,55 Р (Промэлектроника, Екб, розн.)
10CL006YE144C - 754,71  (Пятый элемент, Спб, опт)
10M02SCE144C8G - 456 Р (Элитан, Екб, опт)
EPM570F100C5N - 368 Р (Хайтек, Спб) + память (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 Р (Промэлектроника, Екб, розн.)

Конечно, можно найти и дешевле, это просто розничные цены в магазине, но соотношение будет примерно тем же.

Видно, что вариант с CPLD никак не выигрывает по цене, при этом имея множество недостатков. Остальные варианты примерно равноценны, разве что Cyclone 10 пока немного дороже и мало у кого есть в наличии. Однако это совсем новое семейство, пока что все дистрибьюторы его не привезли.

Лично мне больше всего нравится вариант на MAX 10. Он имеет одно преимущество: не нужно загружать конфигурацию FPGA при старте. В варианте на Cyclone 4 нужно будет загружать конфигурацию FPGA, что можно сделать либо с помощью дополнительной микросхемы конфигурационной памяти, либо с помощью микроконтроллера. Есть ещё третий вариант: прошить через JTAG и никогда не снимать питание с чипа. Я слышал, что кто-то так делал, не знаю, шутка это или нет, но я так делать точно не буду.

Впрочем, у варианта с прошивкой Cyclone 4 через микроконтроллер есть преимущество: возможность обновлять прошивку FPGA через пользовательские интерфейсы: USB, Ethernet, etc.

Возможен ещё один нетривиальный вариант: вообще не ставить микроконтроллер, а прошить в FPGA какой-либо встраиваемый процессор. Но это не очень хороший вариант, возможно, т.к. при этом однозначно понадобится внешнее ПЗУ и ОЗУ, а также, как минимум, мост USB. Заведомо отказываться от этого варианта не нужно, конечно, но он мне кажется более сложным в реализации, чем с микроконтроллером.

Про то, какие функции выполняет эта прошивка, я напишу в следующем посте.
Tags: fpga, verilog
Subscribe

Recent Posts from This Journal

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 32 comments

Recent Posts from This Journal