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

serial to parallel (vhdl)

Всем привет

не могу придумать как исправить - не производиться запись одного бита

Массив данных которые записались - выделил красной скобкой

image.thumb.png.cb7b5bc6c0ad5996de581b350107e6d0.png

данные котрые я подавал с тестбенча -  - выделил красной скобкой

image.thumb.png.0ceb6ee7b47fc59bcb062cbbedd8c292.png

в тестбенче - єти данные следующие:

constant data0     : std_logic_vector(29 downto 0) := "000000000000000000000000000000";
constant data1     : std_logic_vector(29 downto 0) := "000000000000000000000000000000";
constant data2     : std_logic_vector(29 downto 0) := "000000000000000000000000000000";
constant data3     : std_logic_vector(29 downto 0) := "000000000000000111111111111111";
constant data4     : std_logic_vector(29 downto 0) := "000000011111111000000001111111";
constant data5     : std_logic_vector(29 downto 0) := "000111100001111000011110000111";
constant data6     : std_logic_vector(29 downto 0) := "011001100110011001100110011001";
constant data7     : std_logic_vector(29 downto 0) := "101010101010101010101010101010";

я сравнил побитно одни данные 

image.thumb.png.25e1f7540f932d5dd908c5c77deb308b.png

я думаю проблема в 254 строке описания  => reg_rx_word(to_integer(unsigned(reg_cnt_word)))(to_integer(unsigned(reg_cnt_bit_word))) <= bit_data;

вернее в том как считают счетчики reg_cnt_word и reg_cnt_bit_word

я так думаю, но как исправить не могу понять. Прошу помощи

Обратите внимание data7 с тестбенча записались коректно у reg_rx_word(0), а далше нет

 

deinterleaver.vhd deinterleaver_vhd_tst.vhd

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


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

а ничего что у вас, как минимум, тестбенч не правильный? У вас в нем указано bit_data <= data_all(data_all'high); а это, при слове "101010101010101010101010101010", означает что при первом valid_bit данные bit_data должны быть равны единице а не нулю

Безымянный.png

ЗЫ. Делать valid_bit в поведенческом стиле, а bit_data в RTL, это жуткий моветон

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


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

знаю, но время против меня работает...

поспешишь людей насмешишь ...

исправил в тестбенче на 

-- valid_bit <= '1';
  valid_bit0: process
 begin
     valid_bit <= '0';
 wait for 60 ns;
 wait until clk'event and clk = '1';     
    valid_bit <= '1';
 wait for 2405 ns;
 wait until clk'event and clk = '1';
    valid_bit <= '0';
 wait;
 end process;

все равно совпадения нет...

image.thumb.png.1d5be2d89d0e5bd47844054db447ba01.png

сейчас 

image.png.ec1641dcbe4ca08301ab2f10049f48af.png

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


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

41 minutes ago, Maverick_ said:

все равно совпадения нет...

ну я же сказал "как минимум тестбенч не верный", вы немного отдохните, а потом подумайте, почему вы сами портите свое слово)

Безымянный.png

И зачем вообще так сложно делать, с побитным доступом. Набирайте слово на регистре сдвига, потом сразу все слово задвигайте в память. у вас размеры слов же одинаковые. Нужна инверсия порядка бит, ну дык на проводах элементарно делается

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


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

изменения каснулись в основном тестбенча и исправил ошибку в deinterleaver.vhd

реверс бит надо было включить для єлементов массива reg_rx_word и все вроде совпадает, т.е. работает (в симулятор vivado реверс бит встроен)

---- reverse bit order ----------------------------------------------------------
function Reverse(constant X : in std_logic_vector) return std_logic_vector is
alias alX  : std_logic_vector(X'length - 1 downto 0) is X;
variable Y : std_logic_vector(alX'range);
begin
       for i in alX'range loop
               Y(i) := alX(alX'left - i);
       end loop;

       return Y;
end;

-- example work function:
--  a = 01011111100110101;
--  b = Reverse(a);
--  b = 10101100111111010;
---------------------------------------------------------------------------------

des00 спасибо за помощь

 

deinterleaver.vhd deinterleaver_vhd_tst.vhd par2ser.vhd

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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