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

Почему LPM_FIFO вычитывает данные в обратном порядке?

Собственно, сабж.

 

Среда разработки - Q II 7.2.

 

Периодически сталкиваемся с такой проблемой - LPM_FIFO вычитывает данные в обратном порядке (т.е., работает как стек,а не как фифо).

 

Причем штука эта происходит совершенно случайно - ничего в фифо не меняем, а оно само ведет себя как хочет.

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


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

это только в Q 7.2 у Вас?

могу предположить, что неициализированы указатели голова-хвост. Reset в системе присутствует?

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


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

Опишу проблему подробнее.

 

Проект выполнен в виде схем (соответственно, с использованием мегафункций и мегавизарда).

 

Есть интерфейс между двумя плисами (одинаковыми). С другого плиса данные приходят в это самое фифо. Пишутся данные внешним клоком (с того плиса), а читаются - внутренним клоком этого плиса. Частота чтения = 150 МГц. Также используется асинхронный ресет.

 

С выхода фифо данные идут в обработку.

 

Проблема в том, что иногда (подчеркиваю - иногда) фифо как будто переворачивает шину, меняя местами младший и старший биты. Для обработки это губительно.

 

Причем, глюк этот возникает не только в железке, но и в симуляторе тоже (встроенный квартусовский симулятор). Никаких настроек, связанных с порядком следования битов мы найти не смогли.

 

Сам глюк возникает спонтанно. Фифо не трогаем НИКОГДА. Трогаем только дальнейшую обработку. Иногда просто достаточно перекомпилировать проект - и все в порядке, а иногда приходится и в схеме перерисовывать (переворачивать) шину.... Чушь какая-то.....

 

П.С.: Q II 7.2 SP3, также накручены сверху: DSP Builder, Megacore IP library, Nios II. Мы пользуемся только стандартными мегафункциями.

 

И, напоследок, на всякий случай, привожу текст TDF-ника, созданного мегавизардом:

-- megafunction wizard: %LPM_FIFO+%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: dcfifo 

-- ============================================================
-- File Name: fd_fifo0.tdf
-- Megafunction Name(s):
--             dcfifo
--
-- Simulation Library Files(s):
--             altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 7.2 Build 207 03/18/2008 SP 3 SJ Full Version
-- ************************************************************


--Copyright (C) 1991-2007 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions 
--and other software and tools, and its AMPP partner logic 
--functions, and any output files from any of the foregoing 
--(including device programming or simulation files), and any 
--associated documentation or information are expressly subject 
--to the terms and conditions of the Altera Program License 
--Subscription Agreement, Altera MegaCore Function License 
--Agreement, or other applicable license agreement, including, 
--without limitation, that your use is for the sole purpose of 
--programming logic devices manufactured by Altera and sold by 
--Altera or its authorized distributors.  Please refer to the 
--applicable agreement for further details.

INCLUDE "dcfifo.inc";



SUBDESIGN fd_fifo0
(
    aclr     : INPUT = GND;
    data[47..0]     : INPUT;
    rdclk     : INPUT;
    rdreq     : INPUT;
    wrclk     : INPUT;
    wrreq     : INPUT;
    q[47..0]     : OUTPUT;
)

VARIABLE

    dcfifo_component : dcfifo WITH (
            INTENDED_DEVICE_FAMILY = "Stratix II",
            LPM_HINT = "MAXIMIZE_SPEED=5,RAM_BLOCK_TYPE=M4K",
            LPM_NUMWORDS = 8,
            LPM_SHOWAHEAD = "OFF",
            LPM_TYPE = "dcfifo",
            LPM_WIDTH = 48,
            LPM_WIDTHU = 3,
            OVERFLOW_CHECKING = "ON",
            RDSYNC_DELAYPIPE = 4,
            UNDERFLOW_CHECKING = "ON",
            USE_EAB = "ON",
            WRITE_ACLR_SYNCH = "OFF",
            WRSYNC_DELAYPIPE = 4
            );

BEGIN

    q[47..0] = dcfifo_component.q[47..0];
    dcfifo_component.wrclk = wrclk;
    dcfifo_component.rdreq = rdreq;
    dcfifo_component.aclr = aclr;
    dcfifo_component.rdclk = rdclk;
    dcfifo_component.wrreq = wrreq;
    dcfifo_component.data[47..0] = data[47..0];
END;



-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0"
-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1"
-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0"
-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1"
-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0"
-- Retrieval info: PRIVATE: Clock NUMERIC "4"
-- Retrieval info: PRIVATE: Depth NUMERIC "8"
-- Retrieval info: PRIVATE: Empty NUMERIC "1"
-- Retrieval info: PRIVATE: Full NUMERIC "1"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Stratix II"
-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0"
-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1"
-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0"
-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0"
-- Retrieval info: PRIVATE: Optimize NUMERIC "2"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "2"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0"
-- Retrieval info: PRIVATE: UsedW NUMERIC "1"
-- Retrieval info: PRIVATE: Width NUMERIC "48"
-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1"
-- Retrieval info: PRIVATE: diff_widths NUMERIC "0"
-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0"
-- Retrieval info: PRIVATE: output_width NUMERIC "48"
-- Retrieval info: PRIVATE: rsEmpty NUMERIC "0"
-- Retrieval info: PRIVATE: rsFull NUMERIC "0"
-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0"
-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0"
-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0"
-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0"
-- Retrieval info: PRIVATE: wsFull NUMERIC "0"
-- Retrieval info: PRIVATE: wsUsedW NUMERIC "0"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Stratix II"
-- Retrieval info: CONSTANT: LPM_HINT STRING "MAXIMIZE_SPEED=5,RAM_BLOCK_TYPE=M4K"
-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "8"
-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo"
-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "48"
-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "3"
-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON"
-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "4"
-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON"
-- Retrieval info: CONSTANT: USE_EAB STRING "ON"
-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF"
-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "4"
-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr
-- Retrieval info: USED_PORT: data 0 0 48 0 INPUT NODEFVAL data[47..0]
-- Retrieval info: USED_PORT: q 0 0 48 0 OUTPUT NODEFVAL q[47..0]
-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk
-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq
-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk
-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq
-- Retrieval info: CONNECT: @data 0 0 48 0 data 0 0 48 0
-- Retrieval info: CONNECT: q 0 0 48 0 @q 0 0 48 0
-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0
-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0
-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0
-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0
-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0.tdf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0.inc TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0.cmp FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0.bsf TRUE FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0_inst.tdf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0_waveforms.html TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL fd_fifo0_wave*.jpg FALSE
-- Retrieval info: LIB_FILE: altera_mf

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


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

Собственно, сабж.

 

Среда разработки - Q II 7.2.

 

Периодически сталкиваемся с такой проблемой - LPM_FIFO вычитывает данные в обратном порядке (т.е., работает как стек,а не как фифо).

 

Причем штука эта происходит совершенно случайно - ничего в фифо не меняем, а оно само ведет себя как хочет.

 

Странно все это. С фифо все работают.

Можно предложить:

Почитать на сайте errata sheets на мегафункцию. Может что с типом памяти связано.

Сгенерите на другие типы памяти, посмотрите результат.

Можно сделать одноклоковое фифо как по записи, так и по чтению. Точно работать будет. (перевести входной клоковый домен на 150 мГц)

Скачать Q8II 8.1

Может проект по частоте не проходит или по временам удержания, установки. (Раз такая ситуация ВСЕГДА в моделировании определяется). Посмотрите, что в таком случае показывает функциональное моделирование.

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


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

Можно сделать одноклоковое фифо как по записи, так и по чтению. Точно работать будет.

 

Да. С двухклоковым FIFO на первом Циклоне делал проект - были потери данных. Много боролся, в итоге перешёл да одноклочное FIFO, о проблемах сразу забыли.

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


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

может скрин из модельера дадите - точнее часть его, которая связана с фифо и непосредственному "перевороту" шины (только выведите все сигналы фифошки)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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