Перейти к содержанию
    

Добрый день, форумчане!

Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге.

double_clock_fifo.sv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, Kostochkin сказал:

Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать.

А почему не через 2 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

47 minutes ago, Kostochkin said:

Если честно, не смотрел ваш код, работаю на VHDL, но у меня была такая же проблема. После принятия счетчика байт через функцию Грея в другом клоковом домене, надо этот счетчик пропустить через триггер, а потом использовать.

"Не смотрел,  но осуждаю!" :biggrin:  Это так в союзе рецензии писали на западное кино.  Ну а благодарное население читая эти рецензии  воображало что же там в "этом кино"  могли такого :girl_hospital: показать  " ... конечно через  2 регистра - одного маловато будет ..." :wacko2:

А ничего что у TC  как раз все это присутствует и синхронизаторы  и по 2 регистра в них?   А вот с чем у TC проблема так с тем как вычислять события флагов empty и full.  @friks правильно я понимаю?

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал так: асинхронный регистр -> синхронный регистр -> функция грея -> синхронный регистр. 

Здесь я имел в виду последний регистр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы для начала слегка поменял Вашу архитектуру.

Сначала вы передаете адрес счетчика в код Грея. Переносите этот код через домен, посредством синхронизаторов. Затем преобразуете код Грея в нормальный код.

То, что Вы делаете через расширенный адресный бит - это правильно. Это классический способ анализа флагов.

Очень много замечаний по стилистике оформления. 

В одну строчку записать все входы и выходы модуля это круто, компактно. Но это неудобно в работе. И уж тем более в дальнейшем сопровождении.

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_widthdata_depth, Вам самим же будет проще в дальнейшем сопровождать проект.

Я лично признаю только такой стиль подключения модулей (Каюсь. Иногда на работе балуюсь verilog :biggrin:):

	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 )
	);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, friks said:

Добрый день, форумчане!

Решил сделать асинхронный фифо в образовательных целях. Не получается обработать флаги empty и full. Прилагаю исходник на верилоге.

double_clock_fifo.sv

у вас там вообще обработки флагов нет, вопрос не корректный) не "не получается", а "не знаю как". В сети есть пара статей хороших, про фифо от Suberst Design. Воспользуйтесь гуглом. На пальцах там два подхода: 1. счетчики заполнения отдельно и логика флагов на них. 2. равенство указателей с отслеживанием тренда изменения указателей (переполнение или опустошение). В обоих случаях есть свои преимущества и недостатки) 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, в 2016 году сперли под чистую статью 2002года, даже рисунки те же) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А идея с добавлением разряда в счетчик Грея и инверсией другого разряда - вообще песня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендую: https://habr.com/ru/post/321674/

И код: https://github.com/dsmv/fpga_components/tree/master/src/fifo

Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, dsmv said:

Я не рекомендую использовать код Грея. Если нужны не только full и empty, то код Грея резко усложняет логику работы.

дополнительный конвертер и вычитатель, который и так должен быть) вам в комментариях к статье тоже самое написали) 

ЗЫ. я бы не сказал более корректно, не усложняет, а роняет тактовую. Т.к. наружу торчат комбинаторные сигналы, сделать регистровыми или редуцировать логику до меньшего количества слоев логики можно, но там есть ньюансы) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...