friks 0 Posted April 11, 2020 · Report post Добрый день, форумчане! Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге. double_clock_fifo.sv Quote Ответить с цитированием Share this post Link to post Share on other sites
Kostochkin 0 Posted April 11, 2020 · Report post Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted April 11, 2020 · Report post 5 минут назад, Kostochkin сказал: Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. А почему не через 2 ? Quote Ответить с цитированием Share this post Link to post Share on other sites
Kostochkin 0 Posted April 11, 2020 · Report post Можно через 2, хуже не будет:) Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted April 11, 2020 · Report post Приветствую! 47 minutes ago, Kostochkin said: Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать. "Не смотрел, но осуждаю!" Это так в союзе рецензии писали на западное кино. Ну а благодарное население читая эти рецензии воображало что же там в "этом кино" могли такого показать " ... конечно через 2 регистра - одного маловато будет ..." А ничего что у TC как раз все это присутствует и синхронизаторы и по 2 регистра в них? А вот с чем у TC проблема так с тем как вычислять события флагов empty и full. @friks правильно я понимаю? Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
friks 0 Posted April 11, 2020 · Report post Да, Rob вы все правильно поняли. Quote Ответить с цитированием Share this post Link to post Share on other sites
Kostochkin 0 Posted April 11, 2020 · Report post Я делал так: асинхронный регистр -> синхронный регистр -> функция грея -> синхронный регистр. Здесь я имел в виду последний регистр. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted April 11, 2020 · Report post Я бы для начала слегка поменял Вашу архитектуру. Сначала вы передаете адрес счетчика в код Грея. Переносите этот код через домен, посредством синхронизаторов. Затем преобразуете код Грея в нормальный код. То, что Вы делаете через расширенный адресный бит - это правильно. Это классический способ анализа флагов. Очень много замечаний по стилистике оформления. В одну строчку записать все входы и выходы модуля это круто, компактно. Но это неудобно в работе. И уж тем более в дальнейшем сопровождении. 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 ) ); Quote Ответить с цитированием Share this post Link to post Share on other sites
des00 0 Posted April 12, 2020 · Report post 17 hours ago, friks said: Добрый день, форумчане! Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге. double_clock_fifo.sv у вас там вообще обработки флагов нет, вопрос не корректный) не "не получается", а "не знаю как". В сети есть пара статей хороших, про фифо от Suberst Design. Воспользуйтесь гуглом. На пальцах там два подхода: 1. счетчики заполнения отдельно и логика флагов на них. 2. равенство указателей с отслеживанием тренда изменения указателей (переполнение или опустошение). В обоих случаях есть свои преимущества и недостатки) Quote Ответить с цитированием Share this post Link to post Share on other sites
friks 0 Posted April 12, 2020 · Report post Спасибо des00 действительно очень хорошие статьи. Сейчас буду читать и разбираться. Quote Ответить с цитированием Share this post Link to post Share on other sites
friks 0 Posted April 12, 2020 · Report post Всем спасибо! Тема закрыта. FIFO1.pdf FIFO2.pdf Методика разработки RTL асинхронного блока FIFO, оптимизированного по площади и потреблению.pdf Quote Ответить с цитированием Share this post Link to post Share on other sites
des00 0 Posted April 13, 2020 · Report post Интересно, в 2016 году сперли под чистую статью 2002года, даже рисунки те же) Quote Ответить с цитированием Share this post Link to post Share on other sites
dvladim 0 Posted April 13, 2020 · Report post А идея с добавлением разряда в счетчик Грея и инверсией другого разряда - вообще песня. Quote Ответить с цитированием Share this post Link to post Share on other sites
dsmv 0 Posted April 13, 2020 · Report post Рекомендую: https://habr.com/ru/post/321674/ И код: https://github.com/dsmv/fpga_components/tree/master/src/fifo Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы. Quote Ответить с цитированием Share this post Link to post Share on other sites
des00 0 Posted April 14, 2020 · Report post 8 hours ago, dsmv said: Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы. дополнительный конвертер и вычитатель, который и так должен быть) вам в комментариях к статье тоже самое написали) ЗЫ. я бы не сказал более корректно, не усложняет, а роняет тактовую. Т.к. наружу торчат комбинаторные сигналы, сделать регистровыми или редуцировать логику до меньшего количества слоев логики можно, но там есть ньюансы) Quote Ответить с цитированием Share this post Link to post Share on other sites