Перейти к содержанию
    

BCH IP Core

http://home.agh.edu.pl/~jamro/bch_thesis/proj.zip

http://home.agh.edu.pl/~jamro/bch_thesis/examples.zip

 

Генерил BCH code (127,113), t=2 работает корректно,

хотя код надо причесать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Это уже тестировал. Функционально всё работает. Но после синтезиса с QuartusII временные диаграмы вместе резултата показывает "X". Снизение частоты не помогло. Я знаю я только VHDL, а там - Verilog. Так что редактировать не знаю как :(

 

P.S. мне тоже нужен BCH (127,113), t=2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю где вы там нашли верил

 

-- File generated by bch.exe program.

-- The encoder for BCH code (127,113), t=2

-- with optimization= 1.

-- GF(2^7) is generated by polynomial [1+x+...] - 10010001;

--

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all;

 

ENTITY bch_encode IS

port(

clk, reset, din: in bit;

vdin, dout: out bit ); --output serial data

END ENTITY bch_encode; -- vdin - valid data in - to enable external data shifting

 

architecture rtl of bch_encode is

 

CONSTANT m: INTEGER:= 7;

-- CONSTANT n: INTEGER:= 127; -- n= 2^m -1 -size of block

-- CONSTANT k: INTEGER:= 113; -- BCH code (n,k) -no. of information bits

CONSTANT nk: INTEGER:= 14; -- nk=n-k

 

signal vdin1, rin, rout, rll: BIT;

-- rll-ring loop lock, pe-parallel enable din

 

signal cout: bit_vector(0 to m-1); -- cout in GF(2^m); cout= L^count

signal vdinR, vdinS, vdin2: bit;

 

signal reg_in, reg_out: bit_vector(0 to nk-1); -- ring register

signal reg_in0: bit;

 

 

begin

rout <= reg_out(nk-1);

reg_in0 <= (rin XOR reg_out(nk-1)) AND rll;

 

reg_in(0)<= reg_in0;

reg_in(1)<= reg_out(0) XOR reg_in0;

reg_in(2)<= reg_out(1) XOR reg_in0;

reg_in(3)<= reg_out(2);

reg_in(4)<= reg_out(3) XOR reg_in0;

reg_in(5)<= reg_out(4) XOR reg_in0;

reg_in(6)<= reg_out(5) XOR reg_in0;

reg_in(7)<= reg_out(6);

reg_in(8)<= reg_out(7) XOR reg_in0;

reg_in(9)<= reg_out(8) XOR reg_in0;

reg_in(10)<= reg_out(9);

reg_in(11)<= reg_out(10);

reg_in(12)<= reg_out(11);

reg_in(13)<= reg_out(12);

-- Polynomial generating encoder: 1+a1*x+a2*x^2+...

-- 111011101100001

-- Number of XOR gates= 7

 

vdinR <= cout(0) AND NOT cout(1) AND cout(2) AND NOT cout(3)

AND cout(4) AND cout(5) AND cout(6);

-- reset vdin if cout==k-1

vdinS <= (NOT cout(0) AND NOT cout(1) AND cout(2) AND NOT cout(3)

AND NOT cout(4) AND NOT cout(5) AND cout(6)) OR reset;

-- vdinS=1 if cout==n-1

vdin1 <= vdin2 AND NOT reset;

 

rin <= din AND NOT reset;

rll <= vdin1 AND NOT reset;

vdin <= vdin1;

 

process(clk)

begin

-- if (rising_edge(clk)) then

if (clk'event and clk='1') then

reg_out <= reg_in;

--

if vdinR='1' then

vdin2 <= '0';

elsif vdinS='1' then

vdin2 <= '1';

end if;

-- increment or reset cout in ring, cout=L^count

cout(0)<= cout(m-1) OR reset;

cout(1)<= cout(0) AND NOT reset;

cout(2)<= cout(1) AND NOT reset;

cout(3)<= (cout(2) XOR cout(m-1)) AND NOT reset;

cout(4)<= cout(3) AND NOT reset;

cout(5)<= cout(4) AND NOT reset;

cout(6)<= cout(5) AND NOT reset;

--

dout <= (NOT vdin1 AND rout) OR (vdin1 AND rin);

end if;

end process;

end rtl;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Порекомендуйте пожалуйста подробный документ по BCH.

Паралельный(вход 8 или 16 бит), аппаратный.

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Порекомендуйте пожалуйста подробный документ по BCH.

Паралельный(вход 8 или 16 бит), аппаратный.

Заранее спасибо.

Можете уточнить вопрос?

 

Вообще, начиная с

Блэйхут, Теория и Практика Кодов, Контролирующих Ошибки

Скляр, Цифровая Связь

Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms

 

А потом все написанное в имеющихся кодах/корках на Verilog/VHDL будет понятно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете уточнить вопрос?

 

Вообще, начиная с

Блэйхут, Теория и Практика Кодов, Контролирующих Ошибки

Скляр, Цифровая Связь

Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms

 

А потом все написанное в имеющихся кодах/корках на Verilog/VHDL будет понятно...

 

Собственно интересует вот ето:

http://www.ecctek.com/bin_bch_nand_flash.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственно интересует вот ето:

http://www.ecctek.com/bin_bch_nand_flash.html

Нет, двоичный код БЧХ не реализовывал.

 

Но на всякий случай, по опыту реализации Рида-Соломона для GF(2^8), скажу, что без чтения указанных книг можно работать только с мастером настройки IP-ядра. Эти книги плюс статьи на IEEE и есть подробный документ. Притом что сначала я ради интереса декриптовал Альтеровскую корку (не устроило по ряду причин) и скачал корку с opencores.

 

Так что определяйтесь, разрабатывать или искать готовый. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...