Jump to content

    

FEC на ПЛИС

Да уж, горькая правда жизни. Но, к сожалению, это касается не только кодирования, но и всей области телекоммуникаций. У нас в свое время курс по кодированию ограничился рассмотрением только кодов Хемминга и БЧХ. Даже сверточное не рассматривали, какие там Turbo и LDPC :(

К сожалению, катастрофическое состояние в высш. образовании непонятно как лечить.

Ну, поднять зарплаты преподам, чтобы они не разрабатывали ИБП, а занимались наукой.

Предположим, это сделали. А дальше что?

Все мои толковые студенты сейчас быстро попадают на хлебные места в совместные предприятия.

А совместные предприятия - это пылесосы, которые вытягивают через несколько лет

наши лучшие молодые мозги за бугор.

Вот и получается, что нет смысла поднимать вузы, т.к. это в основном пойдет на пользу только

зарубежному производству. Нашей стране нужны дворники , мелкие менеджеры и обслуга для топливного комплекса.

А то, что молодой специалист, разбогатев, потянется обратно на родину -

так могут думать только очень большие политики. Я таких примеров в своем окружении не знаю.

Точнее, знаю пару бывших студентов, которые вернулись, но как раз не разбогатев и не самые креативные.

В общем, все совсем грустно.

Но, мы, кажется, свернули в злостный нетопик.

Предлагаю на этом закончить или в личку.

Share this post


Link to post
Share on other sites
Да именно так, при этом нужно модифицировать еще и процедуру Ченя (ввести там корректирующий коэффициент)

Не очень понятно какой корректирующий коэффициент т.е. наподобие корректирующего коэффициента для укороченного кода при инициализации, только alfa^0 ?

 

SKov

Спасибо большое спасибо за подробное объяснение.

Edited by Gold777

Share this post


Link to post
Share on other sites
Не очень понятно какой корректирующий коэффициент т.е. наподобие корректирующего коэффициента для укороченного кода при инициализации, только alfa^0 ?

алгоритм форни считает Yi = -z^m0 *omega(z)/z*lambda'(z), где m0 - степень первого корня. Но для m = 0, там будет 1 и коррекция не нужны. Ошибся немного %)

Share this post


Link to post
Share on other sites
алгоритм форни считает Yi = -z^m0 *omega(z)/z*lambda'(z), где m0 - степень первого корня. Но для m = 0, там будет 1 и коррекция не нужны. Ошибся немного %)

У меня получается правильные величины ошибки (если синдромы считать с alfa^0 как в моем случае) только если omega(x)=alfa0*S2 + (alfa1*S3 +alfa2*S2)x + (alfa0*S4+alfa1*S3+alfa2*S2)x^2+ ....-хотя по теории надо считать

omega(x)=alfa0*S1 + (alfa1*S2 +alfa2*S1)x + (alfa0*S3+alfa1*S2+alfa2*S1)x^2+ ... В чем может быть ошибка или я теорию неправильно понял?

Edited by Gold777

Share this post


Link to post
Share on other sites
У меня получается правильные величины ошибки (если синдромы считать с alfa^0 как в моем случае) только если omega(x)=alfa0*S2 + (alfa1*S3 +alfa2*S2)x + (alfa0*S4+alfa1*S3+alfa2*S2)x^2+ ....-хотя по теории надо считать

omega(x)=alfa0*S1 + (alfa1*S2 +alfa2*S1)x + (alfa0*S3+alfa1*S2+alfa2*S1)x^2+ ... В чем может быть ошибка или я теорию неправильно понял?

для выяснения проблемы вышлите мне параметры используемого вами кода : {m, n,k, m0, rootspace} и пару закодированных блоков. посмотрю что к чему. Лучше на почту.

 

Share this post


Link to post
Share on other sites

Деление a/b в алгоритме Форни для декодера Рида-Соломона (255,239) реализовал через умножение используя таблицу инверсных элементов 1/b на блочной памяти (в таблицы номер ячейки значение b, значение ячейки соответственно результат 1\b). Подскажите правильная ли у меня таблица и если нет то где ошибка? Если кто-то реализовал алгоритм Форни для декодера на ПЛИС без использования таблицы инверсий, сколько места занял делитель в поле Галуа?

inverse_memory.txt

Edited by Gold777

Share this post


Link to post
Share on other sites

Продолжаю пиарить красоту SV.

 

На сей раз использование возможностей SV для простого моделирования алгоритмов на примере сверточного дуобинарного турбокода. Поддерживаются стандарты DVB и Wimax + сделано расширение скоростей кодирования. Кодер синтезируемый, декодер пока только идеалка близкая к железу по организации вычислений и интерфейсам. Тестбенч - так называемый bertest. Поддерживается пока только QPSK. В идеалке можно покрутить разрядности, алгоритмы (семейство MAX Log MAP) посмотреть что и куда идет и как считается.

rsc_release_06022015.7z

Share this post


Link to post
Share on other sites

Запилил идеалку для прямого портирования на RTL уровень. Отличие от идеалки общего вида :

1. Одновременный проход прямой и обратной рекурсии

2. collision-free интерливер для одновременного доступа для метрик прямой и обратной ветви.

3. Компрессия метрик состояний ветвей для уменьшения расхода памяти метрик (прекрасно ложится на плис).

4. Изменена концепция работы с буферами данных для оптимизации ресурса памяти плиса.

5. Код почищен от мусора.

 

До синтезируемого RTL кода 1,5 шага :)

ЗЫ. Пока все проверяется на QPSK скорости 1/3 и 1/2. Другие скорости и модуляции пока не проверял.

rsc_release_10022015.7z

Share this post


Link to post
Share on other sites

Синтезируемый, статически конфигурируемый, однопроходный (один проход на полуитерацию) декодер DVB-RSC кода и бертест для него. Синтез в ква 9.1 для сыклона и7 для блока 128 бит : ~6000LE, 15M9K, 106МГц настройки по умолчанию. Тактовая упирается в расчет рекурсии. Нормализация вынесена из нее, все уперлось в ограничения алгоритма.

rsc_release_24022015.7z

Share this post


Link to post
Share on other sites

Последняя версия кодека:

1. Добавлена таблица перемежений Wimax-OFDM, Wimax-OFDMA

2. Переписана работа кодера (таблицы, генератор адресов), архитектура оптимизирована под ПЛИС

3. Сделан рекурсивный процессор с комбинированной модульно-классической арифметикой, ресурс тот же, но тактовая поднялась за счет уменьшения длинны трасс.

4. Убран атрибут синтеза в памяти метрик, приводил к некорректной работе в ПЛИС. Кое где вбиты атрибуты, во избежание имплементации сдвиговых регистров на памяти.

5. Кодек проверен в железе на разных пакетах и разных скоростях кодирования на последовательностях до 1е9 бит.

 

На этом опенсорсная часть, этого кодека окончена :)

rsc_release_04032015.7z

Share this post


Link to post
Share on other sites

des00, спасибо большое за труды.

 

Что планируете реализовать в закрытой части, если не секрет?

Чтобы знать, к чему стремиться :)

Share this post


Link to post
Share on other sites
Что планируете реализовать в закрытой части, если не секрет?

Именно по этому кодеку планов громадье :

1. Динамически конфигурируемый кодек, в том числе с переключением на лету.

2. Эконом версию декодера с меньшим ресурсом.

3. Добавить модуляции до КАМ64.

4. Текущий декодер, на частоте 100 МГц и 8 итерациях дает где-то 12 Мб/с скорость декодирования, есть задумки сделать декодер на ~100 мегабит

 

Ну и затем BTC, LDPC :)

Share this post


Link to post
Share on other sites

Wimax LDPC encoder со статической конфигурацией. Поддерживаемые скорости 1/2, 2/3B, 3/4A, 5/6.

Параметры кодера для сыклона 3 и7:

Кодирование по 4 бита, скорость 5/6, длина 576 : 456 плиток хлопающих на частоте 250МГц (~1 Гбит/с)

Кодирование по 4 бита, скорость 5/6, длина 2304 : 1342 плитки хлопающих на частоте 200МГц (~800Мб/с)

Кодирование по 8 бит, скорость 5/6, длина 2304 : 1145 плитки хлопающих на частоте 210МГц (~1.68Гбит/с)

 

UPD. Метод проверки - по эталонной модели и матлабу. Код для матлаба в теме про кодирование в Алгоритмах

UPD2. Возможность работать по 4/8 бит определяется целочисленной кратностью expansion factor (zf) 4/8 битам.

ldpc_release_10042015.7z

Share this post


Link to post
Share on other sites
Wimax LDPC encoder со статической конфигурацией. Поддерживаемые скорости 1/2, 2/3B, 3/4A, 5/6.

Спасибо за еще один пример пользы SystemVerilog'a!

Вы намеренно по асинхронному сбросу сбрасываете только val и state? Исходите из каких-то соображений по разводке или из философии, что сбрасывать надо только управляющие сигналы?

Share this post


Link to post
Share on other sites
Вы намеренно по асинхронному сбросу сбрасываете только val и state? Исходите из каких-то соображений по разводке или из философии, что сбрасывать надо только управляющие сигналы?

Все по заветам Кена Чапмена(автора пикоблейза и Xilinx гуру): When creating each section of a design, simply ask, “Does this bit need to be reset”?

Все в системе определяется по сигналу валидности и состоянием конечного автомата, смысла сбрасывать другие сигналы нет. Помимо этого, на некоторых платформах (где триггер может быть только с одним типом сброса), можно потерять в ресурсе или производительности.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this