Maverick_ 15 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Входные данные например 8 бит. Последовательные данные должные идти без задержек... В тесте я пытаюсь это моделировать - подавать на вход постоянно данные, подавая данные на вход. Моя реализация во вложенных файлах. Почему пролазит глич? Понимаю что асинхронщина где-то... У меня сейчас только асинхронная загрузка... Где я туплю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 45 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба У Вас загрузка данных в регистр и предустановка счетчика асинхронные. Это так специально замышлялось? :) Ну и если я ничего не напутал в Вашей задаче - раз входные данные подаются с некоей частотой непрерывно, то частота выдачи последовательных данных должна быть в восемь раз выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба Почему пролазит глич? Потому что есть асинхронная загрузка данных. На диаграмме видно, что этот ваш глитч есть всегда когда есть rising_edge(load) и в сдвиговом что то есть. Перейдите на конструкцию вида if (rising_edge(clk)) then if(load='1') then ... end if; И будет вам счастие ;) только логику нужно будет подрихтовать чуток напильником Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба Исправил, но на построут красные линии.... Почему? PS Давно не программировал ПЛИС.... Немного подзабыл... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrewS6 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба Попробуйте добавить сбросы для регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба Попробуйте добавить сбросы для регистров. так я при загрузке в сдвигающий регистр - обновляю данные в регистре... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба так я при загрузке в сдвигающий регистр - обновляю данные в регистре... process (clk) begin if clk'event and clk = '1' then if (load ='1') then reg_data <= din; cnt <= "000"; else reg_data <= reg_data(6 downto 0) & '0'; cnt <= cnt + 1; end if; if (cnt = "101") then reg_strob <= '1'; else reg_strob <= '0'; end if; end if; end process; dout <= reg_data(7); count <= cnt; strob <= reg_strob; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба process (clk) begin if clk'event and clk = '1' then if (load ='1') then reg_data <= din; cnt <= "000"; else reg_data <= reg_data(6 downto 0) & '0'; cnt <= cnt + 1; end if; if (cnt = "101") then reg_strob <= '1'; else reg_strob <= '0'; end if; end if; end process; dout <= reg_data(7); count <= cnt; strob <= reg_strob; спасибо, но к сожалению красные линии остались.... upd Проблема решена. Ответ: в тестбенче поменял на clk_process :process begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2; end process; было clk_process :process begin clk <= '1'; wait for clk_period/2; clk <= '0'; wait for clk_period/2; end process; Всем спасибо за помощь!!! :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба 2 Maverick мне кажется такое "решение" очень подозрительным, я бы всё таки поковырял в дизайне.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба 2 Maverick мне кажется такое "решение" очень подозрительным, я бы всё таки поковырял в дизайне.. дизайн "десять" строчек кода... и ничего сверхестественного... взять например описание от sazh. Где ковырять? Еще раз спасибо за помощь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lubnin 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба В этом вопросе согласен с Kuzmi4. Метасостояние, если оно имелось виду под "красные линии" не должно исправляться инверсией тактовой частоты в тесте. думаю вам нужно пересмотреть свой дизайн в плане включения синхронных сбросов всех или хотябы ключевых регистров. Или отковырять причину появления этих самых "красных линий". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Может кому-то пригодиться... Выкладываю исправленную версию serdes (первоначальные удалил) Всем спасибо и отдельная благодарность за помощь Kuzmi4. par_ser.vhd test_P2S.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 13 сентября, 2012 Опубликовано 13 сентября, 2012 · Жалоба Проблема вашего тестбенча в том, что следующего клока следует ждать не по времени, а по фронту самого клока, то есть wait until rising_edge(clk); Тогда последующие установки тестовых сигналов тестбенчем будут происходить в следующем дельта цикле после прохождения фронта клока, и не будет дурацких коллизий. Ждать строба, как у вас, конечно, тоже правильно. А вот переносить установку сигналов на середину периода, ПМСМ, не правильно. При поведенческой симуляции удобнее, когда все сигналы, включая активный фронт клока, на временной диаграмме меняются одновременно, хотя это, может быть, у меня привычка такая:). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 13 сентября, 2012 Опубликовано 13 сентября, 2012 · Жалоба Проблема вашего тестбенча в том, что следующего клока следует ждать не по времени, а по фронту самого клока, то есть wait until rising_edge(clk); Тогда последующие установки тестовых сигналов тестбенчем будут происходить в следующем дельта цикле после прохождения фронта клока, и не будет дурацких коллизий. Ждать строба, как у вас, конечно, тоже правильно. А вот переносить установку сигналов на середину периода, ПМСМ, не правильно. При поведенческой симуляции удобнее, когда все сигналы, включая активный фронт клока, на временной диаграмме меняются одновременно, хотя это, может быть, у меня привычка такая:). спасибо ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 27 сентября, 2012 Опубликовано 27 сентября, 2012 · Жалоба На какой скорости работает serdes ? Лучше счетчик cnt делать не сумматором, а также сдвиговым регистром. Частота увеличится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться