Jump to content
    

BCH IP Core

Может быть есть у кого нибудь работающий BCH код (VHDL / Verilog)?

Надо только для кодирования.

Share this post


Link to post
Share on other sites

Спасибо.

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

 

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

Share this post


Link to post
Share on other sites

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

 

-- 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;

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

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

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

Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...