nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

"МКО через UART" в железе

Долго мучали эту штуковину на симуляции, пора уже в макет это прошить и посмотреть, как оно себя поведёт.

Оставлю "основную схему" (процессор, SPI, контроллер ЖК-экранчика, видеообработчик, детектор и селектор синхроимпульсов), но "отниму" у неё RS485 и "отдам" его новой схеме, этому самому "МКО". Позже они должны будут получить общий доступ к памяти, но давайте сначала обособленно его проверим.

Окинем прощальным взором львиную долю "схемы" TopLevel:



Вся левая часть нужна только при использовании аналоговой камеры, как сейчас у меня в макете. Оцифрованные 8 бит идут напрямую в видеообработчик, но они же фильтруются БИХ-фильтром IIR_LPF (см. ФНЧ БИХ на ЭРИ ОП), чтобы не спутать насыщенный синий с синхроимпульсом (такое было). Затем детектор синхроимпульсов SoftcoreSyncDetector, за ним селектор синхроимпульсов SoftcoreSyncSeparator.

Ещё виден неиспользуемый фильтр низкой частоты, это я развлекался со свёрточными нейросетями :)

Основная логика вся сосредоточена в модуле QuatCore_GPU (т.е процессор + видеообработчик). Внутри стоит и периферия: контроллер SPI с мультиплексором на 3 устройства (из-за того, что в отладочной плате "от щедрот" все SPI-устройства выведены на разные ножки, хотя SCK, MOSI, MISO можно было объединить, а отдельные сделать лишь nCS), контроллер ЖК-экранчика и контроллер статической памяти.

Ну и UART там сидит, отдельно передатчик и приёмник.

Не мудрствуя лукаво, от него всё отсоединяем - и вставляем модуль "по соседству":


Синтезируется это всё дело в 1734 ЛЭ, максимальная частота 25,91 МГц (определяется процессором, там есть пара "узких мест"), памяти сейчас прорва, памяти занято аж 22 килобита, или 2,75 килобайта (наверное, все 3 на самом деле). Наверное, это на сейчас самая крупная схема из всех, что у меня были.

Сейчас туда "прошита" программа ShortRangeAffine.asm, которая когда-то красиво влезла в "загрузочный сектор", 512 байт, а потом напихал в неё всякой отладки - и сейчас самую чуточку его превышает, вынуждая выделить 1 килобайт. Ну и хрен с ним...

Что ж, барабанная дробь...




Что-то есть. Первое сообщение "начинаем работу" - это от старой прошивки. При подаче питания срабатывает она, потом я по JTAG "запихиваю" в ПЛИС текущий проект. Это показывает, что по крайней мере "железо" рабочее.

Далее даю командное слово: адрес 6, подадрес 110002, передача ОУ-КШ, передать одно слово данных. Байты переставлены местами, потому как у меня приёмник и передатчик передают по 16 бит за раз, от младшего бита к старшему, а на компьютере передаётся по байту, от младшего бита к старшему, из-за чего "endian" меняется.

В ответ получаю ответное слово 0x3000 (адрес 6, все флажки сброшены, "всё в порядке") и одно слово данных: 0000. Да: по нашей логике последнее слово это всегда CRC, даже если оно по совместительству первое :) Вот это оно и есть, CRC от пустого сообщения!

Потом посылаю командные слова на "чужой" адрес 0, и никакого ответа не получаю. Всё верно.

В следующий раз заказал по тому же адресу и подадресу ("телеметрия") 2 слова данных - и получил заголовок массива телеметрии, 0xFF00, а затем CRC от него. Тот же CRC можно получить на crccalc.com, если ввести 00FF, и в строке CRC16/KERMIT в результате 0x0F78 переставить местами байты.

Потом ещё попробовал 3 слова данных, 4, 5, 6, 7. Результат: ответное слово, за ним заголовок массива, за ним сплошные нули (ну да, здесь я в память никаких "интересных" значений не клал), и CRC. Во всех случаях корректный.

И ещё "заказал" 0 слов данных, только этот ноль в МКО (ГОСТ Р 52070-2003, Mil-Std 1553) интерпретируется как 32 слова, что нужно было также прописать в коде. Что ж, эта часть также работает, выдаётся ответное слово и ещё 32 слова данных, последнее из которых: CRC.

Продолжение следует...
Tags: ПЛИС, работа, странные девайсы
Subscribe

Recent Posts from This Journal

  • Тестируем atan1 на QuatCore

    Пора уже перебираться на "железо" потихоньку. Решил начать с самого первого алгоритма, поскольку он уже был написан на ассемблере. В программу внёс…

  • Формулы приведения, что б их... (и atan на ТРЁХ умножениях)

    Формулу арктангенса на 4 умножениях ещё немножко оптимизировал с помощью алгоритма Ремеза: Ошибка уменьшилась с 4,9 до 4,65 угловой секунды, и…

  • Алгоритм Ремеза в экселе

    Вот и до него руки дошли, причина станет ясна в следующем посте. Изучать чужие библиотеки было лениво (в том же BOOSTе сам чёрт ногу сломит), писать…

  • atan на ЧЕТЫРЁХ умножениях

    Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь…

  • Ай да Пафнутий Львович!

    Решил ещё немного поковыряться со своим арктангенсом. Хотел применить алгоритм Ремеза, но начал с узлов Чебышёва. И для начала со своего "линейного…

  • atan(y/x) на двух умножениях!

    Чего-то никак меня не отпустит эта тема, всё кажется, что есть очень простой и эффективный метод, надо только его найти! Сейчас вот такое…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments