Jump to content

    

des00

Модераторы
  • Content Count

    7546
  • Joined

  • Last visited

Everything posted by des00


  1. Вот когда будет работать без если, тогда имеет смысл обсуждать, а пока это так, легкое позерство) Временные ограничения на SPI, при синхронной реализации, это две строчки set_false_path. А дальше, в синхронной реализации, теорема котельникова, учет временных параметров ПЛИС. Очень странно что у вас это синтезировалось и работает в железе. Хотя, вполне возможно, в вашей плис есть регистры с асинхроным сбросом и(или) установкой в произвольные значения, тогда решение действительно возможно.. А в симуляторе да, там можно делать все что угодно. Часовню тоже я разрушил??? (с) :) сразу бы вам, с плеча рубить, не разобравшись. может у него действительно 90МГц SPI
  2. это для тех кому старшие семерки и ультрас достаются бесплатно) такие люди, спиай давно уже не используют. Оке, уточним задачу, берем чип класса спартан6/сыклон 5, самый медленный. SPI 90 МГц.
  3. алгоритм не полный, что бы вы делали, "В случае если SPI быстрый". положим 90МГц. Ваши действия?
  4. Декодер Витерби

    Странно, но наверное так и есть. я плисовод, мне сложно адекватно оценивать производействие процессоров в том или ином алгоритме. Сам метод register exchange я не реализовывал, тем более програмно. Когда изучал витерби, посмотрел модель в матлабе, лежит тут \toolbox\hdlcoder\hdlcoderdemos\hdlcoderviterbi.mdl. Увидел что сохраняются решения и выбранное состояние, по сути считается вперед комбинационно. Да, это можно конвейризировать, но тогда, нужно пробрасывать индексы состояний по всей линейке. Это ресурс. Но зато никаких обратных пробегов, LIFO и т.д.. В traceback сохраняется только вектор решений, в соответствии с индексами состояний. Затем, когда получено значение, делается обратный пробег, на котором определяется значение выходного бита. И действительно, памяти, для путей нужно меньше. Но нужно LIFO для восстановления порядка следования бит. А вот с определением индекса состояния, с которого нужно начинать обратный пробег, возможны варианты: 1. Размер блока кодирования меньше L - выбора нет, считаем решетку, ищем минимальный, декодируем. Символы хвоста защищены намного слабее чем символы головы. Но, ИМХО, для таких блоков применение витерби сомнительно, лучше MAP. а еще лучше короткий сверточный турбокод. 2. Размер блока кодирования меньше 2*L, все тоже самое, только первые L символов защищены лучше чем вторые L. 3. Размер блока кодирования больше 2*L. Нарезаем блок на перекрывающиеся подблоки по 2*L. В каждом подблоке первые L символов 99.9% будут в слитом пути, и для определения этого пути, можно сделать обратный пробег из любого состояния, на момент 2*L. Т.е. берем блок 2*L, берем любое состояние, запускаем обратный пробег, ищем состояние в момент L и с него декодируем. Так будет до тех пор, пока не доберемся до последнего блока 2*L, его декодируем как 2. Варианты с витерби можно улучшить защиту последних символов терминированием решетки(добить символами, что бы конечное состояние было априори известно), тогда вообще компаратор не нужен никогда. Ну или в конце вписать немного мусора и отбросить при декодировании. ЗЫ. Да, вам не показалось, при traceback блоки пробегаются по 2 раза. Поэтому была придумана техника pre-traceback. Что бы убрать один пробег и сразу знать состояние с которого надо декодировать данные. Т.е. классический traceback конвейер выглядит так : вперед 2*L -> назад L -> назад L(решения) -> LIFO L -> вперед L -> назад L -> назад L (решения) -> LIFO L и .т.д. с pre-traceback выглядит так: вперед 2*L -> назад L(решения) -> LIFO L -> вперед L -> назад L (решения) -> LIFO L и .т.д. быстрее, но на плис это выливается в ресурс, а в проце - вычислительная мощность)
  5. вы работаете по фронту частоты SCK. в SPI интерфейсе она мало того что отключаема, так еще и ее фронт не обязательно присутствует при сигнале выбора слейва. Т.е. вы не ловите фронт сигнала ss, вы ловите его уровень, при фронте сигнала SCK.
  6. а вот в этом, вы сильно ошибаетесь. это прям из кода видно, что так будет только в ограниченном количестве случаев и зависеть от фазы луны.
  7. Странно, вы пишите: " механизм сброса счетчика nb не работает, и каждый 8 байт я вижу одиночный импульс на sdout" Но тогда причем здесь reg [3:0] nb = 0; // счетчик бит Так все таки, байты или биты? как она должна у вас работать? Что именно вы сделали в симуляторе? И да, " 8 байт я вижу одиночный импульс на sdout. " - именно так и должна работать исходная логика, вторая картинка как раз неправильная. И с присваиваниями все же разберитесь.
  8. торговые роботы. правда, тут надо будет труда закопать......много в общем)
  9. Сам вхдл код посмотрите. Может эти порты там не нужны и генерируется полная комбинаторика.
  10. Вы ещё не забывайте, что гигабитный эзернет, на витой паре FEC кодер ещё содержит. Т.е. даже в стерильных условиях офиса, там проблемы
  11. 90 мегабайт, 720мегабит. Один трансивер, гигабитную оптику на сфп кейджах. Если дорого, использовать сфп пачкорд. А потом все равно поставить оптику)
  12. Добрый день уважаемые коллеги. На этом форуме, за годы его существования, выложено много интересных схемотехнических и HDL решений (в том числе с сорцами). Есть предложение обобщить опыт и создать на форуме раздел вида "Схемотехнические трюки для ПЛИСоводов". По мере возможности, я складываю интересные сорцы с форума в библиотеку и при работе иногда к ним обращаюсь. Помогают не изобретать велосипед лишний раз. Думаю что я не один такой. Формат изложение видится такой : Задача -> решение -> комментарии. Сие будет полезно всем, а особенно начинающим. Что бы не задавались вопросами типа таких или таких . От администрации форума получено согласие на поддержку в реализации этого проекта. Но тянуть такое в одиночку нет времени, было бы интересно набрать небольшую команду. Если у кого то есть интерес, прошу назваться %)
  13. поправил. для редактирования данных в постах, используйте жалобы модератору.
  14. работает еще хуже?
  15. Декодер Витерби

    2/9 ~= 22% улучшение) 7мкс, 565 тактов, незнаю архитектуры этого чипа, но ради интереса, я бы попробовал вариант с оптимальной, для 1901ВЦ1Т разрядностью. Думаю часть уходит на операции по двочиному модулю (хотя это и простой AND в случае 2^N). Судя по гуглу, это будет 16 бит для дсп ядра и 32 для риск. Там просто, на каждое состояние сложить две метрики, вычесть, по знаку выбрать) и так для каждого. думаю можно выжать что-то еще)
  16. Собственно RobFPGA уже ответил) при желании, можно три регистра поставить, два в памяти и один для улучшения разводки)
  17. Декодер Витерби

    Вполне возможно что двойная метрика это моя эмпирическая привычка перестраховываться и 4-х битов хватит) хорошо что все заработало. ЗЫ. Для вашей работы, еще интересно сравнить производительность вашего первого варианта, с определением минимума и нормировкой вычитанием и вариант с модульной арифметикой. Можно любых попугаях: тактах/времени исполнения, битрейте. Заодно и узнаете стоила ли овчинка выделки)
  18. Декодер Витерби

    нет, это запас разрядности на корректные вычисления, ну или эффективная разрядность. это без разницы, кому как удобно) мне удобно так) эмм, не совсем понял) 2*разрядность метрики - по сути это эффективная разрядность на сложение, что бы переполнение не возникало сразу, а 2 бита на квадратны, что бы был полный круг. отвлекитесь и рассмотрите на свежую голову, тогда у вас все уложиться в голове)
  19. Декодер Витерби

    Именно так, все зависит от метрики входного символа: если она всегда положительна, то и отрицательным числам, взяться не откуда. Если может быть отрицательная (LLR например), тогда состояния могут быть с минусом. Но, в целом, разница не принципиальна. Зависит от производительности. Не силен в процессорах и не знаю как, на 32-х битной платформе, реализуются вычисления с 8ми битными переменными. Если на лету, то ок, в противном случае, там будут использоваться маска слова 0x0000_00FF. А это, дополнительная операция. просто учитывается в разрядности метрики состояний.
  20. кхм......Save As - выбрать формат.
  21. не у всех есть 2018 матлаб, я до сих пор на 2012 сижу, одно время мне 2007 хватало(а 2006, который на сях, вообще был любимым). Если хотите помощи, конвертните в версии постарее.
  22. Декодер Витерби

    давайте по рисунку. правило для жесткого решения, если m1-m2 < 0 то метрика состояния m1 , если m1-m2 >= 0, то метрика состояния m2. Но, вычитание - знаковое, с учетом используемой разрядной сетки (Это важно !!!) Модульная арифметика - это арифметика с ограниченной разрядностью. Простой числовой пример. В обычной арифметике 127+2 = 129. В арифметике по модулю 128, 127 +2 = 1 (129 % 128). Как видно, это арифметика чисел с разрядностью 7 бит. Рассмотрим пример для процессоров. положим слово 8 бит. Обычная арифметика 250 + 16 = 266, модульная 250 + 16 = 10 (266 % 256). Числа будут бегать по замкнутому кругу и никогда не переполнятся. Т.е. никаких специальных операций, при сложении, с метриками делать не надо. Совсем. Просто складывайте, по всем правилам знаковой/беззнаковой арифмтетики, смотря какое решение используется. Но, надо считать их в типах, с ограниченной разрядностью, без учета битов переноса: на плис - нужная, на 8 ми битном МК - 8мибитная, на 32 бита проце - 32-х битная и т.д. Сравнивать числа, тем самым знаковым вычитанием с учетом разрядной сетки. Что это дает, это дает не кольцо 0...31, а кольцо 0..+15 -16....-1. (т.е. двоичное представление числа не изменяется, изменяется только его трактование в классической арифметике). Например, положим 5 ти битную арифметику. Круг 0...31(который, как мы помним 0..+15 -16....-1). Положим, что в конце решетки у нас числа 30, 2, 3, 31 (числа взяты от балды). В классической арифметике наименьшая метрика будет 2, в арифметике по модулю 5, будет 30. Покажем что это так. При знаковом вычитании, в модульной арифметике числа будут трактоваться как -2, 2, 3, -1. Распишем дерево решений 1 слой дерева -2 - 2 = -4 < 0, выбираем метрику -2(30). 3 - (-1) = 4 >= 0, выбираем метрику -1 (31) 2 второй слой дерева -2 -(-1) = -1 < 0, выбираем метрику -2 (30). ЧТД, хотя изначально, было похоже на бред ;) Т.е. тут все работает на математике в ограниченной разрядной сетке, представлению чисел в дополнительном коде и добавленного запаса битов на кодирование квадранта круга (2 бита сверху). UPD. Вот еще интересный пример, чтобы расставить все точки над Ё рассмотрим пару чисел 15 и 16. В дополнительном коде, 5 ти битной арифметрики это числа 15 и -16 соответственно. 15 -(-16) = 31 == -1 < 0, выбираем метрику 15 -16 -15 = -31 ...а вот это уже 6 ти битное число, в битовой нотации это 10_0001, но нас итересует не знак переноса, а знаковый бит 5 ти битного результата. 5 ти битный результат будет 0_0001 или 1 >= 0, выбираем метрику 15.
  23. Декодер Витерби

    1. Не учли что витерби на жестких решениях не максимизирует метрику, а минимизирует (т.е. его решения инверсные) 2. Неправильно трактовали Figure 5 из статьи. 3. Совсем не понял, откуда у вас взялась метрика -3, на жестких решениях, метрики которых, всегда положительны. Должно быть, как то так. ЗЫ. Ну и считать вам проще по модулю 2^N. в завимости от размера слова вашего ПК/М/ПЛИС. Для решетки на рисунке (судя по всему это 1/2 CL=3) и жесткого решения, минимальная(она же реальная) разрядность метрики перехода - 2 бита, минимальная состояния - 5 бит (удвоеная метрика + 2 бита на кодирование квадрантов круга). 8ми бит для жестких решений, вам хватит за глаза)
  24. Как я понял, у вас там все внутри вашего модуля. Простейший RR арбитр, в конце темы, в сорцах есть