|
Прояснить ситуацию, синхронная загрузка регистров по enable |
|
|
|
Mar 17 2008, 06:06
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Вопрос в следующем: есть код который конвертирует последовательность из 8-битного серийного потока (т.е. байтный поток, один байт за другим) в параллельные слова каждые 3 последовательных байта. Т.е. первые 2 байта загружаются в промеж. регистры, затем по третьему байту - все 3 считываются параллельно на выходе в соотв. раскладе. В принципе, все работает в симуляции как надо, но начало работы конвертора динхронизировано с определенным сигналом. Фронт данного enable синхронизирован с фронтом первого релевантного клока. Первый байт данных в потоке синхронизирован тоже по фронту того-же клока, т.е. должен загружаться в первый промеж. регистр по спаду первого клока. Т.е. по фронту первого клока получаем enable, по его спаду должны загрузить первое данное в регистр. Далее все продолжается синхронно, по каждому спаду идет загрузка в цепочку из 2х регистров, по каждому 3ему спаду - считывает параллельное данное. Проблема в следующем: при симуляции вижу получив enable на первом клоке (по его фронту), загрузка не начинается по спаду того-же клока, а только по спаду следующего (второго) клока, т.е. пропускается первый байт потока. Пока не пойму почему. Клок достаточно медленный (примерно 20-25 MHz), 50% duty cycle, симуляция: post-route functional. Вот релевантный кусок кода: Код process(nRST, IN_CLK, DV) --Input FIFO - buffering input RGB sequence begin if nRST = RST_pol or DV = not DV_active then r0 <= x"00"; r1 <= x"00"; RGB_OUT <= x"0000"; elsif IN_CLK'event and IN_CLK = '0' then --FIFO is chain-loaded upon falling edge r0 <= RGB_IN; --G sample (8 bits), 6 MSB bits will be picked r1 <= r0; --R sample (8 bits), 5 MSB bits will be picked if out_load_en = '1' then --loading the output RGB buffer (parallel RGB) RGB_OUT <= r1(7 downto 3) & r0(7 downto 2) & RGB_IN(7 downto 3); end if; end if; end process; Пока не пойму что мешает по получении enable по фронту клока начать загруску по спаду того-же клока...? Спасибо
|
|
|
|
|
 |
Ответов
|
Mar 17 2008, 12:40
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(Саша Z @ Mar 17 2008, 14:25)  Работа по фронту конечно желательно, согласен, но проблема в том что первый байт потока на входе согласован прямо по первому фронту клока по которому-же и синхронизирован DV, посему ежели брать дату по фронту - первая valid дата будет упускаться, но ежели по спаду - она должна по идее фиксироваться... Выражайтесь более точно. DV и данные выходят с триггера, который работает по клоку? Или как? Если так, как я говорю, то замечание Very_hard - правильное. Ничего упускаться не будет. Цитата(Саша Z @ Mar 17 2008, 14:25)  Честно гворя не понял у вас в коде как продвигается p p - двигается циклично, и синхронизируется с первым значимым данным. Раз в три такта, когда на входе 3е данное, в старшем разряде p появляется 1, что и является признаком выдачи данных в параллельный регистр.
|
|
|
|
|
Mar 17 2008, 12:56
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Михаил_K @ Mar 17 2008, 16:40)  Выражайтесь более точно. DV и данные выходят с триггера, который работает по клоку? Или как? Если так, как я говорю, то замечание Very_hard - правильное. Ничего упускаться не будет. p - двигается циклично, и синхронизируется с первым значимым данным. Раз в три такта, когда на входе 3е данное, в старшем разряде p появляется 1, что и является признаком выдачи данных в параллельный регистр. Насчет p - понял, спасибо. В моем случае - счетчик до 3х...делает в результате тоже-самое. DV, данные, клок приходят извне, т.е. в системе но от внешнего устройства, в test benchе я их сгенерировал согласно их ожидаемому таймингу (по specу того устройства). DV и дата по идее синхронизированы по входному клоку (в внешнем устройстве), значит в реальности видимо будет задержка между фронтом соотв. клока и фронтом DV и первого данного. Я пока симулирую функционально (хотя и после route), посему этих задержек не видно (хотя можно наверно их проимитировать)... Цитата(andrew_b @ Mar 17 2008, 16:33)  Мне кажется, я начинаю догадываться... Будьте добры, приведите код генерации dv и oled_video_in. код DV (в test benchе): Код OLED_DV: PROCESS BEGIN DV <= '0'; wait for start_time; for fdv in frames_to_simulate downto 1 loop for ldv in TV_tot_lines downto 1 loop if ldv > (TV_tot_lines - TVs) or ldv <= (TV_tot_lines - TVd - TVs) then DV <= '0'; wait for line_time; else wait for HSYNC_time; DV <= '1'; wait for DV_time; --activate DV for 960 PCLKs DV <= '0'; wait for (line_time - DV_time - HSYNC_time); end if; end loop; end loop; wait; END PROCESS; все параметры - нужные задержки для имитации циклов синхронизации DV в строках. код данных: Код OLED_DATA: PROCESS BEGIN OLED_VIDEO_IN <= x"00"; wait for start_time; OLED_VIDEO_IN <= x"00"; wait for start_frame_blank_time; --wait for first 7 blank lines for ldat in TVd downto 1 loop wait for HSYNC_time; --wait for HSYNC pulse duration for clkdat in 960 downto 1 loop OLED_VIDEO_IN <= x"FF"; wait for Tclock; OLED_VIDEO_IN <= x"00"; wait for Tclock; end loop; end loop; END PROCESS; опять-же все константы задержек нужны для синхронизации видео sync сигналов и т.д.
|
|
|
|
|
Mar 17 2008, 13:01
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(Саша Z @ Mar 17 2008, 15:56)  Насчет p - понял, спасибо. В моем случае - счетчик до 3х...делает в результате тоже-самое. DV, данные, клок приходят извне, т.е. в системе но от внешнего устройства, в test benchе я их сгенерировал согласно их ожидаемому таймингу (по specу того устройства). DV и дата по идее синхронизированы по входному клоку (в внешнем устройстве), значит в реальности видимо будет задержка между фронтом соотв. клока и фронтом DV и первого данного. Я пока симулирую функционально (хотя и после route), посему этих задержек не видно (хотя можно наверно их проимитировать)...
опять-же все константы задержек нужны для синхронизации видео sync сигналов и т.д. ИМХО если данные приходят из вне вместе с клоком, то в первую очередь их нужно принять на входной триггер, тактируемый этим клоком. И сигнал DV также. После этого все становится нормально.
Сообщение отредактировал Михаил_K - Mar 17 2008, 13:03
|
|
|
|
Сообщений в этой теме
Саша Z Прояснить ситуацию Mar 17 2008, 06:06 dvladim Поведение post-route отличается от функционального... Mar 17 2008, 07:58 Саша Z Цитата(dvladim @ Mar 17 2008, 11:58) Пове... Mar 17 2008, 08:35  sazh Цитата(Саша Z @ Mar 17 2008, 12:35) Спаси... Mar 18 2008, 04:58 Михаил_K Асинхронный сброс еще как может на это влиять.
Воо... Mar 17 2008, 10:32 Саша Z Цитата(Михаил_K @ Mar 17 2008, 14:32) Аси... Mar 17 2008, 11:25 Very_hard Цитатакстати - у себя обнаружил что забыл вставить... Mar 17 2008, 12:03 Саша Z Цитата(Very_hard @ Mar 17 2008, 16:03) Он... Mar 17 2008, 12:26  andrew_b Цитата(Саша Z @ Mar 17 2008, 15:26) С фро... Mar 17 2008, 12:33  andrew_b Цитата(Саша Z @ Mar 17 2008, 15:56) DV, ... Mar 17 2008, 13:23   Саша Z Цитата(andrew_b @ Mar 17 2008, 17:23) Во ... Mar 17 2008, 14:21    des00 Цитата(Саша Z @ Mar 17 2008, 09:21) Будем... Mar 18 2008, 03:37     Саша Z Цитата(des00 @ Mar 18 2008, 07:37) Прекра... Mar 18 2008, 06:01      des00 Цитата(Саша Z @ Mar 18 2008, 01:01) Шаман... Mar 18 2008, 10:14       Саша Z Цитата(des00 @ Mar 18 2008, 14:14) Да я д... Mar 18 2008, 11:33 Михаил_K Цитата(Саша Z @ Mar 17 2008, 17:21) ОК, с... Mar 17 2008, 15:03 Саша Z Цитата(Михаил_K @ Mar 17 2008, 19:03) Дел... Mar 17 2008, 15:18 Михаил_K Цитата(Саша Z @ Mar 18 2008, 14:33) Кстат... Mar 18 2008, 13:02 Саша Z Да, точно, фраернулся...:-) Mar 18 2008, 13:37 dvladim Цитата(Саша Z @ Mar 17 2008, 15:26) Возмо... Mar 18 2008, 18:19 Саша Z Цитата(dvladim @ Mar 18 2008, 22:19) На м... Mar 18 2008, 19:29 des00 Цитата(dvladim @ Mar 18 2008, 13:19) В сп... Mar 19 2008, 03:25 Михаил_K Вообще-то, дело вкуса. Я, например, чтобы избежать... Mar 19 2008, 07:45 andrew_b Ну коль пошла такая пьянка, спрошу:
Цитата(Михаил... Mar 19 2008, 09:06 Михаил_K Цитата(andrew_b @ Mar 19 2008, 12:06) Ну ... Mar 19 2008, 10:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|