Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 (изменено) · Жалоба 7 минут назад, zombi сказал: Вот, вообще не понимаю. Схема выделения фронтов, на плис, при постоянной тактовой и постоянном входном сигнале, и при этом 12 фронтов выделяет а 13-й нет!!! Как такое может быть. Сам не знаю как так. edge_detector : process(clk) begin if(rising_edge(clk)) then shift_reg(0) <= signal_in; shift_reg(1) <= shift_reg(0); shift_reg(2) <= shift_reg(1); shift_reg(3) <= shift_reg(2); end if; end process edge_detector; all_edge <= shift_reg(3) xor shift_reg(2); end Behavioral; Уже даже так попробовал, все равно то же самое получается, ерунда какая то. Изменено 14 апреля, 2019 пользователем Nikolas72_91 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 26 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 32 минуты назад, Nikolas72_91 сказал: Скинь пожалуйста где про это можно почитать? Я просто про это вообще не в курсе. Поиск по форумам по слову метастабильность: Длину сдвигового регистра измените так: signal shift_reg : std_logic_vector(3 downto 0):=(others=>'0'); begin edge_detector : process(clk) begin if(rising_edge(clk)) then shift_reg <= shift_reg(shift_reg'high-1 downto 0) & signal_in; end if; end process edge_detector; all_edge <= shift_reg(shift_reg'high-1) xor shift_reg(shift_reg'high); end Behavioral; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 151 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 10 минут назад, Nikolas72_91 сказал: зачем еще синхронизировать Чтобы он стал однозначным. Сейчас это сумма более чем двух сигналов, и ею так и будет гулять по кристаллу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Так. Давайте по-порядку. 1. Где симулируете ? 2. Какая ПЛИС применяется ? 3.Как обнаружили проблему ? 4. Какие констрейны заданы. 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 44 minutes ago, Nikolas72_91 said: У меня входной сигнал синхронизируется с клоком Вы уверены в этом. Не судите строго, мне тоже интересен Ваш вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 минуту назад, Flip-fl0p сказал: Так. Давайте по-порядку. 1. Где симулируете ? 2. Какая ПЛИС применяется ? 3.Как обнаружили проблему ? 4. Какие констрейны заданы. 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка) 1) Симулирую в University Program VWF в quartus, который использует modelsim, симулирую тут потому, что сигналы удобнее мне рисовать, чем разбираться с тест бенчами, так как постоянно приходится менять тестовые сигналы. 2)EPM240T100 3) Обнаружил проблему в реальной плис, потом начал смотреть в симуляторе сдвигая сигнал входной относительно клока, по несколько нс и вот вылезла это эта неопределенность. 4) Констейнеры не задавал, так как про них не слышал, сейчас читаю. 5) 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? Я вообще чистый проект сделал, чтобы отладить в нем чисто детектор фронтов. Тут больше ничего нет. 2 минуты назад, zombi сказал: Вы уверены в этом. Не судите строго, мне тоже интересен Ваш вопрос. Ну я код скинул на первой страничке, уже цепочку тригеров пробовал, и все равно та же проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 35 minutes ago, Plain said: Чтобы он стал однозначным. Сейчас это сумма более чем двух сигналов, и ею так и будет гулять по кристаллу. Т.е. десяток раз сумма более чем двух сигналов однозначна, а один разок нет? ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 3 минуты назад, zombi сказал: Т.е. десяток раз сумма более чем двух сигналов однозначна, а один разок нет? ) Ну так я попробовал синхронизировать выход all_edge по clk, толку то, от проблемы то это не избавило, другое дело как он там гуляет по кристалу. Пока чистый код просто детектора не работает как надо если. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 13 minutes ago, Nikolas72_91 said: Ну так я попробовал синхронизировать выход all_edge по clk, толку то, от проблемы то это не избавило, Так это и не должно было помочь, если на входе триггера будет не определённое состояние. Триггер шмитта разрешите по входу "Signal In" - чисто ради эксперимента Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 час назад, Flip-fl0p сказал: Так. Давайте по-порядку. 1. Где симулируете ? 2. Какая ПЛИС применяется ? 3.Как обнаружили проблему ? 4. Какие констрейны заданы. 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка) Добавил описание частоты в констайнерах create_clock -period 48MHz -name {clk} [get_ports {clk}] но пока ничего не изменилось 53 минуты назад, zombi сказал: Так это и не должно было помочь, если на входе триггера будет не определённое состояние. Триггер шмитта разрешите по входу "Signal In" - чисто ради эксперимента У меня и так используется триггер шмитта, это тоже не решает проблему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Шибко большого опыта работы с плис не имею. Я зыков не знаю, всё квадратиками на блок-схеме рисую (мне так проще). Вот совсем недавно понадобилось SPI на MAXII реализовать внизу схемы именно выделение фронта сигнала записи. Все процессы полностью асинхронны. В симуляторе особо не тестировал, сразу в железе EPM570F256 Работает без нареканий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 4 часа назад, Nikolas72_91 сказал: Добавил описание частоты в констайнерах create_clock -period 48MHz -name {clk} [get_ports {clk}] но пока ничего не изменилось Этого мало. Как минимум надо все асинхронные пути пометить как false_path в вашем случае - это входной сигнал. Ещё неплохо было бы подумать над возможным дребезгом входного сигнала, нужна ли его фильтрация ? И забудьте про временную симуляцию. Проводите функциональную. Затем правильные констрейны. И в 99% случаях заработает сразу, без всяких хитрых атрибутов и констрейнов. Вот когда не заработает стандартный вариант - тогда надо доставать бубен и шаманить, путем задавания хитрых констрейнов и атрибутов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Я бы ещё атрибутом на сигналах синхронизатора запретил бы упаковку в SRL, только триггеры. Просто не знаю, MAXII может LUT в SRL превращать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба On 4/14/2019 at 2:56 PM, Nikolas72_91 said: . . . . это тоже не решает проблему. Судя по решениям, Вам главное - выделять фронт. Попробуйте на делителях понизить для этой схемы тактовую частоту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба 58 минут назад, Serhiy_UA сказал: Судя по решениям, Вам главное - выделять фронт. Попробуйте на делителях понизить для этой схемы тактовую частоту. Все проблема решена, симулятор глючит походу при симуляции с задержками, а в коде оказалась немного другая, вычислил с осцилом и в сравнении со старым рабочим кодом. Ошибка в формуле была и из за нее все глючило. А то уже грешил на эти фронтдетекторы, а с осцилом посмотрел они нормально работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться