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

чтоб не плодить темы спрошу тут

у меня в FIFO режим Show-Ahead включен.

lpm_showahead => "ON"

Не очень понимаю зачем он нужен. Может отключить?

Изменено пользователем jenya7

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


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

Если не надо, отключите. Если надо, не отключайте.

Show-ahead они называют то, что другие называют FWFH — First Word Falls Through. Такое FIFO работает немного по-другому.

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


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

6 minutes ago, andrew_b said:

Если не надо, отключите. Если надо, не отключайте.

Show-ahead они называют то, что другие называют FWFH — First Word Falls Through. Такое FIFO работает немного по-другому.

вот это немного по другому меня и беспокоит.  попробую отключить. спасибо.

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


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

1 час назад, jenya7 сказал:

чтоб не плодить темы спрошу тут

у меня в FIFO режим Show-Ahead включен.

lpm_showahead => "ON"

Не очень понимаю зачем он нужен. Может отключить?

 

Вы документацию читали на FIFO ? 

У Altera очень хорошо описана эта корка. 

Ещё можно отмоделировать FIFO. 

Вы задаете странные вопросы.

Если очень упрощенно: если включен режим Show-Ahead, то сигнал чтения данных из FIFO (rdreq) фактически является сигналом подтверждения чтения. При этом ещё одной важной особенностью являет то, что данные автоматически появляются на выходе FIFO.

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


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

21 hours ago, Flip-fl0p said:

Если очень упрощенно: если включен режим Show-Ahead, то сигнал чтения данных из FIFO (rdreq) фактически является сигналом подтверждения чтения. При этом ещё одной важной особенностью являет то, что данные автоматически появляются на выходе FIFO.

я понял. спасибо.

что то не срастается с сигналами rdreq и wrreq. я так понимаю что если выставить rdreq\wrreq то на каждый клок будет читаться\писаться новое значение в FIFO.

У меня почему то пишется в два раза больше значений чем я посылаю. как будто wrreq  выставлен на два клока.

 

U_RX_FIFO : fifo
  generic map
  (
     SIZE => 32
  ) 
  port map
  (
     clock		    => REG_CLK,
	  data		    => rx_fifo_data_in,
	  rdreq		    => rx_fifo_rdreq,	
	  sclr		    => '0',
	  wrreq		    => rx_fifo_wrreq,
	  almost_empty  => rx_fifo_almost_empty,
	  almost_full	=> rx_fifo_almost_full,
	  empty		    => rx_fifo_empty,
	  full		    => rx_fifo_full,
	  q		        => rx_fifo_data_out,
	  usedw		    => rx_fifo_usedw
  );

пишу

when ST_MCP25625_TO_RX_FIFO_2 =>		
    rx_fifo_wrreq <= '1';
	rx_fifo_data_in <= rx_fifo_buf_in;
	RamState_b <= ST_MCP25625_TO_RX_FIFO_3;
					
when ST_MCP25625_TO_RX_FIFO_3 =>	
	rx_fifo_wrreq <= '0';	
	RamState_b <= ST_RAMB_IDLE;

читаю

when ST_RX_FIFO_READ_1 =>
    rx_fifo_rdreq <= '1';
	RxFifoState <= ST_RX_FIFO_READ_2;
					 
when ST_RX_FIFO_READ_2 =>
    rx_fifo_buf_out <= rx_fifo_data_out;
	rx_fifo_rdreq <= '0';
	RxFifoState <= ST_RX_FIFO_IDLE;

Вроде все на один такт. Но пишется два сообщения. Посылаю одно а rx_fifo_usedw = 2.

 

дело было не в бобине. из за неправильной алгоритмики я как бы принимал еще одно сообщение.

Изменено пользователем jenya7

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


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

Такая вот проблема. С одной стороны посылаю данные - ФИФО заполняется с другой микроконтролером считываю данные - ФИФО опустошается. Вижу лед мигает - данные пришли\ушли.

Ставлю точку останова в микроконтролере - естественно ФИФО переполняеися и full = 1. Убираю точку останова - и ничего не считывается - контролер читает usedw = 0 но с другой стороны full = 1 то есть флаг не чиститься.

Что то можно настроить чтоб избежать такой проблемы?

 

Изменено пользователем jenya7

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


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

15 часов назад, jenya7 сказал:

Такая вот проблема. С одной стороны посылаю данные - ФИФО заполняется с другой микроконтролером считываю данные - ФИФО опустошается. Вижу лед мигает - данные пришли\ушли.

Ставлю точку останова в микроконтролере - естественно ФИФО переполняеися и full = 1. Убираю точку останова - и ничего не считывается - контролер читает usedw = 0 но с другой стороны full = 1 то есть флаг не чиститься.

Что то можно настроить чтоб избежать такой проблемы?

 

 

Ну вы бы хоть сказали какие настойки у FIFO... Телепаты в отпуске.

Могу предположить: контроллер видит порт usedw = 0  ---> считает, что FIFO пустое ---> не выставляет запрос на чтение.

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


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

13 hours ago, jenya7 said:

Такая вот проблема. С одной стороны посылаю данные - ФИФО заполняется с другой микроконтролером считываю данные - ФИФО опустошается. Вижу лед мигает - данные пришли\ушли.

Ставлю точку останова в микроконтролере - естественно ФИФО переполняеися и full = 1. Убираю точку останова - и ничего не считывается - контролер читает usedw = 0 но с другой стороны full = 1 то есть флаг не чиститься.

Что то можно настроить чтоб избежать такой проблемы?

 

1. Сделать обработку флага full на обоих сторонах.

2. Использовать полную, а не усеченную разрядность сигнала usedw

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


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

11 hours ago, Flip-fl0p said:

Ну вы бы хоть сказали какие настойки у FIFO... Телепаты в отпуске.

Могу предположить: контроллер видит порт usedw = 0  ---> считает, что FIFO пустое ---> не выставляет запрос на чтение.

настройки такие

scfifo_component : scfifo
	GENERIC MAP (
		add_ram_output_register => "ON",
		almost_empty_value => 1,
		almost_full_value => 62,
		intended_device_family => "MAX 10",
		lpm_numwords => 64,
		lpm_showahead => "ON",
		lpm_type => "scfifo",
		lpm_width => 104,
		lpm_widthu => 6,
		overflow_checking => "ON",
		underflow_checking => "ON",
		use_eab => "ON"
	)

конечно если я вижу нулевой размер (usedw = 0) я не обращаюсь в ФИФО. Но почему флаг full поднят.

Пока со стороны контролера сделал заплату

if (size == 0)
{
    if (stus_rx_fifo && RX_FIFO_FULL_MASK)
    {
        //dummy read
        SPI_can_rd(opcode, 0, buff_in, 14);
    }

    return 0;
}

 

Изменено пользователем jenya7

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


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

55 minutes ago, jenya7 said:

конечно если я вижу нулевой размер (usedw = 0) я не обращаюсь в ФИФО. Но почему флаг full поднят.

т.е., при генерации и примении вашей корки, у вас не возникло вопросов, почему при количестве слов в фифо 64, разрядность сигнала usedw, который обозначает количество слов в фифо, 6 бит?

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


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

1 hour ago, des00 said:

т.е., при генерации и примении вашей корки, у вас не возникло вопросов, почему при количестве слов в фифо 64, разрядность сигнала usedw, который обозначает количество слов в фифо, 6 бит?

а что он должен сгенерировать? Размер ФИФО 64 - это 6 бит. что не так?

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


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

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

6 minutes ago, jenya7 said:

а что он должен сгенерировать? Размер ФИФО 64 - это 6 бит. что не так?

Попробуйте в 6 битах записать число 64 :)

Удачи! Rob.

 

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


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

1 hour ago, RobFPGA said:

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

Попробуйте в 6 битах записать число 64 :)

Удачи! Rob.

 

минуточку! 0х3F - это 63 - начинаем то с нуля 0-63 - 64 сообщения зайдут в ФИФО.

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


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

3 минуты назад, jenya7 сказал:

начинаем то с нуля 0-63 - 64 сообщения зайдут в ФИФО

Ну то есть, по вашей логике, если usedw == 0, то в FIFO лежит одно сообщение?

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


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

1 hour ago, andrew_b said:

Ну то есть, по вашей логике, если usedw == 0, то в FIFO лежит одно сообщение?

ааа. блин. я понял.  а почему кор генерирует 6 бит?

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


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

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

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

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

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

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

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

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

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

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