solidreg 0 4 июля, 2007 Опубликовано 4 июля, 2007 · Жалоба Может быть есть у кого нибудь работающий BCH код (VHDL / Verilog)? Надо только для кодирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuryL 0 5 июля, 2007 Опубликовано 5 июля, 2007 · Жалоба 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 работает корректно, хотя код надо причесать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
solidreg 0 6 июля, 2007 Опубликовано 6 июля, 2007 · Жалоба Спасибо. Это уже тестировал. Функционально всё работает. Но после синтезиса с QuartusII временные диаграмы вместе резултата показывает "X". Снизение частоты не помогло. Я знаю я только VHDL, а там - Verilog. Так что редактировать не знаю как :( P.S. мне тоже нужен BCH (127,113), t=2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuryL 0 9 июля, 2007 Опубликовано 9 июля, 2007 · Жалоба Не знаю где вы там нашли верил -- 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Порекомендуйте пожалуйста подробный документ по BCH. Паралельный(вход 8 или 16 бит), аппаратный. Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Порекомендуйте пожалуйста подробный документ по BCH. Паралельный(вход 8 или 16 бит), аппаратный. Заранее спасибо. Можете уточнить вопрос? Вообще, начиная с Блэйхут, Теория и Практика Кодов, Контролирующих Ошибки Скляр, Цифровая Связь Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms А потом все написанное в имеющихся кодах/корках на Verilog/VHDL будет понятно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Можете уточнить вопрос? Вообще, начиная с Блэйхут, Теория и Практика Кодов, Контролирующих Ошибки Скляр, Цифровая Связь Todd K Moon, Error Correction Coding Mathematical Methods and Algorithms А потом все написанное в имеющихся кодах/корках на Verilog/VHDL будет понятно... Собственно интересует вот ето: http://www.ecctek.com/bin_bch_nand_flash.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Собственно интересует вот ето: http://www.ecctek.com/bin_bch_nand_flash.html Нет, двоичный код БЧХ не реализовывал. Но на всякий случай, по опыту реализации Рида-Соломона для GF(2^8), скажу, что без чтения указанных книг можно работать только с мастером настройки IP-ядра. Эти книги плюс статьи на IEEE и есть подробный документ. Притом что сначала я ради интереса декриптовал Альтеровскую корку (не устроило по ряду причин) и скачал корку с opencores. Так что определяйтесь, разрабатывать или искать готовый. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться