Привет всем!
Я занимаюсь своей дипломной работой - реализацией на FPGA от Xilinx помехоустойчивого кодера на кодах Рида-Маллера. Работаю в Xilinx ISE 14.7, использую Verilog.
По сути, вся работа кодера разбивается на несколько пунктов:
- принимать поток символов и делить его на блоки;
- над этими блоками выполнять арифметические операции;
- склеивать блоки обратно в поток битов.
Но кодирование является избыточным - и если входящие блоки по условию составляют 7 бит, то на выходе каждый блок расширяется до 64 бит. По моей задумке, деление на блоки и склеивание обратно проводится через регистры - то есть на входе я по тактовому счёту заношу информацию по одному биту в регистр сдвига 1->7 (самописный на Verilog), откуда спустя каждые пришедшие 7 битов вывожу весь блок на обработку по семибитной шине. Допустим, в таком параллельном виде операции я провёл - и на выходе есть регистр 64->1, который по тактовому счёту должен выводить информацию обратно в канал, собирать всё из кучи шин в один поток - и тут назревает вопрос:
Если на входе мы накапливаем блоки по 7 бит, а выпускаем уже по 64 бита с той же скоростью - то мы же просто не будем успевать их выпускать? Надо ли делать тактовые импульсы, поступающие на выходной регистр, в 8 раз короче (и соответственно уменьшать длительность передачи каждого одиночного бита)? Или как это реализовать по-другому?
То есть в общем виде мой вопрос прозвучит так: как на практике реализуется избыточное кодирование (в плане соотношения скоростей передачи на входе и выходе кодера) - с использованием какого-либо буфера (который, по идее, всё равно переполнится через несколько тактов?), с изменением ли скорости выходного потока, или каким-то другим методом? Не смог сформулировать волнующий меня вопрос кратко и "научно", поэтому поиски в Интернете пока ничего не дали :)
Буду премного благодарен толковым разъяснениям от опытных людей! :)