Было так:
Потом так:
Потом эдак:
(про "клювик" припоя на трёхвыводном элементе я уже знаю, щас уберу.. закоротку между двумя выводами ПЛИС тоже уже убрал)
Стало так:
Будет ещё круче, потому что я только начал.
Собираю поэтапно, проверяя всякие там напряжения и сопротивления. Например, на выходе импульсника, где должно быть 1.2В, сейчас реально 1.18В при минимально допустимом (по паспорту ПЛИС, но она может и ещё меньше, где-то до вольта.. только зачем?) 1.14В. Шина Vccaux запитана от обычного LM1117-ADJ (что было под рукой, то и поставил) на 2.5В - потребление невелико, кушать лишнее оно не будет. Обычные 3.3В берутся от управляющей платы, там резервы ещё очень даже есть.
Тактовый генератор - термокомпенсированный, российского производства (
Когда-нибудь ПЛИС будет грузиться по SPI (сейчас пока только с JTAG), но т.к. вывод для клока загрузки - не gpio, а dedicated, понадобилось поставить отдельную схемку, коммутирующую этот сигнал между двумя выводами (можно было, конечно, просто их соединить, но как-то неаккуратетнько). Плюс ещё преобразование уровня 3.3В -> 2.5В. Тоже можно было обойтись, но лучше я поставлю чип за 20 рублей, чем потом буду думать, как бороться с неизвестными помехами.
Попутно выяснил загадочное: оказывается, если вывод PROG_B сидит "в нуле" всё время (а я его зачем-то привязал именно к "земле", хотя надо было подумать заранее!), то - сюрприз!!! - порт JTAG не работает. К счастью, этим выводом может управлять микроконтроллер (и он будет это делать в будущем, когда я реализую загрузку из флешки), поэтому проблема решилась очень просто.
Но потом выяснилось ещё более загадочное.
Чтобы проверить тактовый сигнал и светодиод, я набросал простейший VHDL-код, тупой счётчик-делитель частоты. На входе - такт, на выходе - светодиод, деление на десять миллионов (итого 2 герца, ибо генератор на 20МГц). Ага, не тут-то было: на выходе появилась частота 7.36 мегагерца или что-то около того, немного плавающая во времени. Начал искать причину - и нашёл! Оказалось, я в счётчике забыл прописать условие, собственно, по которому у него должен быть инкремент. Это только в Си и прочих языках программирования вы просто пишете цикл и всё, в HDL всё не так: вам нужен СИГНАЛ, и только с ним вы будете работать. А я этот сигнал забыл подключить. Что именно делал (и что делИл) этот счётчик, я не знаю, но компилятор невозмутимо нагородил какой-то схематик с кучей вентилей, оно скушало почти 100 мА и как-то даже работало!
P.S. в ПЛИС заливаю прошивку, кстати, при помощи того китайского поддельного "Platform Cable USB", имитирующего внешний вид и функционал фирменного... при цене в 10 раз меньше.