реклама на сайте
подробности

 
 
> Прояснить ситуацию, синхронная загрузка регистров по enable
Саша Z
сообщение Mar 17 2008, 06:06
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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 по фронту клока начать загруску по спаду того-же клока...? cranky.gif

Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Михаил_K
сообщение Mar 17 2008, 12:40
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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, что и является признаком выдачи данных в параллельный регистр.
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Mar 17 2008, 12:56
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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 сигналов и т.д.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Mar 17 2008, 13:01
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Mar 17 2008, 13:23
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(Михаил_K @ Mar 17 2008, 17:01) *
ИМХО если данные приходят из вне вместе с клоком, то в первую очередь их нужно принять на входной триггер, тактируемый этим клоком. И сигнал DV также. После этого все становится нормально.


Т.е. засинхронизировать входные сигналы по входному клоку внутри ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Саша 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.02219 секунд с 7
ELECTRONIX ©2004-2016