friks 0 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Добрый день, форумчане! Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге. double_clock_fifo.sv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба 5 минут назад, Kostochkin сказал: Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. А почему не через 2 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Можно через 2, хуже не будет:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Приветствую! 47 minutes ago, Kostochkin said: Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. "Не смотрел, но осуждаю!" Это так в союзе рецензии писали на западное кино. Ну а благодарное население читая эти рецензии воображало что же там в "этом кино" могли такого показать " ... конечно через 2 регистра - одного маловато будет ..." А ничего что у TC как раз все это присутствует и синхронизаторы и по 2 регистра в них? А вот с чем у TC проблема так с тем как вычислять события флагов empty и full. @friks правильно я понимаю? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
friks 0 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Да, Rob вы все правильно поняли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Я делал так: асинхронный регистр -> синхронный регистр -> функция грея -> синхронный регистр. Здесь я имел в виду последний регистр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 апреля, 2020 Опубликовано 11 апреля, 2020 · Жалоба Я бы для начала слегка поменял Вашу архитектуру. Сначала вы передаете адрес счетчика в код Грея. Переносите этот код через домен, посредством синхронизаторов. Затем преобразуете код Грея в нормальный код. То, что Вы делаете через расширенный адресный бит - это правильно. Это классический способ анализа флагов. Очень много замечаний по стилистике оформления. В одну строчку записать все входы и выходы модуля это круто, компактно. Но это неудобно в работе. И уж тем более в дальнейшем сопровождении. ram_dual_clock u2 (in, r_addr, w_addr, (r_en & !empty), (w_en & !full), rst, r_clk, w_clk, out); Название параметров: parameter N = 4, M = 4) Ну запишите Вы параметры человеческими названиями, типа data_width, data_depth, Вам самим же будет проще в дальнейшем сопровождать проект. Я лично признаю только такой стиль подключения модулей (Каюсь. Иногда на работе балуюсь verilog ): gray_counter # ( .data_width (data_depth) ) gray_counter_rd_adr ( .rst ( rst ), .clk ( r_clk ), .en0 ( r_en ), .en1 ( empty ), .bin_counter_next ( r_addr ), .gray_counter_next ( r_addr_gray ) ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 апреля, 2020 Опубликовано 12 апреля, 2020 · Жалоба 17 hours ago, friks said: Добрый день, форумчане! Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге. double_clock_fifo.sv у вас там вообще обработки флагов нет, вопрос не корректный) не "не получается", а "не знаю как". В сети есть пара статей хороших, про фифо от Suberst Design. Воспользуйтесь гуглом. На пальцах там два подхода: 1. счетчики заполнения отдельно и логика флагов на них. 2. равенство указателей с отслеживанием тренда изменения указателей (переполнение или опустошение). В обоих случаях есть свои преимущества и недостатки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
friks 0 12 апреля, 2020 Опубликовано 12 апреля, 2020 · Жалоба Спасибо des00 действительно очень хорошие статьи. Сейчас буду читать и разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
friks 0 12 апреля, 2020 Опубликовано 12 апреля, 2020 · Жалоба Всем спасибо! Тема закрыта. FIFO1.pdf FIFO2.pdf Методика разработки RTL асинхронного блока FIFO, оптимизированного по площади и потреблению.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 апреля, 2020 Опубликовано 13 апреля, 2020 · Жалоба Интересно, в 2016 году сперли под чистую статью 2002года, даже рисунки те же) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 13 апреля, 2020 Опубликовано 13 апреля, 2020 · Жалоба А идея с добавлением разряда в счетчик Грея и инверсией другого разряда - вообще песня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 13 апреля, 2020 Опубликовано 13 апреля, 2020 · Жалоба Рекомендую: https://habr.com/ru/post/321674/ И код: https://github.com/dsmv/fpga_components/tree/master/src/fifo Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба 8 hours ago, dsmv said: Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы. дополнительный конвертер и вычитатель, который и так должен быть) вам в комментариях к статье тоже самое написали) ЗЫ. я бы не сказал более корректно, не усложняет, а роняет тактовую. Т.к. наружу торчат комбинаторные сигналы, сделать регистровыми или редуцировать логику до меньшего количества слоев логики можно, но там есть ньюансы) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться