Подключение плис к компьютеру

Обновлено: 04.07.2024

Тема эта очень сложная, но с другой стороны очень полезная и нужная. У меня одна статья была про USB протокол вообще, а вторая – это был уже первый проект USB для платы Марсоход. Хорошо бы, чтоб Вы сперва прочитали те статьи. Тогда и эту будет легче понять. К сожалению в том первом проекте не все было сделано достаточно хорошо, и вот, потратив еще немного времени, мы выпускаем следующую версию проекта низкоскоростного устройства USB для нашей платы Марсоход.
Что было улучшено?

  • Десктипторы и всякие другие пакеты раньше кодировались в логике, а теперь перенесены в UFM (User Flash Memory) чипа. Это позволило освободить немного места в чипе и сделать дескрипторы «длиннее и осмысленней».
  • Теперь мы предлагаем Windows драйвер для нашего устройства!
  • Теперь устройство должно правильно распознавать назначение USB адреса, а значит, может работать через USB хабы без конфликтов с другими устройствими.
  • Были исправлены ошибки связанные с «bit stuffing»
  • Теперь в наше устройство можно не только писать, но и можно читать из него!

Итак, попробую описать мой проект.

В этом проекте USB сейчас всего 5 модулей. Это модуль чтения пакетов из флешки чипа pkt_reader , модуль altufm_none0 , который представляет флеш память чипа и встроенный генератор (около 5Mhz), USB приемник ls_usb_recv , USB передатчик ls_usb_send , и ядро USB функции ls_usb_core .

Схема проекта USB устройства на ПЛИС платы Марсоход

1. Чтение USB пакетов из UFM.

Чип CPLD, который установлен на плате Марсоход имеет встроенную флеш память небольшого объема – всего 512 шестнадцатибитных слов. Это не много, но вполне достаточно для хранения всяких USB descriptors – описателей USB устройства. Как я уже писал в предыдущих статьях, при подключении USB устройтва оно должно быть распознано системой. Операционная система определяет тип устройства, его название, серийный номер (если есть) читая эти описатели из устройства. Кроме того, устройству назначается USB адрес, который оно должно использовать во время работы. Для всех эти обменов данными в обе стороны нужны зараннее заготовленные пакеты. Мы разместили все пакеты дескрипторов в этой флеш памяти UFM в специальном формате.
Например, вот фрагмент файла table2.mif, который описывает содержимое флеш:

-- Descriptor String Serial Number
01e0 : 4b8d;
01e1 : 0312;
01e2 : 0030;
01e3 : 0030;
01e4 : 0030;
01e5 : d112;
01e6 : 0000;
01e7 : 0000;

Пакет дескриптора описан так, как он будет передаваться в USB шину: байт за байтом, от первого байта PID, до последних двух байтов контрольной суммы включительно. Единственное исключение – нулевой байт описателя. Младшая тетрада обозначает длину передаваемого пакета. Вместо этого нулевого байта всегда будет посылаться, как положено байт SYN == 0x80, обозначающий начало пакета.
Кроме этого, в самом начале файла table2.mif имеется 32 специальных коротких пакета – это те пакеты, которые мы сможем читать из нашего устройства как "полезные данные". Я решил, что нужно сделать возможным чтение состояния 4-х кнопочек платы Марсоход. Четыре кнопочки – это 16 комбинаций. Но поскольку передача пакетов по шине USB нумеруется как четный-нечетный, то всего нужно «заготовить» уже 32 пакета. Таким образом, когда программа на компьютере захочет прочитать состояние кнопочек платы, она посылает запрос на чтение и наше USB CORE сразу знает адрес флеш памяти для ответного пакета – адрес прямо определяется 4-мя битами кнопок плюс один бит четности. Зараннее заготовленные пакеты хороши тем, что не нужно делать логику по подсчету контрольной суммы USB.

Исходный текст модуля чтения пакетов из флешки можно посмотреть здесь.

2. Модуль USB приемника.

В этот модуль были внесены несколько важных изменений. Во-первых, исправлена ошибка приема при «bit stuffing». Во-вторых, добавлено детектирование сигнала сброса шины USB. Конечно, оно несколько примитивное, но вполне работоспособное. У меня сигнал usb_reset появляется если обе линии USB DP и DM находятся в нуле более 16 тактов. Это конечно не 10мс, как по USB спецификации, но такое решение работает. Сигнал USB сброса важен для правильного назначения USB адреса устройству.

Приемник не работает, когда наше устройство само что-то передает. То есть мы не принимаем свои же данные. Это сделано с помощью входного сигнала enable (инверсия от bus_ enable ).

Принятые байты выдаются на шине rdata[7..0] по сигналу rdata_ready . Кроме того, номер принятого байта в принимаемом пакете выдается по шине rbyte_cnt[3:0] . Все эти сигналы подаются на вход USB CORE, которое и решает, что же дальше нужно делать.

Вот исходный текст модуля на Verilog. Зараннее хочу попросить прощения у некоторых возможных критиков. В этом модуле кое-где используется ассинхронный сброс триггеров не по прямому назначению (приведение схемы в исходное состояние после включения питания), а для непосредственной работы приемника. Это сделано умышленно с единственной целью экономии места в чипе. Все таки у меня не очень тривиальная задача сделать правильно работающее устройство в 240 логических элементах ПЛИС. Пришлось реально поломать голову как разместить всю логику, чтобы еще и на будущее развитие осталось.

Здесь можно посмотреть как USB приемник работает, его временные диаграммы (кликните на изображении, чтобы увеличить):

сигналы в модуле USB приемника

3. Модуль USB передатчика.

Передатчик простой. По сигналу start_pkt начинается передача первого байта. Включается сигнал bus_enable и двунаправленная шина USB переключается на передачу от нашего устройства к хосту. Передаваемые данные подаются в передатчик по шине sbyte[7..0] . Когда передатчику требуется следующий байт пакета он выставляет сигнал show_next и USB CORE должно предоставить этот следующий байт на шине sbyte[7..0] . Так же, USB CORE должно зараннее уведомить передатчик о последнем байте в пакете сигналом last_pkt_byte . Когде передан последний байт, передача завершается состоянием SE0 (сигналы DP и DM в нуле в течении двух периодов передающей частоты 1,5Mhz) и затем снимается сигнал bus_enable , шина переводится в направление «на прием».

Временные диаграммы (кликните на изображение, чтобы увидеть крупнее):

Сигналы модуля USB передатчика платы Марсоход

Вот еще крупнее:

Сигналы модуля USB передатчика платы Марсоход

4. Модуль USB CORE, определяет всю логику устройства.

Самое главное предназначение этого модуля – распознавать принятые от хоста пакеты и решать, что с ними делать дальше, возможно отвечать своими пакетами в нужной последовательности. Именно этот модуль определяет когда и какой пакет из какого дескриптора посылать. Этот модуль вырабатывает запрос на чтение пакета из флешки и передает считанные данные в передающий модуль. Адрес пакета во влеш памяти UFM определяется типом запроса от хоста.

Еще одна необходимая и важная функция этого модуля – правильная реакция на назначение USB адреса. Устройство не должно ничего отвечать, если запрос от хоста идет для другого адреса. Такое возможно, если устройство подключенно через USB хаб.

5. Драйвер устройства и пользовательская программа.

Поскольку мы решили все сделать как можно правильней, то нам, конечно, нужен драйвер к нашему устройству. Написание драйверов операционной системы Windows - это отдельная и сложная тема. Скажу лишь, что в данном случае мы не написали ни строчки кода. Мы взяли пример драйвера USB устройства из пакета Microsoft Windows Driver Developer Kit . У меня сейчас стоит версия WINDDK 2600.1106. Возможно (наверняка) есть и более свежий пакет разработчика драйверов от Microsoft. Поищите на сайте Microsoft.
В том DDK, что есть у меня, я нашел пример прототипа драйвера в папке c:\winddk\2600.1106\src\wdm\usb\bulkusb
В этой папке есть пример драйвера bulkusb.sys и пример пользовательского приложения, которое читает из устройства или пишет в него RwBulk.exe .
Я просто откомпилировал эти программы и их сразу можно пытаться использовать и нашим устройством. Правда есть одно небольшое «но». Сперва нужно установить драйвер в ОС и для этого нужно иметь INF файл.
В примере Microsoft есть и пример INF файла. Он нам, в общем, подходит. Только нужно заменить в нем строку описывающую идентификатор производителя устройства и идентификатор устройства. Эти параметры напрямую определяются USB дескрипторами устройства – а они у нас записаны во флеш памяти.

Наша строка должна выглядеть вот так:

Для нашего устройства мы взяли idVendor = 0x9FB (Altera) и idProduct=0x60A5. Эти числа стоят в нашем Configuration Descriptor.

Итак. Компилируем наш проект. Прошиваем плату Марсоход. Подключаем провод с разъемом USB к плате. Подключаем плату к USB порту компьютера. Появляется окно «Найдено новое устройство». Далее следуете указаниям в этом окне. Установка драйвера вручную. Указываете путь к INF фйлу и путь к драйверу bulkusb.sys . Все. Драйвер установлен. В этом легко убедиться, если зайти в диспетчер устройств:

USB устройство плата Марсоход виднав диспетчере устройств компьютера

Для работы с устройством я написал (Microsoft Visual Studio v6.0) простую тестовую программу. Она позволяет зажигать на плате Марсоход светодиодики и читать состояние кнопочек платы.

Программа для работы с платой Марсоход через USB

Теперь у нас все сделано более правильно. Чтобы зажечь светодиод программа пишет в устройство. Передача туда идет на USB Endpoint = 2. Чтение из устройства идет на USB Endpoint =1.

Исходные тексты драйвера, INF файла и этой программы Вы найдете в архиве вместе с проектом Altera Quartus II для платы Марсоход:

Вот подключаем нашу плату к ноутбуку через USB хаб.

Плата Марсоход с функцией USB

К этому же хабу подключена USB мышь. Так проверяем, что наше устройство работает через хаб не конфликтуя с другими устройствами.

Вот на этом видео это то же видно. Я могу зажигать светодиоды на плате нажимая чекбоксы в программе. Когда нажимаю кнопочки на плате Марсоход, то программа это видит и меняет имя кнопочки на экране.

Вот так. Надеюсь на базе этого проекта скоро мы сможем показать вам еще много интересных вещей.

Всем здрасьти:) Выдали задание на Микропроцессорные системы - сделать ЮСБ контроллер на основе ПЛИС (Cyclone III). Задание мне кажется вообще диким потому что

во первых это даже не курсовая и ни диплом и даже не лаба а всего лишь практика на которую дали месяц.
во вторых что такое плис представление имею, но даже в руках никогда не держал это и чтобы вот так вот сходу чего то сделать на нем как-то затрудняюсь мягко говоря, тем более стенда с ЭТОЙ ПЛИС нету ни на кафедре ни у меня и сомневаюсь что стоит он копейки, задание короче - почитай буржйскую документацию и как нибудь чего - то сделай.

С ВХДЛ работал немного, но опять же никаких прошивок, а только эмуляция работ мультиплексоров, счетчиков и логических схем, то есть как писать прошивку для реальной плис тоже слабо представляю.

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

Мнда. На учёбе что, даже в какой-нибудь лаборатории для практики нет ничего типа вот такого ?
Если нету, тогда либо придётся по потеть этот месяц, причём обильно , либо менять задание.
Пугать не буду.
1) Младший Циклон 3 (EP3C5E144) в моём городе стоит около 700р.
2) Самый простой корпус у него типа TQFP144.
3) Требует три питания: ядро 1.2в, PLL 2.5в, периферия от 1.2в до 3.3в. Источники легко делаются на lm317. В обязательном порядке "куча" блокировочных конденсаторов, хотя бы как рекомендовано в спецификации. Плата минимум двухслойная, нужно заказывать, или с фоторезистом делать, ну или вы магистр-джедай ЛУТ-а
4) 5 вольт на входах-выходах не терпит.
5) Для хранения прошивки нужна внешняя специальная микросхема флэш-памяти. Можно без неё, но тогда при включении надо обязательно программировать с внешнего источника (программатора, микроконтроллера), при выключении, соответственно, всё "забывается".
6) Нужен программатор. Можно такой. Можно самому поискать собрать ByteBlaster2. ByteBlasterMV можно, но обязательно надо иметь стыковку с логическими уровнями (см. выше напряжение периферии). Можно поискать на тему вот такого.
7) В чём разрабатывать прошивку: софт тут. Quartus II Web Edition (размер

2-3Гб) и ModelSim-Altera Starter Edition (размер

600Мб), разработка и отладка соответственно.

Вроде основное всё написал.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)

Последний раз редактировалось Kavka Пт мар 11, 2011 13:34:16, всего редактировалось 1 раз.

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Спасибо, Есть подобная плата на которой мы делаем лабы, но она на контроллере от Атмега16, программатор нужен если просто отдельно микросхема плис без платы?, про софт где прошивку делать я в курсе. Как то неохота деньги свои вкладывать из-за препода мудака и программатор паять, еще и самодельное питание делать, походу придется в квартусе тестить работу без реальной схемы если так можно. А можно мне идиоту объяснить что должен делать юсб котроллер сделанный на плис, и где мне взять схему подключения разъема юсб к плис? Препод задание не поменяет я еще радоваться должен по идее, у друга вообще надо прошивку для работы с видеокамерой сотворить на 2м циклоне.

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Это мысля конеш, а что искать usb controller или usb host - это не одно и то же. И все таки над схемку подключения порта юсб к циклону.

Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)

программатор нужен если просто отдельно микросхема плис без платы?
[. мышь буквы погрызла. ]
походу придется в квартусе тестить работу без реальной схемы если так можно.

На той плате, что я ссылочку давал, уже есть программатор. Для собственного устройства, всяко, нужен программатор.

Смотря на чём будете начинку делать/писать. Model-Sim как раз симулятор, понимает всё что понимает Квартус.
Если на Verilog-е или VHDL, то для них есть симуляторы, в том числе и немало свободных.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вы попробуйте поискать на форуме электроники, вроде чтото там подобное пробегало но на Спартане.

_________________
"У принца Лимона всё наоборот: воры и убийцы у него во дворце, а в тюрьме сидят честные граждане" (с) Дж. Родари "Приключения Чипполино"

Из всего вышесказанного и прочитанного за сегодня, получается вот что

Буду использовать Квартус и встроенные средства симуляции.

На "марсоходе" хорошо написано про юсби и есть примерчик для платы марсоход НА плис Altera - EPM240T100С5 на верилоге - проблема я не шарю в верилог и будет ли такая прошивка работать на CYCLONE 3, и это не совсем то - мне нужен контроллер на плис а там реализовано подключение плис к компу и работа уже с его ПК-шным контроллером.

Как я понял берется отдельно плис - к ней коннектится ЮСБ разъем ХОСТ, плис прошивается как контроллер юсб. Теперь встает вопрос куда мне присобачить Юсб разъем, точнее к каким выводам плис и далее как контроллер будет реагировать на подключенное устройство, например флешку(Лампочку присобачить или как?) или я не туда думаю?

На циклоне работать, скорее всего, будет, если не использовано блоков специфичных для CPLD EPM240. Ну и ножки надо "привязать" к циклону (pin assignment). Ножки можно выбрать любые general IO, как будет удобно.

Разъём хост . Вам что, надо хост-контроллер сделать? Есть usb-host (в компьютерах) и usb-device (флешки, клавиатуры, мышки и т.д.). Хост-контроллер обеспечивает только низкоуровневые функции (приём-передача на физическом уровне, в основном) , остальное делает процессор посредством драйверов и прочих программ. Так что насчёт подключения флэшки, что-то не до конца понятно. На сайте марсохода пример usb-устройства. Хост с хостом работать не будет. Обычные usb-устройства друг с другом тоже не умеют работать. USB-OTG устройства могут работать с другими USB-устройствами.
За подробностями можно на википедию сходить, но лучше вот сюда.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)

Спасибо, Есть подобная плата на которой мы делаем лабы, но она на контроллере от Атмега16, программатор нужен если просто отдельно микросхема плис без платы?

Не бзди! Есть такая плата у нас на кафедре, видел кто-то работал и не один раз.

Подскажите пожалуйста, для чего нужна утилита CORE COMMANDER. Знаю только, что её надо устанавливать на QUARTUS||.

Мда, все оказалось не так как я думал, на кафедре есть стенд СoreCommander(плата для разработки на циклон 3 + интерфейс пользователя с жк дисплеем).
прога CoreCommander вроде б утилита для работы с этим стендом.

Так вот для этого стенда мне нужно нарисовать схему подключения его юсб порта на плате.

И написать прошивку для стенда, Юсб контроллер, по объяснениям препода я вроде понял что нужно просто либо подключить стенд к компу и на дисплее стенда выдавать чего-то. Или флешку подключить и также чего-то по этой флешке на дисплее высвечивать.

Есть у меня Демо - идет с самой программой коркоммандер(usb host mass storage), в нем вроде только прошивка без исходника которую можно залить(.sof, .elf файлы и батники какие-то).
Короче вот, не знаю как прошивку писать.

Дак я не понял, Вы что с одного института и даже с одной кафедры? А препод поди тоже в этом форуме засел ? Модераторы извините за оффтоп.

_________________
"У принца Лимона всё наоборот: воры и убийцы у него во дворце, а в тюрьме сидят честные граждане" (с) Дж. Родари "Приключения Чипполино"

Разработка модуля приема/передачи информации через интерфейс ethernet.



Рис. 1: Оранизация подключения через интерфейс Ethernet на отладочной плате

При включении или сбросе, PHY конфигурируется для работы в режиме SGMII с адресом 0b0111. Настройки могут быть модифицированы командами, передаваемыми через интерфейс MDIO. В таблице 1 приведена информация о подключении выводов FPGA к PHY.


Таблица 1: Соединение Ethernet, FPGA к устройству PHY

1 Структура пакета Ethernet


Пакет представлен на Рис 2.

Рис. 2: Формат кадра

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

SOF (Start-of-frame Delimiter, Разделитель начала кадра): двоичная последовательность 10101011, которая служит для разделения преамбулы и следующего за ним поля, а также для окончательной синхронизации приемных станций двумя младшими битами (Стандарт IEЕЕ 802.3).

DESTINATION ADDRESS/SOURCE ADDRESS: (Адрес Ethernet/МАС-адрес) состоит из 12 шестнадцатеричных цифр (48 битов / 6 байтов). Первые 6 цифр МАС-адреса содержат идентификатор производителя (код поставщика – vendor code), который также называют Organizational Unique Identifier (OUI), назначаемый IEEE. Последние 6 цифр назначаются производителем и часто представляют собой серийный номер. Данная структура адреса обеспечивает абсолютную уникальность сетевых устройств.

  • Задержка при передаче – чем больше фрейм, тем дольше длится передача. Для ранних сетей, где Collision домен не ограничивался портом, и все станции должны были ждать завершения передачи, это было серьёзной проблемой.
  • Чем больше фрейм, тем больше вероятность того что фрейм при передаче будет поврежден, что приведет к необходимости повторной передачи, и все устройства в collision домене будут вынуждены опять ожидать.
  • Ограничения, накладываемые памятью используемой под интерфейс буферы – на тот момент (1979г) увеличение буферов значительно удорожало стоимость интерфейса.
  • Ограничение, вносимое полем Length/Type – в стандарте закреплено, что все значения выше 1536 (от 05-DD до 05-FF.) указывают на EtherType, соответственно длина должна быть меньше 05-DC.

2 Разработка модуля передатчика


Приведем назначение сигналов:

  • StateIdle. Состояние ожидания данных для передачи.
  • StatePreamble. Передача преамбулы.
  • StateSFD. Передача октета — разделителя данных.
  • StateHeader. Передача заголовка кадра IEEE802.
  • StateData. Передача данных.
  • StateFCS. Передача контрольной суммы.
  • StateIFG. Межкадровый интервал.

3 Разработка модуля приемника

Интерфейсный модуль, осуществляющий прием данных, имеет следующий заголовок

  • State_idle. Состояние простоя. Ожидание принимаемых данных.
  • State_preamble. Синхронизация по преамбуле.
  • State_SFD. Принят октет — разделитель данных.
  • State_data. Состояние приема данных пакета.
  • State_checkCRC. Проверка контрольной суммы.
  • State_OkEnd. Прием завершен.
  • State_drop. Прекрашение анализа текущего кадра.
  • State_ErrEnd. Ошибка при приеме данных.
  • State_CRCErrEnd. Ошибка контрольной суммы.
  • State_IFG. Межкадровый интервал.



Рис. 4: Упрощенная диаграмма состояний модуля приемника пакета данных

Основной конечный автомат описывается следующим кодом на Verilog:

4 Среда ActiveHDL

Модуль верхнего уровня обеспечивает соединение генератора сигналов, модуля передатчика и приемника.

Диаграмма передачи пакета данных представлена на рис. 5 и рис. 6.

Рис. 5: Временная диаграмма начала передачи пакета с данными

Рис. 6: Временная диаграмма конца передачи пакета с данными

Для реализации модуля приемника/передатчика сформируем IP с использованием CORE Generator.

Рис. 7: Мастер генерации ядра. Шаг 1.

Рис. 8: Мастер генерации ядра. Шаг 2.

Рис. 9: Мастер генерации ядра. Шаг 3.

Рис. 10: Мастер генерации ядра. Шаг 4.

Модуль, формирующий сигналы подключения сформированного IP (gig_eth_pcs_pma_v11_2_block) к разработанным модулям передатчика и приемника gmii.v.

6 Программное обеспечение

Программное обеспечение использует библиотеку WinPCAP для приема и передачи пакетов, передаваемых через интерфейс ethernet.

Подготовим и загрузим в ПЛИС фирмы Altera проект из среды разработки Quartus II.

Для работы нам понадобится:

  • ПЛИС фирмы Altera; ;
  • компьютер со средой разработки Quartus II.

1 Назначение выводов в проекте Quartus II

Первым делом необходимо назначить используемые выводы ПЛИС. В меню Assignements Device… выбираем ПЛИС, в которую вы собираетесь «залить» проект. В группе Device Family нужно выбрать семейство, к которому относится ваша ПЛИС. В поле Available devices выберите модель вашей ПЛИС. У меня, например, это Cyclone II, модель EP2C5T144C8.

Выбираем семейство и модель ПЛИС в окне Device

Выбираем семейство и модель ПЛИС в окне Device

В группе Show in "Available devices" list можно отсортировать устройства по типу корпуса (Package) или по количеству выводов (Pin count), чтобы быстрее найти вашу модель ПЛИС.

Определение состояния незадействованных выводов

Определение состояния незадействованных выводов

После того как указали модель ПЛИС, закрываем окно Device, нажав кнопку OK.

Если вы хотите, чтобы синтезатор сам назначил функции выводам, то можно ничего больше не делать. А для того, чтобы вручную назначить выводы ПЛИС, идём в меню Assignements Pin Planner или нажимаем сочетание клавиш Ctrl+Shift+N .

Запуск инструмента назначения выводов Pin Planner

Запуск инструмента назначения выводов Pin Planner

Запустится инструмент назначения выводов Pin Planner. Внизу отображается список используемых в вашем проекте пинов ввода-вывода с соответствующими именами Node Name.

Инструмент Pin Planner и список вводов-выводов проекта ПЛИС

Инструмент Pin Planner и список вводов-выводов проекта ПЛИС

Теперь в столбце Location нужно задать номера выводов. Дважды кликаем на соответствующей ячейке и выбираем номер вывода, или же вводим с клавиатуры номер. Номера выводов будут зависеть от вашей макетной платы. Например, в моей плате тактовый импульс CLK, согласно мануалу, на 17 выводе, а выходам OUT1…OUT5 я назначу свободные выводы 94, 97, 100, 103 и 93.

Назначаем соответствие выводов ПЛИС сигналам проекта

Назначаем соответствие выводов ПЛИС сигналам проекта

После того, как все выводы были определены, окно планировщика пинов Pin Planner можно закрыть. Теперь скомпилируйте проект: Processing Start Compilation или Ctrl+L .

Запускаем полную перекомпиляцию проекта в Quartus II

Запускаем полную перекомпиляцию проекта в Quartus II

2 Установка драйвера для программатора USB Blaster

Подключим программатор USB Blaster к компьютеру (если у вас его нет, то можно приобрести на Али-Экспресс). При первом подключении необходимо установить драйвер. Он устанавливается стандартным образом, и находится в директории Квартуса, в папке drivers: C:\altera\13.0sp1\quartus\drivers

Установка драйвера для программатора USB Blaster

Установка драйвера для программатора USB Blaster

После установки драйвера, программатор будет отображаться в диспетчере устройств как Altera USB-Blaster.

3 Загрузка прошивки через интерфейс JTAG

ПЛИС фирмы Altera поддерживают несколько режимов программирования. Сначала рассмотрим загрузку прошивки в ПЛИС через интерфейс JTAG. Подключите программатор к разъёму JTAG на плате с ПЛИС.

Запустим инструмент для программирования: Tools Programmer.

Добавим программатор. Для этого нажмём кнопку Hardware Setup… и в выпадающем списке выберем подключённый USB Blaster. Закроем окно Hardware Setup.

Настройка программатора

Настройка программатора

В окне программатора Programmer нажмите кнопку Auto Detect, чтобы Quartus попытался автоматически определить подключённую ПЛИС и файл прошивки *.sof.

Файл прошивки создаётся Квартусом по умолчанию при компиляции и сохраняется в директории output_files, если не задано иное.

В окне Programmer выберите режим JTAG, установите галочку Program/Configure и нажмите кнопку Start. Прошивка будет записана в память ПЛИС.

Загрузка прошивки в ПЛИС через JTAG

Загрузка прошивки в ПЛИС через JTAG

4 Загрузка прошивки в режиме Active Serial

Чтобы прошивка сохранилась в ПЗУ, запишем прошивку в режиме Active Serial.

Подключите кабель программатора к разъёму AS или Active Serial. Запустите программу прошивки: Tools Programmer.

Выберите режим Mode Active Serial. Соглашайтесь при ответе на уточняющий вопрос.

Добавим файл прошивки, нажав кнопку Add File… В поддиректории проекта output_files найдите файл с расширением .pof.

Добавляем файл прошивки в режиме Active Serial

Добавляем файл прошивки в режиме Active Serial

После открытия файла прошивки, установите галочки Program/Configure и, по желанию,остальные.

Загрузка прошивки в ПЛИС в режиме Active Serial

Загрузка прошивки в ПЛИС в режиме Active Serial

Обратите внимание на тип конфигурационной памяти в столбце Device: он должен соответствовать типу памяти, которая установлена у вас на плате.

Проверка с помощью осциллографа результата прошивки ПЛИС

Проверка с помощью осциллографа результата прошивки ПЛИС

Для преобразования и настройки файлов прошивок существует инструмент, который доступен из меню File Convert Programming Files….

Читайте также: