Здравствуйте, Codealot, Вы писали:
C>Мне такая навороченная не нужна, и стоит дофига
C>А поставить слот сильно сложно?
Не то, чтобы сложно, но эти модули физически здоровые, а потому требуют бОльшую плату, которая стоит бОльших денег. Поэтому-то большинство моих шестислоек 10х10 см или меньше — место на многослойках очень дорогое, и чем сложнее плата — тем дороже. Как ты понимаешь, разместить коннекторы под модули длиной в ЕМНИП 133 мм на плате 10х10 см как-то не выйдет.
Как компромисс, можно попробовать использовать SODIMM, но у них ЕМНИП 8 Гб потолок, да и это только в двухранговом режиме, который снижает максимальную частоту (впрочем, для Spartan-7/Artix-7 это несущественно, т.к. они могут крутить память максимум на 400 МГц). Правда, большинство коннекторов SODIMM "лежачие" или "полулежачие", а потому меньшую длину (по сравнению с "полным" UDIMM) футпринта компенсируют его бОльшей шириной.
Здравствуйте, Codealot, Вы писали:
C>Кстати, что касается USB3 и FT600/FT601 — а как у них передача данных туда и обратно выглядит со стороны хоста?
Со стороны компа? Есть либы, поставляемые FTDI, для C/C++ и дотнета (мож есть ещё для чего — хз). Код выглядит примерно так (пишу по памяти, так что за 100% верность не ручаюсь, но порядок операций таков):
//получаем список всех подключённых девайсов по некоторому критерию (серийный номер, имя девайса, и т.п.)var allChips = EnumerateDevicesBySomeCriteria(criteria);
// выбираем нужныйvar deviceInfo = allChips[selectedIndex];
//инициализируем соединениеvar device = new device(deviceInfo);
//усё готово, можно отправлять/принимать данные
//....
obj.Send(buffer);
//или
obj.Receive(buffer);
Здравствуйте, koandrew, Вы писали:
K>Не то, чтобы сложно, но эти модули физически здоровые, а потому требуют бОльшую плату, которая стоит бОльших денег. Поэтому-то большинство моих шестислоек 10х10 см или меньше — место на многослойках очень дорогое, и чем сложнее плата — тем дороже. Как ты понимаешь, разместить коннекторы под модули длиной в ЕМНИП 133 мм на плате 10х10 см как-то не выйдет.
Интересно, а если сделать плату на 4-5 см длиннее при той же ширине? Раза в полтора дороже?
Здравствуйте, Codealot, Вы писали:
C>Интересно, а если сделать плату на 4-5 см длиннее при той же ширине? Раза в полтора дороже?
Меньше, чем в полтора, но разница ощутима. Хотя 5 см думается будет маловато, учитывая, что разъём имеет длину в 150 мм, плюс нужно оставить хотя бы по 1-2 см по краям на разводку.
Здравствуйте, koandrew, Вы писали:
K>Меньше, чем в полтора, но разница ощутима. Хотя 5 см думается будет маловато, учитывая, что разъём имеет длину в 150 мм, плюс нужно оставить хотя бы по 1-2 см по краям на разводку.
Кстати, подумалось — а нельзя разместить его снизу платы?
Здравствуйте, Codealot, Вы писали:
C>Я имею в виду двусторонний монтаж. Если использовать к примеру горизонтальный разъем для SODIMM и припаять его с нижней стороны платы.
Под FPGAшкой находятся куча фильтрующих кондёров, плюс сама разводка там очень плотная, так что не факт, что удастся всё развести без увеличения количества слоёв. А если потребуется увеличение количества слоев до 10 (потому что 8-слойка имеет такое же количество сигнальных слоёв, как и 6-слойка), то это будет намного дороже, чем если просто сделать плату больше.
Здравствуйте, Codealot, Вы писали:
C>А если немного в стороне?
Не пробовал. Возьми да попробуй Если не знаешь, как получить распиновку памяти на FPGA — создай отдельную тему, я покажу, как сам делаю. Ну или RTFM — UG586, раздел Design Guidelines, DDR3 SDRAM (в текущей версии страница 192 и дальше по тексту).
Здравствуйте, koandrew, Вы писали:
K>Не пробовал. Возьми да попробуй Если не знаешь, как получить распиновку памяти на FPGA — создай отдельную тему, я покажу, как сам делаю. Ну или RTFM — UG586, раздел Design Guidelines, DDR3 SDRAM (в текущей версии страница 192 и дальше по тексту).
Здравствуйте, Codealot, Вы писали:
C>Какое-нибудь не слишком хардкорное введение в то, как работают FPGA на уровне схемотехники. И как разрабатывать PCB.
Я пользовался UG483 + генератором чеклистов XMP277 + подсматривал в схемы готовых платок, которые сумел найти в сети.
По большому счёту у интеграции FPGA на плату есть три аспекта: 1) обеспечение питания, 2) обеспечение успешной "загрузки" FPGA битстримом из какого-то внешнего источника 3) подключение внешней периферии.
1. Чипы Artix-7/Spartan-7 требуют две обязательных линии питания: питание "ядра" Vccint (почти всегда 1.0 ± 5% В), и "вспомогательная" линия Vccaux в 1.8 ± 5% В. Есть ещё отдельные шары для питания блочной памяти (BlockRAM) Vccbram, но во всех известных мне случаях их подключали к той же линии, что и ядро, ибо им тоже нужно 1.0 ± 5% В.
Тут основная сложность — чип может потреблять довольно значительный ток по линии Vccint (порядка нескольких ампер), потому линейные регуляторы "не катят" (прикинь, какая мощность будет рассеиваться на типовом LDO при входном напряжении даже в 5 В, а выходном — 1 В при токе в 2 А!), так что нужны импульсники, да не абы какие, а такие, которые могут обеспечить требуемую точность (5%) по напряжению во всём диапазоне потребляемого тока, и при этом обладающие низким уровнем шума и пульсаций (меньше 50 мВ пик-пик в диапазоне 0-20 МГц). Косяки с этим конвертером — чуть ли не самая популярная причина неработоспособности свежеразработанной платы. Так что я при использовании каждого нового для себя чипа конвертера DC-DC обязательно сначала делаю маленькую платку только с этим конвертером (и его обвязкой, само собой), и проверяю, что он работает как положено, либо на первом экземпляре платы собираю только эти источники и убеждаюсь, что все нужные напряжения присутствуют и их параметры соответствуют требованиям.
2. FPGA имеет кучу разных способов загрузки, но на практике чаще всего применяются два — загрузка с чипа QSPI Flash, либо через JTAG, причём последний метод всегда активен вне зависимости от настроек, выставленных на пинах конфигурации. За подробностями идти читать UG470. Собственно, с точки зрения схемотехники здесь важно правильно всё подключить, возможных gotchas тут два — неверная установка пинов типа загрузки (M0-M2), а также несоответствие логического уровня на шаре CFGBVS напряжению конфигурации. Самый простой способ — посмотреть, как это сделано на какой-нить из существущих и заведомо рабочих плат, и сделать также Я так и сделал изначально, потом только незначительно корректировал эту часть схемы под фактические условия (например, если хотелось использовать 1.8-вольтовую флешку вместо стандартной 3.3-вольтовой)
3. Это отдельная и очень обширная тема, так что двумя словами тут обойтись, а также бездонный источник проблем типа "FPGA определяется и грузится, но не "видит" какой-то периферийный чип". В самом минимальном изложении это так: все пользовательские шары FPGA (user I/O) разделены на банки по 50 шаров, и для каждого из этого банков можно индивидуально выбрать напряжение питания и, соответственно, напряжения логических уровней. Про всё это очень обстоятельно и подробно написано в UG471.
Как-то так. Очень тяжело общими словами объять такие обширные темы, так что если вдруг есть конкретные вопросы — задавай.
Здравствуйте, koandrew, Вы писали:
K>подсматривал в схемы готовых платок, которые сумел найти в сети.
Можешь поделиться? Я уже нашел кое-какие, но там все простые платы — только на Lattice, а на Xilinx только сложные, и все схемы в формате картинок или pdf
K>Как-то так. Очень тяжело общими словами объять такие обширные темы, так что если вдруг есть конкретные вопросы — задавай.
Просто я надеялся, что есть какие-то книги. А так, для начинающих — много, хардкора — тоже много, а в середине ничего нет.
Здравствуйте, Codealot, Вы писали:
C>Можешь поделиться? Я уже нашел кое-какие, но там все простые платы — только на Lattice, а на Xilinx только сложные, и все схемы в формате картинок или pdf Image: horror.gif
Посмотри на сайте Digilent: Arty A7, Arty S7, Arty Z7 — нажми кнопку "Schematic". Все эти платы довольно просты для FPGA.
Само собой они в PDF — а в чём ещё тебе нужно?
C>Просто я надеялся, что есть какие-то книги. А так, для начинающих — много, хардкора — тоже много, а в середине ничего нет.
Да нету ничего в разводке под FPGA такого особенного, отличающегося от разводки аналогичного интерфейса для процессора или SoC, потому бери книги, где обсуждаются вопросы разводки высокоскоростных интерфейсов вообще — эта информация будет применима в равной степени как к FPGA, так и к любым другим чипам, реализующим такой же интерфейс. Ничего сложного в этих разводках нету, просто надо соблюдать определённые правила.