
Этот проект возможно будет самым простым для нашей платы Марсоход2.
Он реализует несколько несложных функций, с которыми каждый разработчик, даже начинающий, сможет легко разобраться.
Для чего нужен этот проект (проект выполнен в среде Altera Quartus II).
Во-первых, он будет служить базой для всех последующих проектов. Важно то, что в нем уже сделаны все назначения входных и выходных контактов согласно схеме платы. Названия входов и выходов этого проекта соответствуют названиям пинов в схеме платы.
Схему можно скачать здесь:
Пожалуйста обратите внимание, что некоторые пины в чипе Cyclone III имеют двойное назначение. Чтобы их можно было использовать как обычные I/O нужно поставить соответствующие опции в диалоге Device and Pin Options.
Наоборот - если понадобится специальное применение этих пинов, то нужно менять эти опции.
Например, контакт DCLK может использоваться для конфигурирования ПЛИС из внешней конфигурирующей флеш памяти, или может использоваться, как обычный пин I/O.
Это диалоговое окно можно увидеть через команды меню Assignments => Device. Далее в диалоговом окне - кнопка Device and Pin Options.
Итак, все важные назначения уже сделаны (они хранятся в файле cyclone.qsf). Когда будем создавать новые проекты, будем просто копировать проект этот в новую папку и модифицировать его.
Во-вторых, для начала работы всегда нужен самый простой проект.
Нужно что-то вроде традиционного для языка C проекта "Hello, World!". У нас здесь, конечно не язык C, но первый пример, конечно, должен быть простой.
Так вот, этот проект содержит три весьма простых составных части.
Первая часть - счетчик.

Входной сигнал тактовой частоты CLK100MHZ подается на 32-х битный двоичный счетчик LPM_COUNTER, где происходит деление тактовой частоты. Входные сигналы от двух кнопочек платы KEY0 и KEY1 подаются соответственно на асинхронный сброс aclr и разрешение счета cnt_en счетчика LPM_COUNTER. Только четыре выхода счетчика q[25..22] подаются на выходы LED[3..0] проекта и соответственно на светодиоды платы.
Таким образом, после загрузки проекта в ПЛИС, светодиоды платы начинают мигать согласно счету.
При этом, плата реагирует на нажатие кнопочек: счет обнуляется или останавливается, в зависимости какую кнопку нажмешь.
Вторая часть проекта - loopback последовательного порта.

На плате Марсоход2 установлен программатор MBFTDI, построенный на микросхеме FTDI FT2232H. Микросхема имеет 2 канала: интерфейс А и интерфейс В. Интерфейс А используется под JTAG, через него идет программирование платы, загрузка проекта в ПЛИС и отладка. Интерфейс В может использоваться различными способами (в зависимости как запрограммирована микросхема FTDI).
Самый простой способ использования - как последовательный порт (виртуальый последовательный порт через USB). В этом случае контакты в нашем проекте FTDI_BD0 и FTDI_BD1 служат сигналами последовательного порта RX и TX. Так вот, в этом простом проекте я просто соединяю их проводом и это все. Все принятые данные тут же отправляются назад.
Когда плата Марсоход2 подключена к компьютеру и драйвера FTDI установлены в диспетчере устройств видны 2 COM порта. Второй COM порт можно открыть с помощью какого нибудь терминала, вроде PUTTY и пробовать набирать к консоли символы. Они будут отправляться в плату и возвращаться из нее назад, появляясь напечатанными уже в консоли терминала.
Это - основа всех проектов, которым нужны связь с компьютером, через последовательный порт.
Третья часть - видео синхрогенератор.
Я написал на Verilog простой модуль hvsync, который выдает сигналы синхронизации VGA_HSYNC, VGA_VSYNC для VGA и собственно видео сигналы красный VGA_R, зеленый VGA_G, синий VGA_B, которые рисуют вертикальные цветные полосы на экране.
Параметры видеосигнала соответствуют стандартному видеорежиму 1440x900 60Hz.
Для этого видеорежима нужна специальная тактовая частота 106,5Mhz, которой изначально на плате нет - есть только генератор 100Мгц. К счастью, в FPGA Cyclone III есть специальные встроенные компоненты - PLL (Phase Lock Loop). Их в нашей микросхеме два.
PLL - это управляемый настраиваемый генератор. Он позволяет нам задать для исходной частоты два коэффициента: умножитель и делитель. Так вот, я создал для своего проекта компонент PLL с коэффициентами умножения 213 и деления 200!!! Получилась заветная 106,5Mhz частота, нужная для режима монитора 1440x900 60Hz.
Конечно, такой возможности у нас не было в первой плате Марсоход.
На новой плате возможностей гораздо больше: PLL, встроенные блоки памяти, умножители.
Вот так выглядят полосы на экране монитора:

Преобразование из цифры в аналоговый сигнал делается установленными на плате R2R преобразователями. Для небольшой разрядности преобразователей аналоговый сигнал получается достаточно качественный. Об этом можно судить по плавным переходам вертикальных полос на экране монитора.
Итак, для загрузки откомпилированного проекта в плату ничего на не нужно, кроме самой платы, подключенной к ПК. Программатор MBFTDI у нее уже на борту.
Откомпилированная программа занимает почти ничего в ПЛИС (меньше одного процента!):

Значит у нас еще много осталось места в чипе для творчества.
Весь проект Quartus II для платы Марсоход2 можно скачать:


У микросхемы с платы Марсход2 EP3C10 в TQFP144 корпусе снизу этого корпуса есть металлический контакт (5мм на 5мм примерно). Куда его нужно подключать? Что-то нигде не могу найти эту информацию. Спасибо.
на всех сигналах микросхем последовательно стоят резисторы. Это должно уберечь плату от непреднамеренно го замыкания выводов и сильных токов. Спалить плату конечно можно, но это нужно постараться.
Дело в том, что я слегка побаиваюсь убить плату неверным подключением или подключением слишком мощной нагрузки, и я прошу вас подсказать, как можно сделать защиту от выхода из строя ?
В данном случае конденсаторы на 1u по питанию, немного сглаживают колебания. Cyclone сама по себе не капризная и при питании от USB компьютера через линейный преобразователь можно обойтись и без этих конденсаторов. У Alter`ы есть программки в excel для подбора конденсаторов. Но если Вы самостоятельно не собираетесь разводить платы, эти знания Вам не нужны. Обратите больше внимания на внутренности самой ПЛИС.
Процитировал то, как они обозначены на схеме в pdf'ке.
Какую в принципе функцию они выполняют?
Я, пока, увы, далек от этого и разбираю назначения каждого компонента используемого в марсоходе2
Глупый вопрос.
Зачем столько 1Mf кондеров в марсоход2?
Вопрос действительно так себе. Во-первых, Вы написали один Мега фарад (1Mf), а нужно одни микро Фарад (uF), обязательно с большой буквы, ведь это от фамилии ученого! И нужны они их столько, потому что пинов питания еще больше!
Зачем столько 1Mf кондеров в марсоход2?
В первом блоке always строка: hsync
В первом блоке always строка: hsync
А на моей плате с циклоном 4 нет этих резисторов.
Сгорит чип?
потому что шина данных двунаправленная , этими линиями будут управлять и плис и sdram и управлять они должны по очереди согласно спецификации sdram. При непреднамеренно й ошибке в проекте в плис данные могут быть выставлены одновременно с данными идущими от sdram и это будет не хорошо, сигналы конфликтуют. Вот эти резисторы на шине данных будут ограничивать ток в случае конфликта на шине.
Все нормально. Нашел ошибку)
Поправка loopback))
Отвечу сам себе :) Необходимо поменять параметры модуля hvsync в соответствии с документом "VESA and Industry Standards and Guidelines
for Computer Display Monitor Timing" (гуглится). К тому же, необходимо проинвертироват ь сигналы HSYNC, VSYNC (я это сделал после модуля hvsync).
попробуйте сравнить текстовые файлы *.QSF (quartus settings file) нашего и вашего проекта
- наверняка найдете отличия в настройках проекта, которые влияют на компиляцию
Error (176208): Design has 94 pins, but Fitter can't place 3 pins
Error (176210): Can't place pin ADC_D[0] with I/O standard 2.5 V, Termination setting Off, and PCI I/O setting on due to device constraints
Error (176207): Can't place pin ADC_D[0] in I/O bank 1 due to the following reasons
Error (169187): Following feature(s) of I/O pin ADC_D[0] has invalid setting(s) in the configuration scheme ACTIVE_SERIAL when the pin is placed at pin location 6
некоторые пины в кристалле двойного назначения. Может в этом дело?
Посмотрите в Assignments => Device.
В диалоговом окне кнопка Device and Pin options и в новом окне: Dual Purpose Pins.
У меня тоже нет ошибок в скаченном проекте. Ошибка возникла при самостоятельном его повторении. Кристалл выбран правильно, перепроверял несколько раз, все пины пересчитал. Попробую заново переделать проект, может поможет. Спасибо за помощь
Похоже вы подключили 92 пин, а он является служебным (Conf_Done), не предназначен для ввода/вывода (I/O).
Error (176205): Can't place 92 pins with 2.5 V I/O standard because Fitter has only 88 such free pins available for general purpose I/O placement
Error (176204): Can't place pins due to device constraints
Error (171000): Can't fit design in device
Подскажите, что не так, я уже всё перепроверил, может что-то в настройках пинов?
Подключить дисплей, память и клавиатуру к Cyclone не проблема. Но я так понимаю, вам нужно устройство с уже готовой прошивкой.Через полгода планирую сделать подобное устройство. Если получиться и будел для вас еще актуально, обязательно поделюсь проектом.
Ну за 5-6 т.р. мог бы себе позволить.
За сколько готовы купить подобное устройство?
может не совсем в этот раздел, но как первый запуск
пин 105 на плисе, не могу его перевести в 1 если в конфиге стоит use as programming pin, и не могу опустить в 0 если стоит use as regular I/O.
Подскажите плиз я уже спалил этот порт или, что то не так программирую? 101 работает нормально
NIOS не пробовали но наверное будет работать.
Смотрю на плате стоит SDRAM+FPGA... Будет ли работать NIOS на этой плате? Может пробовали...?
Если не сложно, дайте, пожалуйста, ссылку на источник и где можно купить.
Наверное у вас спецификация устаревшая, в последней на LM1117:
"Three Terminal Adjustable(ADJ) or Fixed 1.2V, 1.5V,
1.8V, 2.5V, 2.85V, 3.3V, 5.0V"
Отличия только в маркеровке элемента: LM1117-X.X , где X.X = Output Voltage = 1.2V, 1.5V, 1.8V, 2.5V, 2.85V, 3.3V, 5.0V
С обратной стороны практически ничего нет - генегатор на 100м и пара десятков блокировочных конденцаторов.
Прошивка в циклоне после пропадания питания не сохраняется. Для ее хранения нужно отдельное ПЗУ. На самом Марсоходе2 она не предусмотрена, но обязательно будет на шилдах.
Если есть возможность, делайте уровни 2.5в, это будет правильнее
Появились вопросы собственно по железке (схемотехника) Марсохода 2.
Задаю здесь потому как на рекламной страничке платы нет почему-то возможности комментировать.
Как обвязать чип Циклона-3 чтоб он нормально функционировал и был правильно подключен, я смотрел схему Вашей платы и еще нашел вот эту страничку forum.ixbt.com/.../ . Ну и конечно же наткнулся на некоторые противоречия.
1 - в Марсоходе все подтяжки на 3.3в а по выше приведенной ссылке пишут что нужно на 2.5в.
2 - в Марсоходе программатор работает с Циклоном-3 при помощи 3.3 вольтовых уровней, а по ссылке указано что нужен программатор с уровнями 2.5в.
Вопрос, кто прав, Марсоход в своем схемотехническо м решении (и почему), или ребята по выше приведеннй ссылке. Может правильны оба варианта. Мне тоже кажется решение с 3.3в проще и приятнее, но на "комфорт" чипа вынужден обращать внимание...
На не отвеченные же вопросы исчерпывающие ответы нашол вот сдеся: marsohod.org/.../
Советую новичкам не тягаться с SDRAM, ибо она совсем уж не проста, даже сложная FPM-EDO-DRAM на много проще будет (ну это конечно же субъективное мнение)
О резисторах для ЦАПа здесь - marsohod.org/.../...
Резисторы на SDRAM, для подстраховки от ошибок и
нужны, как-раз в учебных проектах, чтобы ничего не спалить, а в "серьезных" проектах их можно не ставить.
Если я понимаю правильно, то проект с FiFo уже в МАХ-2 не воткнуть, нужны чипы с ОЗУ (Циклон). Думал, если не нужна высокая скорость обмена данными то можно и вот так. Во время кадрового гасящего писать в память и тактировать ее от источника. Источник -АРМ будет знать об этом гасящем по прерыванию, время обмена внутри гасящего будет лимитировано (таймер АРМ-а). для обмена данными в место FiFO можно использовать обычный регистр с флагом свободен/занят, это аналог того же FiFo, только с глубиной в одно слово.
Мне кажется, что в реальном проекте использования FIFO не избежать. В память видеоадаптера еще ведь и писать нужно. Невозможно только непрерывно читать.
(после команды изменения строки команда чтения, и данные только появятся через 2 такта, ну получится ведь дыра на изображении в несколько пиксель пока идет борьба с автоматом SDRAM-ки)?
В проекте Фоторамки к Марсоходу цепляли память вроде как 1024-колоночную а вот в Марсоходе-2 почему-то меньше 1024.
Неужели нужны будут усложнения конструкции узлами FIFO и увеличения клока памяти ?
У меня несколько вопросов, касательно SDRAM и RGB-DAC.
Почему в RGB-DAC применили вместо 75-Омников 82 Ом ?
Это только из соображений наличия или есть какой либо технический нюанс ?
Я сделал 4-битники с 150 и 75 Ом, и 5в (EPM7128), но изображение темновато, на переходах в градациях есть полосочки (артефакты) которые сильнее всего заметны не на основных цветах а на "смесях".
Не многовато 82 Ом для шины данных SDRAM-ки ?
Может лучше 50 или 75 Ом ?
Можно вообще включать SDRAM-ку без этих резисторов на прямую хотя бы в учебном макете (не в "серьезной" конструкции) ?