реклама на сайте
подробности

 
 
11 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> FEC на ПЛИС, пиарю красоту SV
des00
сообщение Jun 19 2011, 09:57
Сообщение #1


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



сделал отдельную тему для проекта с началом здесь

сообщения из кросс тем переместил.


продолжаем пиарить красоту SV. итак

новый релиз проекта БЧХ :
1. переписана работа с математикой в полях галуа. Теперь ква собирает декодер много быстрее, почти не задумываясь и не требует кучу памяти %)
2. переписан статически конфигурируемый БЧХ кодер/декодер, удалены лишние модули, ясность выше код чище
3. добавлен статический конфигурируемый RS кодер/декодер, стиль унифицирован с БЧХ кодером. Внимание : в сорцах есть реализация BM алгоритма, требующая на декодирование всего check тактов (!!! именно тактов а не шагов).
4. модифицированы random constraints тестбенчи, ясность выше, код чище.
5. Все как и прежде, не требует каких либо генераторов, скриптов и т.д. Вычисляется и синтезируется по месту. Расчет генераторного полинома БЧХ по прежнему не сделан %(

Динамически конфигурируемые кодеры/декодеры выкладывать не буду, это уж как нить сами wink.gif

UPD. Естественно осталась возможность использовать несколько инстансов кодеров с разными параметрами в одном проекте %)
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_19062011.zip ( 64.37 килобайт ) Кол-во скачиваний: 376
 


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 15 2011, 06:51
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Таки нашел время добить reformulated IBM алгоритм для БЧХ кодов, который приведен в статье Low-Power High-Throughput BCH Error Correction VLSI Design for Multi-Level Cell NAND Flash Memories со случайно(хотя скорее преднамеренно !!!) допущенной ошибкой. В итоге вывел свою реализацию на основе RIBM для РС кодов.

SRIBM позволяет за t тактов (!!!) вычислить полином локаторов + шикарно ложиться на архитектуру плис. В зависимости от используемого кода и требуемой производительности позволяет получить хорошие результаты по ресурсу(!!!). В комплекте 3 РТЛ реализации этого алгоритма + идеалки используемые для вывода алгоритма.
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_15072011.zip ( 86.51 килобайт ) Кол-во скачиваний: 173
 


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 16 2012, 06:34
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



1. Причесал описание, для БЧХ добавил полиномов, кое что поправил в тестбенче
2. Добавил статически конфигурируемый декодер РС со стираниями, по алгоритму ribm, правда реализации только самая быстрая и самая медленная.
3. Различные алгоритмы декодирования РС со стираниями в идеалках (BM, IBM, rIBM, RIBM)

ЗЫ. точнее не самая быстрая, можно посчитать также за check тактов, если полином локаторов стираний, рассчитать заранее используя блок rs_eras_syndrome_count_poly для вычисления синдрома и полинома локаторов стираний sm.gif
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_16032012.zip ( 109.67 килобайт ) Кол-во скачиваний: 166
 


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 16 2012, 09:07
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Цитата
для БЧХ добавил полиномов

Не нашел. Функция generate_pol_coeficients таже.

Сообщение отредактировал Denisnovel - Mar 16 2012, 09:09
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 16 2012, 09:24
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 16 2012, 04:07) *
Не нашел. Функция generate_pol_coeficients таже.

хммм, наверное в другом проекте инклудник лежит, позже соберу все полиномы с которыми работал и дополню. Но вообще кому надо полиномы до 511 просто считаются в матлабе. потом копи пастом вбиваются в инклудник
Прикрепленные файлы
Прикрепленный файл  bch_gen_poly.zip ( 356 байт ) Кол-во скачиваний: 137
 


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 16 2012, 09:29
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Я думал что добавили функцию расчета полиномов. Проблема в том, что нужно считать больше 511. Ну да ладно.
Кстати, нашел еще одну реализацию БМ, можно ли при этом уменьшить обьем на 40%?
Прикрепленные файлы
Прикрепленный файл  IEICE_BCH_pub20100401.pdf ( 986.18 килобайт ) Кол-во скачиваний: 290
 
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 16 2012, 09:39
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 16 2012, 03:29) *
Я думал что добавили функцию расчета полиномов. Проблема в том, что нужно считать больше 511. Ну да ладно.

все никак время не найду разобраться что там к чему и сделать.

Цитата
Кстати, нашел еще одну реализацию БМ, можно ли при этом уменьшить обьем на 40%?

надо глянуть на досуге


Цитата(des00 @ Mar 16 2012, 03:33) *
надо глянуть на досуге

хмм, смотрю алгоритм на странице 773, судя по алгоритму должно быть 2*t умножителей GF(2^m), смотрю выложенный код
Код
  data_t tetta       [0 : t2+1];
  logic  tetta_clear [0 : t2+2];
  data_t gamma       [0 : t2+2];

те же t2 умножителей %) (t2+1) это константа,

а если еще учесть что у них в алгоритме
Код
For r = 0 step 1 until 2t-1 do
, а в выложенном коде
Код
for (int r = 0; r <= t-1; r += 1)
я немного смущен %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 16 2012, 17:59
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 16 2012, 10:34) *
1. Причесал описание, для БЧХ добавил полиномов, кое что поправил в тестбенче
2. Добавил статически конфигурируемый декодер РС со стираниями, по алгоритму ribm, правда реализации только самая быстрая и самая медленная.
3. Различные алгоритмы декодирования РС со стираниями в идеалках (BM, IMB, rIBM, RIBM)

ЗЫ. точнее не самая быстрая, можно посчитать также за check тактов, если полином локаторов стираний, рассчитать заранее используя блок rs_eras_syndrome_count_poly для вычисления синдрома и полинома локаторов стираний sm.gif

Для кода БЧХ GF(2^11) исправляющего 8 ошибок, какую тактовую частоту может обеспечить ваш декодер?
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 17 2012, 02:30
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 16 2012, 11:59) *
Для кода БЧХ GF(2^11) исправляющего 8 ошибок, какую тактовую частоту может обеспечить ваш декодер?

полином дайте проверю. Из того что делал, декодер с t = 23 в поле GF(2^8), свободно, не особо напрягаясь, работает на 200МГц на третьем сыклоне. Для GF(2^11) проверить надо, но думаю что 150 на том же чипе даст точно.


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 17 2012, 05:33
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 17 2012, 06:30) *
полином дайте проверю. Из того что делал, декодер с t = 23 в поле GF(2^8), свободно, не особо напрягаясь, работает на 200МГц на третьем сыклоне. Для GF(2^11) проверить надо, но думаю что 150 на том же чипе даст точно.

у меня дает 135 на третьем циклоне, а надо 155. Какими способами можно увеличить частоту?
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 17 2012, 15:10
Сообщение #11


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 17 2012, 00:33) *
у меня дает 135 на третьем циклоне, а надо 155.

полином дайте, проверю сколько получиться.

Вот для примера кодер {8191, 8152, 3/7} работа в поле GF(2^13), чип EP3C25...C8, используется TQ, все по дефолту, порты виртуальные

результаты LE/REG/Fmax

bch_enc 45/44/402.09MHz
bch_dec в режиме ribm_t_by_t 823/447/180.6MHz

и это при математике в поле GF(2^13), 5-6 слоев логики. При этом TQ показывает пару возможных оптимизаций для разгона, но если учесть что на декодирование уходит 22 такта, а пакет длинной 8191 такт, то можно сделать BM по мультициклу и задрать тактовую/битовую потока под 250-300 МГц %)

Цитата
Какими способами можно увеличить частоту?

Единственный способ : оптимизация логических функций и грамотная конвейеризация под целевую ПЛИС. Научиться этому в двух словах не возможно, все приходит с опытом.


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 17 2012, 18:07
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 17 2012, 19:10) *
полином дайте, проверю сколько получиться.

Вот для примера кодер {8191, 8152, 3/7} работа в поле GF(2^13), чип EP3C25...C8, используется TQ, все по дефолту, порты виртуальные

полином 2053(x^11+x^2+1), код (2040, 1952) поле GF(2^11) 8 ошибок чип EP3C25...C8
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 18 2012, 14:20
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 17 2012, 13:07) *
полином 2053(x^11+x^2+1), код (2040, 1952) поле GF(2^11) 8 ошибок чип EP3C25...C8

а где генераторный полином? примитивный полином мне не нужен %)


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 18 2012, 15:28
Сообщение #14


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des00 @ Mar 18 2012, 09:20) *
а где генераторный полином? примитивный полином мне не нужен %)

без генераторного полинома, bch_enc не собрать, а результаты по декодеру LE/REG/Fmax

bch_dec в режиме ribm_t_by_t 1127/790/213,04MHz

4 слоя логики. Если учесть что для этого результата решение BM занимает 129 тактов, а пакет весит 2040, то можно посадить BM для работы на половинном клоке, поставить мультицикл и выжать 250-300 МГц. Но и в базе 200 мегабит в секунду обрабатывает не особо напрягаясь %)

если не сложно сообщите генераторный полином для этого кода для коллекции, можно в личку. ну не умею я пока их самостоятельно рассчитывать %( А ковыряние в гугле мне не помогло %(

Всем кто решиться использовать этот декодер при низких Eb/N0, надо помнить что в этом декодере, перебор ченя и коррекция ошибок происходят одновременно. Поэтому в случае отказа от декодирования, который определиться в конце ченя, декодер размножает ошибки. Что бы это побороть, нужно немного модифицировать ченя, выплюнуть сырые данные в фифошку/память вместе с коррекцией ошибок ну и потом считать с коррекцией или без %) но это не сложно и делается минут за 10-20 %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 18 2012, 15:59
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 18 2012, 19:28) *
без генераторного полинома, bch_enc не собрать, а результаты по декодеру LE/REG/Fmax

bch_dec в режиме ribm_t_by_t 1127/790/213,04MHz

4 слоя логики. Если учесть что для этого результата решение BM занимает 129 тактов, а пакет весит 2040, то можно посадить BM для работы на половинном клоке, поставить мультицикл и выжать 250-300 МГц. Но и в базе 200 мегабит в секунду обрабатывает не особо напрягаясь %)

если не сложно сообщите генераторный полином для этого кода для коллекции, можно в личку. ну не умею я пока их самостоятельно рассчитывать %( А ковыряние в гугле мне не помогло %(

Всем кто решиться использовать этот декодер при низких Eb/N0, надо помнить что в этом декодере, перебор ченя и коррекция ошибок происходят одновременно. Поэтому в случае отказа от декодирования, который определиться в конце ченя, декодер размножает ошибки. Что бы это побороть, нужно немного модифицировать ченя, выплюнуть сырые данные в фифошку/память вместе с коррекцией ошибок ну и потом считать с коррекцией или без %) но это не сложно и делается минут за 10-20 %)

Да, интересный у вас результаты получились. Меня интересует именно декодер. Вроде для него генераторный полином я не использовал, но посмотрю. Точно сейчас посмотреть не могу, но приблизительно sibm/5000 LE/700-800 Reg/135 Fmin Mhz (требуется 155), но результат за 16 тактов. На решение не более 32 тактов, иначе не успею. Интересно какие при таком условии будет характеристики вашего декодера. Можете объяснить как посадить BM для работы на половинном клоке и что значит поставить мультицикл и выжать 250-300 МГц, вообще как-то не очень понятно что вы имеете ввиду. Если можно, объясните поподробнее.

Сообщение отредактировал Gold777 - Mar 18 2012, 17:49
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 19 2012, 03:52
Сообщение #16


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 18 2012, 10:59) *
Точно сейчас посмотреть не могу, но приблизительно sibm/5000 LE/700-800 Reg/135 Fmin Mhz (требуется 155), но результат за 16 тактов. На решение не более 32 тактов, иначе не успею. Интересно какие при таком условии будет характеристики вашего декодера.


bch_dec(ribm_1t) BM выполняется за t+1 = 9 тактов, 3209/732/170.85MHz, судя по TQ упирается в разводку, если сделать register dublication + кое что подпилить в BM думаю что выйдет на 200МГц.
bch_dec(ribm_2t) BM выполняется за 2*t+1 = 17 тактов, 2472/776/184.95MHz, тут сложнее, надо бороть "лишний" мультиплексор в BM

Цитата
Можете объяснить как посадить BM для работы на половинном клоке и что значит поставить мультицикл и выжать 250-300 МГц, вообще как-то не очень понятно что вы имеете ввиду. Если можно, объясните поподробнее.

Хмм, вам лучше почитать мои публикации о TQ, временных ограничениях, одноцикловых цепях и мультицикловых. Если на пальцах, то подаете на clockena меандр и говорите временному анализатору что задержки считать не для периода T, а для периода 2*T. Естественно что производительность именно этого блока упадет, но если ее достаточно для выполнения задачи, то.... %)


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 19 2012, 05:30
Сообщение #17


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Кстати, вы же тестируетесь с каким то кодером. Генераторный полином можно получить, подав "дельта импульс". последовательность со всеми нулевыми битами, кроме одного %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 19 2012, 09:33
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 19 2012, 09:30) *
Кстати, вы же тестируетесь с каким то кодером. Генераторный полином можно получить, подав "дельта импульс". последовательность со всеми нулевыми битами, кроме одного %)

Вы имеете ввиду подать на вход кодера дельта импульс? Еще было бы интересно посмотреть результаты для sibm алгоритма, чтобы сравнить.

Сообщение отредактировал Gold777 - Mar 19 2012, 09:34
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 19 2012, 13:27
Сообщение #19


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 19 2012, 04:33) *
Вы имеете ввиду подать на вход кодера дельта импульс?

да. нашел стандарт 975.1 там указаны функции циклотомических классов для получение генераторных полиномов GF(2^11), на досуге получу полином %)

Цитата
Еще было бы интересно посмотреть результаты для sibm алгоритма, чтобы сравнить.

а смысл? он гарантировано проиграет, для этого достаточно посмотреть как рассчитывается delta %)

bch_dec(ibm_2t) выполняется за 2t+1 = 17 тактов, 2816/957/145.69MHz
bch_dec(ibm_4t) выполняется за 4t+1 = 33 такта, 2212/959/188.08MHz
bch_dec(ibm_2t_by_t) выполняется за 2t + 2(t+1)^2+1 = 179 такта, 1805/1057/238.04MHz. Но этот в свое время конвейризировался по самое нехочу


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 19 2012, 14:30
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 19 2012, 17:27) *
да. нашел стандарт 975.1 там указаны функции циклотомических классов для получение генераторных полиномов GF(2^11), на досуге получу полином %)


а смысл? он гарантировано проиграет, для этого достаточно посмотреть как рассчитывается delta %)

bch_dec(ibm_2t) выполняется за 2t+1 = 17 тактов, 2816/957/145.69MHz
bch_dec(ibm_4t) выполняется за 4t+1 = 33 такта, 2212/959/188.08MHz
bch_dec(ibm_2t_by_t) выполняется за 2t + 2(t+1)^2+1 = 179 такта, 1805/1057/238.04MHz. Но этот в свое время конвейризировался по самое нехочу

Для этого кода (2040,1952) t= 8 G1(x) = x11 + x2 + 1, G3(x) = x11 + x5 + x3 + x2 + 1, G5(x) = x11 + x6 + x5 + x + 1, G7(x) = x11 + x7 + x3 + x2 + 1, G9(x) = x11 + x8 + x5 + x2 + 1, G11(x) = x11 + x8 + x6 + x5 + x4 + x + 1, G13(x) = x11 + x10 + x3 + x2 + 1, G15(x) = x11 + x10 + x9 + x8 + x3 + x + 1.
g(x)=G1(x)*G3(x)*G5(x)*G7(x)*G9(x)*G11(x)*G13(x)*G15(x)
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 19 2012, 16:03
Сообщение #21


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 19 2012, 08:30) *
Для этого кода (2040,1952) t= 8
g(x)=G1(x)*G3(x)*G5(x)*G7(x)*G9(x)*G11(x)*G13(x)*G15(x)

спасибо !!!


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Mar 19 2012, 19:26
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(des00 @ Mar 19 2012, 20:03) *
спасибо !!!


А так не проще: Если надо просто построить код, то набрать в матлабе строчку:

>> [genpoly,errorcorr] = BCHGENPOLY(2047,2047 - 11*8)
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 20 2012, 03:42
Сообщение #23


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SKov @ Mar 19 2012, 14:26) *
А так не проще: Если надо просто построить код, то набрать в матлабе строчку:

проще, но в матлабе что у меня на машине написано

Цитата
LimitationsThe maximum allowable value of n is 511.


у вас какая версия матлаба ?


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 20 2012, 04:15
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Для генерации длинных кодов я использовал следующий файл.
Прикрепленные файлы
Прикрепленный файл  bch.zip ( 1.18 килобайт ) Кол-во скачиваний: 128
 
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 20 2012, 05:17
Сообщение #25


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 19 2012, 22:15) *
Для генерации длинных кодов я использовал следующий файл.

о, это то что нужно. спасибо %)


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Mar 20 2012, 06:20
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(des00 @ Mar 20 2012, 07:42) *
проще, но в матлабе что у меня на машине написано

у вас какая версия матлаба ?


R2010a. Ограничение на степень двойки при генерации БЧХ - не более 16.
Так что до длин 65535 все должно работать.
Сейчас на рутрекере есть более поздняя версия матлаба.Может быть там еще лучше.
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 20 2012, 06:23
Сообщение #27


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SKov @ Mar 20 2012, 01:20) *
R2010a. Ограничение на степень двойки при генерации БЧХ - не более 16. Так что до длин 32767 все должно работать.

понятно, надо будет глянуть, я держу старую версию, т.к. ИМХО она быстрее в режиме косимуляции работает %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 22 2012, 17:01
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 18 2012, 19:28) *
Всем кто решиться использовать этот декодер при низких Eb/N0, надо помнить что в этом декодере, перебор ченя и коррекция ошибок происходят одновременно. Поэтому в случае отказа от декодирования, который определиться в конце ченя, декодер размножает ошибки. Что бы это побороть, нужно немного модифицировать ченя, выплюнуть сырые данные в фифошку/память вместе с коррекцией ошибок ну и потом считать с коррекцией или без %) но это не сложно и делается минут за 10-20 %)

Почему вы решили сделать процедуру Ченя и исправление ошибок одновременно?

Сообщение отредактировал Gold777 - Mar 22 2012, 17:02
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 23 2012, 05:57
Сообщение #29


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Mar 22 2012, 11:01) *
Почему вы решили сделать процедуру Ченя и исправление ошибок одновременно?

мне нужна была минимальная задержка, при этом на размножение ошибок можно было закрыть глаза.

Есть версия декодера лишенная этого недостатка выкладывать ее не вижу смысла. Любой разработчик сделает эту задачу максимум за пару часов (надо всего то, разбить ченя на 2 модуля с передачей подтверждений между ними). А кто не сможет волен обратиться за кастомизацией, о цене договоримся %))))))))))

Также есть версии декодера с динамически изменяемым {n, check}, но смысла выкладывать не вижу. Выложенные сорцы заточены под простую реализацию динамического изменения, кому надо тот сделает %)


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 25 2012, 13:37
Сообщение #30


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Правильно ли я понял, что для плис оптимизация поиска Ченя не актуальна?
Clock enable применен для энергосбережения?
Если в какой-то момент декодер мне не нужен, то я должен отключить clock enable. Перед включением сбросить ресетом(для инициализации) и подать clock enable?
Прикрепленные файлы
Прикрепленный файл  Strength_reduced_parallel_Chien_search_architecture_for_strong_BCH_codes.pdf ( 245.99 килобайт ) Кол-во скачиваний: 161
 
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 25 2012, 15:13
Сообщение #31


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Mar 25 2012, 17:37) *
Правильно ли я понял, что для плис оптимизация поиска Ченя не актуальна?

Пробовал оптимизировать процедуру Ченя, конкретнее оптимизировал умножители на константу, как представлено в статье. В итоге выигрыша никакого не получил. Но делал по циклон 3, возможно под другое железо что-то и получится.

Сообщение отредактировал Gold777 - Mar 25 2012, 15:14
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 25 2012, 16:04
Сообщение #32


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 25 2012, 07:37) *
Clock enable применен для энергосбережения?
Если в какой-то момент декодер мне не нужен, то я должен отключить clock enable. Перед включением сбросить ресетом(для инициализации) и подать clock enable?

clkena можно использовать по разному, в том числе и для энергосбережения. пока декодер не получит блок, он работать не будет. это видно из логики его работы. в случае энергосбережения, можно его не сбрасывать, но, в зависимости от того, в какой момент времени вы остановили декодер, на выходе может быть мусор после старта. Поэтому использовать сброс или нет зависит от вас %)
Цитата(Gold777 @ Mar 25 2012, 09:13) *
В итоге выигрыша никакого не получил.

я вам сразу про это сказал %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 25 2012, 16:15
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Mar 25 2012, 20:04) *
я вам сразу про это сказал %)

Да я помню. Хотел посмотреть ради интереса что изменится. Действительно вы были правы.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 25 2012, 19:46
Сообщение #34


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(des00 @ Mar 23 2012, 09:57) *
Также есть версии декодера с динамически изменяемым {n, check}, но смысла выкладывать не вижу. Выложенные сорцы заточены под простую реализацию динамического изменения, кому надо тот сделает %)


А {n,check} - в Вашей версии любые можно поставить на ходу или заранее определенный набор (набор определяется до синтеза) ? Модифицировал Ваш код для декодирования 12 кодов, каждый со своим {n,check}, длина до 16384. Декодер занимает около 5000 LE. С ростом количества кодов растет и декодер, примерно линейно. В основном это умножители в галуа на константы. Если бы были умножители числа на число, то от количества кодов декодер бы не так сильно рос. Только вот не знаю на сколько такое решение реально. Просто в моей задаче скорость не нужна (50 мгц за глаза), а вот количество кодов надо 36...
В Вашей версии динамически изменяемых {n,check} умножители в галуа также на константы или умножители динамического числа на динамическое число?

bb-offtopic.gif То что спрашивал у Вас по таймквесту, все вроде получилось в моделсиме, огромное спасибо! Надо дождаться железа и испытать в реале...
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 26 2012, 09:54
Сообщение #35


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(alexPec @ Mar 25 2012, 13:46) *
А {n,check} - в Вашей версии любые можно поставить на ходу или заранее определенный набор (набор определяется до синтеза) ?

Для работы мне нужны были с динамическим укорочением и с предопределенном набором check.
Цитата
Только вот не знаю на сколько такое решение реально. Просто в моей задаче скорость не нужна (50 мгц за глаза), а вот количество кодов надо 36...
В Вашей версии динамически изменяемых {n,check} умножители в галуа также на константы или умножители динамического числа на динамическое число?

Строго говоря сорцы что выложены, были оптимизированы (по логике и конвейеру) под конкретную реализацию статического декодера.

Для динамического декодера нужно делать немного по другому :
1. genstart == 0, это позволит очень просто считать синдромы по максимальному check (не нужна коррекция позиций синдромов) цена : дополнительный умножитель при расчете значений ошибок
2. везде считать на максимальный check
3. уйти с RIBM на rIBM алгоритм (не нужна коррекция позиций готового полинома локаторов). цена : несколько больший ресурс при последовательном вычислении.
4. ченя делать в обратном порядке в отдельном проходе (не нужна начальная коррекция при укорочении кода).

ну собственно все, в итоге ресурс декодера у вас будет чуть больше, чем статического декодера кода с максимальным check

Цитата
bb-offtopic.gif То что спрашивал у Вас по таймквесту, все вроде получилось в моделсиме, огромное спасибо! Надо дождаться железа и испытать в реале...

рад что вы разобрались в вопросе %)


И еще про динамическую конфигурацию. Если кол-во генераторных полиномов больше 4-х, то выгоднее поставить кодер с умножителями на число, иначе мультиплексор + 4 кодера %) (для полей GF(2^8)


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 26 2012, 13:29
Сообщение #36


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des00 @ Mar 26 2012, 03:54) *
ну собственно все, в итоге ресурс декодера у вас будет чуть больше, чем статического декодера кода с максимальным check

Если есть желание, можем скооперироваться и сделать ваш, полностью перестраиваемый декодер. Но с условием, сорцы открываем ? wink.gif


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 26 2012, 15:47
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Зачем нужна behavioral model? Чем это лучше симуляции синтезируемого кода? Ведь в разработку добавляется дополнительный этап сравнения двух моделей?
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 26 2012, 15:50
Сообщение #38


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 26 2012, 09:47) *
Зачем нужна behavioral model? Чем это лучше симуляции синтезируемого кода? Ведь в разработку добавляется дополнительный этап сравнения двух моделей?

а смотря код того и другого вы не можете сделать выводы? sm.gif вопросы методологии разработки неоднократно обсуждались на этом форуме, воспользуйтесь поиском. Эта тема не совсем для этого %)


--------------------
Go to the top of the page
 
+Quote Post
lomey
сообщение Mar 28 2012, 19:50
Сообщение #39





Группа: Новичок
Сообщений: 2
Регистрация: 27-03-12
Пользователь №: 71 038



Доброго времени суток!прочитал представленные исходники!и никак не могу разобраться, как все-таки поступать, в процедуре Ченя, с укороченными кодами?у меня получаются позиции ошибок но соответственно со смещением на длину укорочения кода!пытался задерживать FIFO на эту задержку но получается расхождение!может кто нибудь подскажет как правильно быть? заранее спасибо!
Go to the top of the page
 
+Quote Post
lomey
сообщение Mar 29 2012, 16:34
Сообщение #40





Группа: Новичок
Сообщений: 2
Регистрация: 27-03-12
Пользователь №: 71 038



Вопрос разрешился!))))
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Mar 29 2012, 17:48
Сообщение #41


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Делаю параллельный БЧХ. При этом он получается в несколько раз больше Рид-Соломона при той же пропускной способности. Так должно быть и почему?
Go to the top of the page
 
+Quote Post
Gold777
сообщение Mar 29 2012, 20:21
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Mar 29 2012, 21:48) *
Делаю параллельный БЧХ. При этом он получается в несколько раз больше Рид-Соломона при той же пропускной способности. Так должно быть и почему?

Я так понимаю все зависит от параметров ваших кодов.
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 30 2012, 08:15
Сообщение #43


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Mar 29 2012, 11:48) *
Делаю параллельный БЧХ. При этом он получается в несколько раз больше Рид-Соломона при той же пропускной способности. Так должно быть и почему?

вы хотели сказать при той же скорости кодирования и таком же размере блока в символах?


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 1 2012, 14:26
Сообщение #44


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Приведу пример 2 декодера BCH(2040,1930) по 8 бит занимают 20% в EP2AGX45DF29C4. При этом блок Berlekamp–Massey только один. 2 РС декодера RS(255,239) по 8 бит занимает примерно 500 ячеек, т.е. значительно меньше.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 1 2012, 15:07
Сообщение #45


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Apr 1 2012, 08:26) *
Приведу пример 2 декодера BCH(2040,1930) по 8 бит

если имелось в виду по 8 бит за 1 такт, то чему удивляться то? ручками распишите получаемую логику на уровне функций и это станет очевидно.

ЗЫ. если вам нужна производительсность бчх 8 бит за 1 такт (что, если брать например сыклон 3, соответствует ~200 мегабайт в секунду), то как вариант поставить 8 декодеров, с одним блоком BM.


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 3 2012, 07:57
Сообщение #46


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Очередное обновление :
1. Добавил все БЧХ полиномы, которые использовал и проверял
2. Добавил возможность изменять rootspace в кодере/декодере RS без стираний (по просьбе форумчан)
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_03042012.zip ( 110.05 килобайт ) Кол-во скачиваний: 88
 


--------------------
Go to the top of the page
 
+Quote Post
-Al-
сообщение Apr 3 2012, 09:11
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(des00 @ Apr 3 2012, 10:57) *
Очередное обновление :
1. Добавил все БЧХ полиномы, которые использовал и проверял
2. Добавил возможность изменять rootspace в кодере/декодере RS без стираний (по просьбе форумчан)

Жаль, что нет кнопочки "Спасибо!" sm.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 4 2012, 15:43
Сообщение #48


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



1. Добавил возможность изменять rootspace в кодере/декодере RS со стираниями (для общности)
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_04042012.zip ( 110.19 килобайт ) Кол-во скачиваний: 106
 


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 20 2012, 06:04
Сообщение #49


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Есть вопрос по парралельному декодеру. Если длина кодового слова не кратна ширине декодера, то в последнее слове передаются не значащие биты. Поэтому синдром считается не правильно. Как быть?
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 20 2012, 06:55
Сообщение #50


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Apr 20 2012, 00:04) *
Есть вопрос по парралельному декодеру. Если длина кодового слова не кратна ширине декодера, то в последнее слове передаются не значащие биты. Поэтому синдром считается не правильно. Как быть?

вырезать из расчета незначащие биты %)


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 20 2012, 07:02
Сообщение #51


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Я сделал так
Код
osyndrome <=  ieop? osyndrome_comb[n%dec_width]: osyndrome_comb[dec_width];

Где osyndrome_comb[n%dec_width] как раз синдром без учета последних бит.
Но в этом случае критический путь получился очень длинным
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 20 2012, 07:10
Сообщение #52


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Apr 20 2012, 02:02) *
Но в этом случае критический путь получился очень длинным

ну а как вы хотите по другому? %) за все надо платить. тут либо так, либо искать другие способы задать смещение начала/конца.

ЗЫ. почему бы вам не перенести этот мультиплексор за триггеры. хлопнуть синдромы в регистры, задержать управление на 1 такт ?


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Apr 23 2012, 16:33
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Apr 1 2012, 19:07) *
если имелось в виду по 8 бит за 1 такт, то чему удивляться то? ручками распишите получаемую логику на уровне функций и это станет очевидно.

ЗЫ. если вам нужна производительсность бчх 8 бит за 1 такт (что, если брать например сыклон 3, соответствует ~200 мегабайт в секунду), то как вариант поставить 8 декодеров, с одним блоком BM.

Если нужна производительность 8 бит за такт для кода длиной 2040, получается, что блок синдромов получит результат за 255 тактов. Т.е. за один так для первого синдрома вычисляется (alfa^1,alfa^2,alfa^3,..,alfa^8). Как вы предлагаете поставить 8 декодеров как-то не очень понятно? Если поставить 8 блоков подсчета синдромов параллельно, получается в первый блок идет первый бит, во второй блок 2-й бит и т.д, хотя этот второй бит нужен для подсчета в первом блоке. И еще вопрос как поступать, если нужна производительность 64 бита за такт для этого же кода? Думаю, что за 31-32 такта думаю по частоте не войдет.
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 24 2012, 05:16
Сообщение #54


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Может это поможет на ст 771. Если не секрет, делаете для G.975.1?
Прикрепленные файлы
Прикрепленный файл  IEICE_BCH_pub20100401.pdf ( 986.18 килобайт ) Кол-во скачиваний: 119
 
Go to the top of the page
 
+Quote Post
Gold777
сообщение Apr 24 2012, 07:44
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Apr 24 2012, 09:16) *
Может это поможет на ст 771. Если не секрет, делаете для G.975.1?

Получается надо обрабатывать по 8 бит или по 16, тогда возможно по частоте войдет. Да, делаю для G.975.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 24 2012, 09:43
Сообщение #56


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Apr 23 2012, 11:33) *
Как вы предлагаете поставить 8 декодеров как-то не очень понятно? Если поставить 8 блоков подсчета синдромов параллельно, получается в первый блок идет первый бит, во второй блок 2-й бит и т.д, хотя этот второй бит нужен для подсчета в первом блоке. И еще вопрос как поступать, если нужна производительность 64 бита за такт для этого же кода? Думаю, что за 31-32 такта думаю по частоте не войдет.

а если заранее, записать 8 фреймов в память перед декодированием и после декодирования ? wink.gif


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 24 2012, 10:03
Сообщение #57


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Нужно сохранять синдром и поочереди подавать их в БМ.
Как я понял вы делаетет I.4. Почему выбрали этот алгоритм? Еще более не скромный вопрос: Т8 или Орион?
Go to the top of the page
 
+Quote Post
Gold777
сообщение Apr 24 2012, 13:53
Сообщение #58


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Apr 24 2012, 14:03) *
Нужно сохранять синдром и поочереди подавать их в БМ.
Как я понял вы делаетет I.4. Почему выбрали этот алгоритм? Еще более не скромный вопрос: Т8 или Орион?

Я делаю I.3. I.4 сделал там вроде все понятно, идет распараллеливание данных на 64 блока т.к каждый бит принадлежит отдельному кодовому слову. Если вы сделали I.3, расскажи как. Еще интересно сколько ваши декодеры заняли ресурсов.
Поймите правильно, но мне бы не хотелось называть организацию в которой работаю.

Цитата(des00 @ Apr 24 2012, 13:43) *
а если заранее, записать 8 фреймов в память перед декодированием и после декодирования ? wink.gif

Собственно так и собрался делать.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 24 2012, 16:14
Сообщение #59


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Apr 24 2012, 08:53) *
Собственно так и собрался делать.

beer.gif оптимальные решения они всегда в одной области находяться.

ЗЫ. Интересно мнение форумчан, как вы смотрите на то, что бы пополнить тему декодерами : витерби, турбо (на основе БЧХ кодов было бы интересно порыть), LDPC (интересно порыть, т.к. в этой теме ничего не понимаю)? И сопутствующий вопрос, как тестировать вероятностные декодеры без матлаба? сгородить в верилоге модулятор/демодулятор + модель awgn ?


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Apr 24 2012, 16:31
Сообщение #60


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



I.3 я сделал. Какие есть конкретные вопросы. По ресурсам сложно сказать, так как нужно еще оптимизировать кое-что. Чем не устроил I.4?

Сообщение отредактировал Denisnovel - Apr 24 2012, 16:33
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 24 2012, 16:35
Сообщение #61


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(des00 @ Apr 24 2012, 19:14) *
турбо (на основе БЧХ кодов было бы интересно порыть)

есть такие практические схемы турбокодов-произведения на основе БЧХ.

Цитата(des00 @ Apr 24 2012, 19:14) *
И сопутствующий вопрос, как тестировать вероятностные декодеры без матлаба? сгородить в верилоге модулятор/демодулятор + модель awgn ?

я использую собственные программные модели (С++) модулятор/демодулятор + модель awgn.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 24 2012, 16:44
Сообщение #62


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Serg76 @ Apr 24 2012, 11:35) *
есть такие практические схемы турбокодов-произведения на основе БЧХ.

как раз от вас я о них и слышал %), не поделитесь ссылками?
Цитата
я использую собственные программные модели (С++) модулятор/демодулятор + модель awgn.

вы же вроде как делаете как раз все для PC платформы, или вы через DPI портируете это в HDL симуляторы и тестируете HDL корки ?


--------------------
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 24 2012, 16:59
Сообщение #63


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(des00 @ Apr 24 2012, 19:44) *
как раз от вас я о них и слышал %), не поделитесь ссылками?

по-моему здесь http://www.google.com.ua/url?sa=t&rct=...c2g&cad=rja

Цитата(des00 @ Apr 24 2012, 19:44) *
вы же вроде как делаете как раз все для PC платформы, или вы через DPI портируете это в HDL симуляторы и тестируете HDL корки ?

неа, только программное моделирование
Go to the top of the page
 
+Quote Post
Gold777
сообщение Apr 24 2012, 17:02
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Apr 24 2012, 20:31) *
I.3 я сделал. Какие есть конкретные вопросы. По ресурсам сложно сказать, так как нужно еще оптимизировать кое-что. Чем не устроил I.4?

Интересует реализация внутреннего декодера. Судя по документу, который скинули, у вас следующая схема: 8 блоков вычисления синдромов на входе по 8 бит, один блок решателя ключевого уравнения обрабатывающий данные с 8-ми каналов по очереди, 8 блоков Ченя по 8 бит. Записать 8 блоков данных в память перед декодированием и после декодирования (Вот этот момент особенно интересует). Вы так сделали? И еще по ресурсам было бы интересно хотя бы приблизительные результаты оценить. Можно в личку. I.4 устроил, но надо остальные FEC схемы реализовать.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 24 2012, 17:03
Сообщение #65


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Serg76 @ Apr 24 2012, 11:59) *
по-моему здесь

большое спасибо, начну копать %)


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jun 25 2012, 11:39
Сообщение #66


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



To des00
Хочу сделать, чтобы IBM работал на частоте в два раза меньше. Для этого делаю multicycle как описано у вас в блоге. Причем в проекте несколько разных декодеров. Правильно ли я задал констрейты?
Код
set_multicycle_path -from {*bch_berlekamp:berlekamp|*} -to {*bch_berlekamp:berlekamp|*} -setup -end 2
set_multicycle_path -from {*bch_berlekamp:berlekamp|*} -to {*bch_berlekamp:berlekamp|*} -hold -end 1

Clock Enable для входа в модуле bch_berlekamp генерится следующем образом.
Код
iclkena <= ~iclkena;


Сообщение отредактировал Denisnovel - Jun 25 2012, 11:42
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 25 2012, 16:00
Сообщение #67


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Jun 25 2012, 05:39) *
Хочу сделать, чтобы IBM работал на частоте в два раза меньше. Для этого делаю multicycle как описано у вас в блоге. Причем в проекте несколько разных декодеров. Правильно ли я задал констрейты?
Код
set_multicycle_path -from {*bch_berlekamp:berlekamp|*} -to {*bch_berlekamp:berlekamp|*} -setup -end 2
set_multicycle_path -from {*bch_berlekamp:berlekamp|*} -to {*bch_berlekamp:berlekamp|*} -hold -end 1

Clock Enable для входа в модуле bch_berlekamp генерится следующем образом.
Код
iclkena <= ~iclkena;


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

Если по мультициклам, то их накладывают на цепи между регистрами источниками сигнала и приемниками. Где в вашей команде указано что это относиться к регистрами ? sm.gif)


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jun 26 2012, 04:25
Сообщение #68


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



В моём кнстрейте описывается, что все регистры в модуле bch_berlekamp:berlekamp работают на частоте в два раза меньше. Т.е. источником и приемником является эти регистры. Или я не прав?
Если я захочу сделать частоту в 2 раза меньше, то в PLL я должен выдать синхроную частоту. Как это описать?

Сообщение отредактировал Denisnovel - Jun 26 2012, 04:30
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 26 2012, 04:50
Сообщение #69


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Jun 25 2012, 22:25) *
В моём кнстрейте описывается, что все регистры в модуле bch_berlekamp:berlekamp работают на частоте в два раза меньше. Т.е. источником и приемником является эти регистры. Или я не прав?

хммм, вообще то регистры описываются через команду get_registers wink.gif

Цитата
Если я захочу сделать частоту в 2 раза меньше, то в PLL я должен выдать синхроную частоту. Как это описать?

хммм, сгененрировать PLL и посмотреть на вейвформы ее работы?


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jun 26 2012, 09:15
Сообщение #70


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



А если написать так, то между регистрами модуля БМ будет увеличенный период?
Код
set_multicycle_path -from [get_registers{*bch_berlekamp:berlekamp|*}] -to  [get_registers{*bch_berlekamp:berlekamp|*}] -setup -end 2
set_multicycle_path -from  [get_registers{*bch_berlekamp:berlekamp|*}] -to  [get_registers{*bch_berlekamp:berlekamp|*}] -hold -end 1

С PLL не поял? Допустим, я сделал синхронную частоту в два раза меньше, подал её на модуль БМ, как синхронизировать данные между этими clock domain? sad.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 26 2012, 14:40
Сообщение #71


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Jun 26 2012, 04:15) *
А если написать так, то между регистрами модуля БМ будет увеличенный период?

смотрите что говорит TQ, если он скажет что будет, значит будет. %)
Цитата
С PLL не поял? Допустим, я сделал синхронную частоту в два раза меньше, подал её на модуль БМ, как синхронизировать данные между этими clock domain? sad.gif

а если сделаете пусть и на одной частоте но с clkena синхронизировать не потребуется ? sm.gif Повторю еще раз, прочитайте что такое PLL и ее свойства. Сгенерируйте в мегавизарде PLL и посмотрите на вейвформы выходных сигналов. Тогда сразу все поймете %)


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jun 28 2012, 19:36
Сообщение #72


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



По PLL я имею ввиду, что одна ПЛЛ генерирует быстрый и медленный клок, то есть они синхронные, как на картинке выше . Ну да оставим PLL.
У меня работает первый вариант задания контстрейтов rolleyes.gif , TQ распознает их как мультисайкл. Самый критичный путь в этом случае от clken до регистров модуля БМ.
Еще вопрос. Правильно ли я понимаю, что БЧХ может детектировать ошибки больше t, но меньше 2t, и определять их количество?
Go to the top of the page
 
+Quote Post
Gold777
сообщение Jun 29 2012, 13:23
Сообщение #73


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Denisnovel @ Jun 28 2012, 23:36) *
Еще вопрос. Правильно ли я понимаю, что БЧХ может детектировать ошибки больше t, но меньше 2t, и определять их количество?

БЧХ может детектировать 2t ошибок
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 29 2012, 13:35
Сообщение #74


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Denisnovel @ Jun 28 2012, 23:36) *
Еще вопрос. Правильно ли я понимаю, что БЧХ может детектировать ошибки больше t, но меньше 2t, и определять их количество?

Количество не может. Только сам факт наличия где-то ошибок кратности от 1 до d-1.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 29 2012, 13:55
Сообщение #75


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Jun 28 2012, 14:36) *
У меня работает первый вариант задания контстрейтов rolleyes.gif , TQ распознает их как мультисайкл.

значит TQ вас понял %)

Цитата(SKov @ Jun 29 2012, 08:35) *
Количество не может. Только сам факт наличия где-то ошибок кратности от 1 до d-1.

Вот интересно, как я понял из учебников по кодированию, сам код БЧХ позволяет обнаружить большее кол-во ошибок, но не все из них. Ограничение d-1 связанно с использованием стандартных методов декодирования, через решение системы уравнений. Интересно чисто теоретически, есть ли методы позволяющие преодолеть эту границу? (ну кроме полного перебора или синдромного декодирования что почти тоже самое).


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 29 2012, 14:34
Сообщение #76


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(des00 @ Jun 29 2012, 17:55) *
Вот интересно, как я понял из учебников по кодированию, сам код БЧХ позволяет обнаружить большее кол-во ошибок, но не все из них. Ограничение d-1 связанно с использованием стандартных методов декодирования, через решение системы уравнений. Интересно чисто теоретически, есть ли методы позволяющие преодолеть эту границу? (ну кроме полного перебора или синдромного декодирования что почти тоже самое).


То, что я написал, не имеет отношение к БЧХ и справедливо для любого кода.
Вообще, способность кода к обнаружению ошибок не имеет отношения к методу декодирования - это свойство кода, а не декодера.
В принципе, код может обнаружить любую ошибку, не совпадающую с кодовым словом.
Понятно, что некоторые ошибки веса d в принципе не могут быть обнаружены, если совпадают с кодовым словом.
Если поделить количество кодовых слов веса d на общее количество векторов веса d, то легко посчитать,
с какой вероятностью можно НЕ обнаружить ошибку веса d.
Количество кодовых слов мин. веса для большинства коротких БЧХ известно точно.
Для длинных кодов БЧХ известно, что их весовой спектр приближается к биномиальному распределению с ростом длины.
Иногда можно пользоваться грубой оценкой необнаружения ошибки в виде 1/(2^r).
Go to the top of the page
 
+Quote Post
Gold777
сообщение Jun 29 2012, 17:51
Сообщение #77


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Возник следующий вопрос. К примеру исправляющая способность кода 8 ошибок. На передающей стороне мы внесли 10 ошибок. Соответственно декодер может обнаружить 16 ошибок. Можем ли мы на этапе декодирования каким-либо образом сказать сколько конкретно ошибок у нас возникло или мы можем только гарантированно сказать что их больше восьми?
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 29 2012, 18:35
Сообщение #78


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Gold777 @ Jun 29 2012, 21:51) *
Возник следующий вопрос. К примеру исправляющая способность кода 8 ошибок. На передающей стороне мы внесли 10 ошибок. Соответственно декодер может обнаружить 16 ошибок. Можем ли мы на этапе декодирования каким-либо образом сказать сколько конкретно ошибок у нас возникло или мы можем только гарантированно сказать что их больше восьми?

Гарантированно мы не можем сказать ничего.
Есть след. варианты.
1) На расстоянии D (D<9) от принятого вектора есть кодовое слово. Тогда произошло либо D ошибок либо, как минимум, d-D.
2) Ближайший кодовый вектор находится на расстоянии D (D>8). Тогда произошло не менее D ошибок.
Это все, что можно сказать.
В вашем конкретном случае 10 ошибок могли лечь как кодовое слово, тогда вы увидете кодовое слово на расстоянии 6 от принятого вектора.
Это значит, что ошибок было либо 6, либо как минимум 16-6.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 30 2012, 05:43
Сообщение #79


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SKov @ Jun 29 2012, 09:34) *
То, что я написал, не имеет отношение к БЧХ и справедливо для любого кода.

Спасибо за развернутый ответ, то что вы пишите понятно и сомнению не подлежит. Мой же вопрос заключался в существовании алгоритма декодирования БЧХ кодов, который обладает возможностью исправлять часть ошибок больше D (ведь по теории можно).

Т.е. ИМХО классический БЧХ декодер обладает фиксированными, не вероятностными характеристиками (в не в том смысле что вероятность ошибки к нему не применима, а в том смысле что от прогона к прогону на случайном потоке он будет давать одинаковый результат), существует ли метод декодирования (итеративный алгоритм чейза не рассматриваем) позволяющий выйти за эти границы БЧХ ?

ЗЫ. могу путать термины теории кодирования, прошу строго не судить %)


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Jun 30 2012, 06:07
Сообщение #80


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(des00 @ Jun 30 2012, 09:43) *
Спасибо за развернутый ответ, то что вы пишите понятно и сомнению не подлежит. Мой же вопрос заключался в существовании алгоритма декодирования БЧХ кодов, который обладает возможностью исправлять часть ошибок больше D (ведь по теории можно).

Т.е. ИМХО классический БЧХ декодер обладает фиксированными, не вероятностными характеристиками (в не в том смысле что вероятность ошибки к нему не применима, а в том смысле что от прогона к прогону на случайном потоке он будет давать одинаковый результат), существует ли метод декодирования (итеративный алгоритм чейза не рассматриваем) позволяющий выйти за эти границы БЧХ ?

ЗЫ. могу путать термины теории кодирования, прошу строго не судить %)

Вы уже как-то задавали этот вопрос. Я помню, что были работы, позволяющие исправлять на одну ошибку больше,
чем гарантирует граница БЧХ. Вроде, иногда можно исправить +2 ошибки. Больше я не видел.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 30 2012, 06:46
Сообщение #81


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SKov @ Jun 30 2012, 01:07) *
Вы уже как-то задавали этот вопрос. Я помню, что были работы, позволяющие исправлять на одну ошибку больше,
чем гарантирует граница БЧХ. Вроде, иногда можно исправить +2 ошибки. Больше я не видел.

Хммм вроде вопрос касался расширенных кодов БЧХ с добавлением бита четности. Но скорее всего запамятовал %) Спасибо.


--------------------
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Jul 2 2012, 09:32
Сообщение #82


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



To des00

Денис, не появилось ли нового релиза с расчетом генераторного полинома БЧХ? blush.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 2 2012, 19:19
Сообщение #83


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Koluchiy @ Jul 2 2012, 03:32) *
To des00

Денис, не появилось ли нового релиза с расчетом генераторного полинома БЧХ? blush.gif

к сожалению нет, стоит появиться свободному времени как его тут же занимают новым проектом, со сроком готовности вчера или отправляют в командировку %( поэтому в FEC овских делах стою на месте


--------------------
Go to the top of the page
 
+Quote Post
Denisnovel
сообщение Jul 4 2012, 13:04
Сообщение #84


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753



Почему размерность порта количества ошибок m?
Код
logic [m-1 : 0] obiterr

Может лучше привязать его к количесту исправляемых ошибок
Код
logic [$clog2(t)-1:0]  obiterr
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 4 2012, 17:13
Сообщение #85


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Denisnovel @ Jul 4 2012, 07:04) *
Почему размерность порта количества ошибок m?
Код
logic [m-1 : 0] obiterr

Может лучше привязать его к количесту исправляемых ошибок
Код
logic [$clog2(t)-1:0]  obiterr

ваша правда, можно но смысл ? при вариации типов декодеров постоянно отслеживать разрядность этого порта? Экономия копейки, требуется введение нового типа, да и кому нужно переписать не сложно %)


--------------------
Go to the top of the page
 
+Quote Post
nkie
сообщение Oct 3 2012, 09:54
Сообщение #86


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 29-01-09
Пользователь №: 44 114



Возможно мой вопрос покажется глупым, но я пытаюсь разобраться в SystemVerilog и тестбенчах. Пример из обсуждаемого здесь проекта:
Код
  rs_enc
  #(
    .n        ( n             ) ,
    .check    ( check         ) ,
    .m        ( m             ) ,
    .irrpol   ( irrpol        ) ,
    .genstart ( used_genstart )
  )
  uut_enc
  (
    .iclk    ( iclk      ) ,
    .iclkena ( iclkena   ) ,
    .ireset  ( ireset    ) ,
    //
    .isop    ( isop      ) ,
    .ieop    ( ieop      ) ,
    .ieof    ( ieof      ) ,
    .ival    ( ival      ) ,
    .idat    ( idat      ) ,
    //
    .osop    ( enc__osop ) ,
    .oval    ( enc__oval ) ,
    .oeop    ( enc__oeop ) ,
    .odat    ( enc__odat )
  );

Взято из файла тест бенча rs_eras_enc_dec_tb.v
Что означает
Код
rs_enc
  #(
    .n        ( n             ) ,
    .check    ( check         ) ,
    .m        ( m             ) ,
    .irrpol   ( irrpol        ) ,
    .genstart ( used_genstart )
  )

Понятно что uut_enc - наследник или копия модуля rs_enc, но за что отвечает здесь #(...)?

Цитата(nkie @ Oct 3 2012, 13:22) *
... но за что отвечает здесь #(...)?

все разобрался, передача параметров...
Go to the top of the page
 
+Quote Post
Костян
сообщение Oct 19 2012, 08:18
Сообщение #87


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Как оптимизировать рассчет GPOLY ?
Синтезатор (использую synplify) на следующий код делает на 12 страниц RTL, содержащий ПЗУ и логику, тогда как на выходе всего лишь массив констант GPOLY
CODE
`include "rsParam.vh"
`include "gfFunctions.vh"

module testEnc (


    output gpoly_t  dataOut    //%Данные выход кодера
    );

    
//-----------------------------------------------------------
//% формирование таблиц
//-----------------------------------------------------------
gpoly_t GPOLY;

rom_t     ALPHA_TO;
rom_t     INDEX_OF;


    always_comb
    begin
    
        ALPHA_TO  = generate_gf_alpha_to_power(irrpol);
        INDEX_OF  = generate_gf_index_of_alpha(ALPHA_TO);

        GPOLY     = generate_pol_coeficients (genstart, rootspace, check, generate_gf_index_of_alpha(generate_gf_alpha_to_power(irrpol)),  generate_gf_alpha_to_power(irrpol));
        dataOut = GPOLY;
    end

endmodule


Go to the top of the page
 
+Quote Post
Костян
сообщение Oct 19 2012, 10:30
Сообщение #88


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



собрал в квартусе. на выходе константа blink.gif
проблема видимо в synplify
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 19 2012, 11:09
Сообщение #89


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Костян @ Oct 19 2012, 04:30) *
собрал в квартусе. на выходе константа blink.gif
проблема видимо в synplify

Извините что не ответил сразу, да проблема именно в симплифае. По непонятным причинам он не может рассчитать генераторный полином по этой функции. Причем в режиме VHDL все ок, а вот в Verilog ну никак. Поэтому когда потребовалось запустить декодер под хилых, из моделсима прочитал полином и задал руками %)

ЗЫ. под режимом VHDL/Verilog понимается то что эта функция есть на обоих языках.

ЗЗЫ. Небольшой анонс : на подходе БЧХ со стираниями, декодер витерби, как обычно все под лицензией free for use sm.gif


--------------------
Go to the top of the page
 
+Quote Post
Костян
сообщение Oct 19 2012, 11:55
Сообщение #90


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (des00 @ Oct 19 2012, 10:09) *
Извините что не ответил сразу, да проблема именно в симплифае. По непонятным причинам он не может рассчитать генераторный полином по этой функции. Причем в режиме VHDL все ок, а вот в Verilog ну никак. Поэтому когда потребовалось запустить декодер под хилых, из моделсима прочитал полином и задал руками %)

спасибо, так и делал изначально: lol.gif
CODE
    always_comb
    begin
    
        // ALPHA_TO  = generate_gf_alpha_to_power(irrpol);
        // INDEX_OF  = generate_gf_index_of_alpha(ALPHA_TO);

        // GPOLY     = generate_pol_coeficients (genstart, rootspace, check, generate_gf_index_of_alpha(generate_gf_alpha_to_power(irrpol)),  generate_gf_alpha_to_power(irrpol));        
                            //$display ("GPOLY=%p",GPOLY);
        GPOLY = {1, 12'd1023, 12'd3523, 12'd1566, 12'd4068, 12'd3078, 12'd2862, 12'd2296, 12'd4030, 12'd3332, 12'd2733};

        
    end

Причем ALPHA_TO и INDEX_OF рассчитывается без проблем. С помощью атрибутов пытаюсь заставить работать и расчет GPOLY.
была идея, указал даже явно ROM STYLE как logic , все равно синтезатор наделал ПЗУ-шек. Мне не жалко лишней логике, но в моем случае при m=12 синфлифай жрет всю доступную память ПК и вылетает с ошибкой.


Есть еще вопрос, то ли пятница, то ли еще что, не могу разобраться, как Вы раскрыли скобки при вычислении GPOLY = (X+a)(X+a^2)(X+a^3) и т.д. в функции generate_pol_coeficients. Поясните, пожалуйста, на пальцах smile3046.gif


P.S тогда как RTL в synplify загружен логикой и ПЗУ, technology view имеет константу. весьма любопытно sm.gif. это как он аккуратно по коду идет , боится оптимизировать лишнее.
P.S. нашел причинную функцию. synplify стесняется оптимизировать ПЗУ в функции gf_mul
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 19 2012, 15:26
Сообщение #91


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Костян @ Oct 19 2012, 06:55) *
Есть еще вопрос, то ли пятница, то ли еще что, не могу разобраться, как Вы раскрыли скобки при вычислении GPOLY = (X+a)(X+a^2)(X+a^3) и т.д. в функции generate_pol_coeficients. Поясните, пожалуйста, на пальцах smile3046.gif

там непосредственное перемножение полиномов.

Шаг 1. берем x+a
Шаг 2. умножаем на (x+a^2). получаем x^2 + x(a + a^2) + (a*a^2).
Шаг 3. умножаем на (x+a^3). получаем x^3 + x^2(a + a^2 + a^3) + x(a*a^2 + a^3*(a+a^2)) + (a*a^2*a^3).
и т.д.

Т.е. gf_mul в этой функции это учет раскрытия скобок с умножением на следующий корень, а gf_add это накопление значения при коэффициенте.

Цитата
P.S. нашел причинную функцию. synplify стесняется оптимизировать ПЗУ в функции gf_mul

можно переделать идеальный gf_mul на синтезируемый gf_mult_a_by_b, может тогда ему станет лучше. но мне было лень это делать %)


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 30 2012, 06:21
Сообщение #92


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Koluchiy @ Jul 2 2012, 03:32) *
Денис, не появилось ли нового релиза с расчетом генераторного полинома БЧХ? blush.gif

1. Реализована функция расчета генераторного полинома БЧХ. В качестве прототипа использовалась функция из матлаба.

Сравнил с полиномами из таблицы один в один. В симуляторе все прекрасно работает. Но при синтезе ква 9.1 долго думает когда ищет циклотомические классы. Но тем не менее полином в ква 9.1 считается и ресурс энкодера после синтеза такой же что и при использовании таблиц. Из особенностей : т.к. кол-во классов и членов классов априори не известно, а ква не может использовать массивы больше чем 2^28 бит, настройка размерностей массивов в функции генерации полиномов задается в ручную через макросы (файл bch_define.v).

Цитата(Костян @ Oct 19 2012, 04:30) *
проблема видимо в synplify

2. Заменил функции gf_add/gf_mul в генерации полинома РС на синтезируемые xor/gf_mult_a_by_b. Тест показал что все работает, ква тоже съел и не подавился. Сделал для проверки синтезируемости на сторонних синтезаторах (в частности Symplify)
Прикрепленные файлы
Прикрепленный файл  bch_rs_release_30102012.zip ( 112 килобайт ) Кол-во скачиваний: 130
 


--------------------
Go to the top of the page
 
+Quote Post
Костян
сообщение Oct 30 2012, 09:35
Сообщение #93


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (des00 @ Oct 30 2012, 05:21) *
2. Заменил функции gf_add/gf_mul в генерации полинома РС на синтезируемые xor/gf_mult_a_by_b. Тест показал что все работает, ква тоже съел и не подавился. Сделал для проверки синтезируемости на сторонних синтезаторах (в частности Symplify)

стесняюсь спросить, а какая разрядность Вашего Symplify ? 32 или 64 ? У меня лицензия только под 32 позволяет работать. Менял я уже gf_mult на gf_mult_a_by_b. Это для 32 бит ничего не давало. Видимо в разрядности синтезатора собака зарыта.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 30 2012, 09:40
Сообщение #94


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Костян @ Oct 30 2012, 03:35) *
стесняюсь спросить, а какая разрядность Вашего Symplify ? 32 или 64 ? У меня лицензия только под 32 позволяет работать. Менял я уже gf_mult на gf_mult_a_by_b. Это для 32 бит ничего не давало. Видимо в разрядности синтезатора собака зарыта.

да у меня пока никакого нету, ставить надо %)


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Oct 30 2012, 16:59
Сообщение #95


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



При декодировании кода Рида-Соломона (к примеру RS(255,239)) заметил такую особенность: когда ошибок в сигнале нет первый синдром практически всегда получается ненулевым, остальные S2..S16 равны нулю. Решатель ключевого уравнения показывает что кол-во ошибок равно нулю и собственно ничего не исправляется. Все таки непонятно почему первый синдром ненулевой?Ведь по теории такого быть не должно (если ошибок нет значит все синдромы должны быть равны нулю!!!). Интересно, что при внесении ошибок неправильного исправления не наблюдал. У БЧХ такой закономерности не встречал.

Сообщение отредактировал Gold777 - Oct 30 2012, 17:01
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 30 2012, 17:39
Сообщение #96


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Oct 30 2012, 11:59) *
При декодировании кода Рида-Соломона (к примеру RS(255,239)) заметил такую особенность:

ищите ошибку, вот результат прогона 10 блоков такого кода без ошибок
Код
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# tb.uut_dec.genblk1.rs_berlekamp.genblk1.rs_berlekamp get syndromes :    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
# test done. block num = 10 :: errors == 0, warnings = 0 occured


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Oct 30 2012, 18:58
Сообщение #97


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Спасибо, буду искать ошибку. Странно, что у БЧХ такого не наблюдалось.
Go to the top of the page
 
+Quote Post
Gold777
сообщение Nov 1 2012, 18:12
Сообщение #98


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(Gold777 @ Oct 30 2012, 20:59) *
При декодировании кода Рида-Соломона (к примеру RS(255,239)) заметил такую особенность: когда ошибок в сигнале нет первый синдром практически всегда получается ненулевым, остальные S2..S16 равны нулю. Решатель ключевого уравнения показывает что кол-во ошибок равно нулю и собственно ничего не исправляется. Все таки непонятно почему первый синдром ненулевой?Ведь по теории такого быть не должно (если ошибок нет значит все синдромы должны быть равны нулю!!!). Интересно, что при внесении ошибок неправильного исправления не наблюдал. У БЧХ такой закономерности не встречал.

Более подробно опишу ранее описанную проблему. При расчете синдромов первый синдром вычисляю подставляя alfa^1 т.е. S1(alfa^1 ), S2(alfa^2), S16(alfa^16) или надо первый синдром считать подставляя alfa^0 т.е. S1(alfa^0)...S16(alfa^15)? Если расчет по второму варианту делать, то если нет ошибок все синдромы равны нулю (Позиции ошибок считаются правильно, а величины). По первому варианту S16(alfa^16) получается ненулевым (при этом позиции ошибок и величины считаются верно). Вот не могу понять, где у меня ошибка и какой вариант при расчете правильный? И еще вопрос все ли 16 синдромов всегда используются при декодировании или можно не все их вычислять(по идее существует 2^128 различных вариантов комбинаций синдромов, а возможных комбинаций ошибок и величин будет меньше)?

Сообщение отредактировал Gold777 - Nov 1 2012, 19:01
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 2 2012, 08:43
Сообщение #99


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Nov 1 2012, 12:12) *
Вот не могу понять, где у меня ошибка и какой вариант при расчете правильный?

Все зависит от того, как именно у вас рассчитан генераторный полином. Если вы брали корни полинома как a^[0:check] то и синдромы нужно считать для корней со степенями [0:check], если a^[1:check+1] то соответственно будет сдвиг.

Цитата
И еще вопрос все ли 16 синдромов всегда используются при декодировании или можно не все их вычислять(по идее существует 2^128 различных вариантов комбинаций синдромов, а возможных комбинаций ошибок и величин будет меньше)?

ИМХО нужно вычислять все, могу ошибаться. Думаю что гуру поправят %)


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Nov 2 2012, 09:31
Сообщение #100


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(des00 @ Nov 2 2012, 12:43) *
ИМХО нужно вычислять все, могу ошибаться. Думаю что гуру поправят %)

Если у вас 2^128 разных синдромов, то ровно столько различных
ошибок может исправлять код. Там могут быть и ошибки веса много больше Dмин/2.
Исправить все можно, например, полным перебором кодовых слов (если много свободного времени wink.gif)
Чем больше Dмин, тем дальше код от плотной упаковки и тем больше тяжелых ошибок (больше Dмин/2)
он в принципе может исправлять.
Вообще, не обязательно исправлять совсем все ошибки для хорошего декодера.
Есть , например, такой результат: достаточно исправлять все ошибки,
которые может исправить код, до веса Dвг,тогда вероятность ошибки декодирования не более чем вдвое
превосходит вероятность ошибки при декодировании полным перебором.
Здесь Dвг означает мин. расст. для данного кода, которое получается
из границы Варшамова-Гильберта для данных кодовых параметров.
Другое дело, что ваш конкретный алгоритм исправляет только часть этих ошибок.
Наример, он не исправляет ошибки веса больще Dмин/2.
Но если вы не будете в алгоритме испрользовать часть синдрома,
то часть исправимых алгоритмом ошибок еще больше уменьшится,
т.е. вы не сможете исправлять даже некоторые ошибки веса меньше Dмин/2.
Go to the top of the page
 
+Quote Post

11 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 16:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.02728 секунд с 7
ELECTRONIX ©2004-2016