Доброго времени суток.
Необходимо в проекте использовать асинхронное фифо. Чтобы не тратить время на построение модуля, попросил CoreGenerator (fifo_generator_v2_2) об оказании услуги. Установочки были следующими
FIFO_GENERATOR_V2_2 #(
0, // c_common_clock
0, // c_count_type
2, // c_data_count_width
"BlankString", // c_default_value
32, // c_din_width
"0", // c_dout_rst_val
32, // c_dout_width
0, // c_enable_rlocs
"spartan3", // c_family
0, // c_has_almost_empty
0, // c_has_almost_full
0, // c_has_backup
0, // c_has_data_count
0, // c_has_meminit_file
0, // c_has_overflow
0, // c_has_rd_data_count
0, // c_has_rd_rst
1, // c_has_rst
0, // c_has_underflow
0, // c_has_valid
0, // c_has_wr_ack
0, // c_has_wr_data_count
0, // c_has_wr_rst
2, // c_implementation_type
0, // c_init_wr_pntr_val
1, // c_memory_type
"BlankString", // c_mif_file_name
0, // c_optimization_mode
0, // c_overflow_low
1, // c_preload_latency
0, // c_preload_regs
512, // c_prim_fifo_type
64, // c_prog_empty_thresh_assert_val
64, // c_prog_empty_thresh_negate_val
0, // c_prog_empty_type
192, // c_prog_full_thresh_assert_val
192, // c_prog_full_thresh_negate_val
0, // c_prog_full_type
2, // c_rd_data_count_width
256, // c_rd_depth
8, // c_rd_pntr_width
0, // c_underflow_low
0, // c_use_fifo16_flags
0, // c_valid_low
0, // c_wr_ack_low
2, // c_wr_data_count_width
256, // c_wr_depth
8, // c_wr_pntr_width
1) // c_wr_response_latency
inst (
.DIN(din),
.RD_CLK(rd_clk),
.RD_EN(rd_en),
.RST(rst),
.WR_CLK(wr_clk),
.WR_EN(wr_en),
.DOUT(dout),
.EMPTY(empty),
.FULL(full),
.CLK(),
.BACKUP(),
.BACKUP_MARKER(),
.PROG_EMPTY_THRESH(),
.PROG_EMPTY_THRESH_ASSERT(),
.PROG_EMPTY_THRESH_NEGATE(),
.PROG_FULL_THRESH(),
.PROG_FULL_THRESH_ASSERT(),
.PROG_FULL_THRESH_NEGATE(),
.RD_RST(),
.WR_RST(),
.ALMOST_EMPTY(),
.ALMOST_FULL(),
.DATA_COUNT(),
.OVERFLOW(),
.PROG_EMPTY(),
.PROG_FULL(),
.VALID(),
.RD_DATA_COUNT(),
.UNDERFLOW(),
.WR_ACK(),
.WR_DATA_COUNT());
И вот получил я долгожданное фифо, но вот негаразд после первой записи только после нескольких сотен тактов стороны чтения получаю долгожданные данные. Глубину вроде задавал 256, но неужели нужно ждать чтоб получать данные.
ПОдскажите пожалуста, может я где то в установках чего напутал
Заранее благодарен.
Azazella
Feb 16 2006, 10:01
Данные на выходе асинхронного фифо появляются при проведении оперции чтения из фифо, которое можно проводить сразу же после записи (через один или два такта точно не помню) и совсем не должно зависит от глубины фифо (это принцип фифо).
При условии, что присутствуют клоки, сняты сигналы сброса глюков быть не должно.
А еще в глаза бросились следующие настройки, может я не прав, но проверте
1, // c_preload_latency
1) // c_wr_response_latency
Сотня тактов это странно.
Вот сейчас проверил: асинхронное FIFO, данные появились на пятый такт.
Цитата(dsmv @ Feb 16 2006, 14:05)

Сотня тактов это странно.
Вот сейчас проверил: асинхронное FIFO, данные появились на пятый такт.
Даже сам не знаю что делать, может у меня CoreGenerator работает косо, либо весь ISE 7.1 sp4. Сам понимаю что это бред и так быть не должно. Но оно есть. Поставил опцию First_Word_Fall_Through ему по барабану 256 тактов говорит что мол пустой и на 257 появляется. Ума не приложу что делать.
З.Ы.: Думаю может уже кого попросить мне корку сгенирить.
Если надо, то могу сгенерить. А могу и своё выслать. У меня ещё есть дополнительная обвязка. В частности формирование флага ef и регистровый выход.
Цитата(0xFF @ Feb 16 2006, 09:42)

Цитата(dsmv @ Feb 16 2006, 14:05)

Сотня тактов это странно.
Вот сейчас проверил: асинхронное FIFO, данные появились на пятый такт.
Даже сам не знаю что делать, может у меня CoreGenerator работает косо, либо весь ISE 7.1 sp4. Сам понимаю что это бред и так быть не должно. Но оно есть. Поставил опцию First_Word_Fall_Through ему по барабану 256 тактов говорит что мол пустой и на 257 появляется. Ума не приложу что делать.
З.Ы.: Думаю может уже кого попросить мне корку сгенирить.
ip_update3 стоит ? без него СП4 с исползованием корок "жалкое подобие левой руки" (с) Старый анекдот
Цитата(dsmv @ Feb 17 2006, 11:15)

Если надо, то могу сгенерить. А могу и своё выслать. У меня ещё есть дополнительная обвязка. В частности формирование флага ef и регистровый выход.
Был бы очень рад жду вашей помощи
Цитата(des00 @ Feb 17 2006, 16:47)

Цитата(0xFF @ Feb 16 2006, 09:42)

Цитата(dsmv @ Feb 16 2006, 14:05)

Сотня тактов это странно.
Вот сейчас проверил: асинхронное FIFO, данные появились на пятый такт.
Даже сам не знаю что делать, может у меня CoreGenerator работает косо, либо весь ISE 7.1 sp4. Сам понимаю что это бред и так быть не должно. Но оно есть. Поставил опцию First_Word_Fall_Through ему по барабану 256 тактов говорит что мол пустой и на 257 появляется. Ума не приложу что делать.
З.Ы.: Думаю может уже кого попросить мне корку сгенирить.
ip_update3 стоит ? без него СП4 с исползованием корок "жалкое подобие левой руки" (с) Старый анекдот
все стоит да толку никакого , вчера поставил ise8.1 та же проблема. Начал уже просто по шагам смотреть что же за ерунда. И вот что я увидел когда буфер у меня пустой он мне машет флажком пустой , а когда в него байтик ложу всё равно пустой, и так пока 256 штук не положу, только после этого говорит не пустой.
Поэтому господа если кто может, вышлете мне пожалуста асинхронный фифо "параметрируемый"
Всем откликнувшимся очень признателен
Цитата(0xFF @ Feb 17 2006, 10:40)

все стоит да толку никакого , вчера поставил ise8.1 та же проблема. Начал уже просто по шагам смотреть что же за ерунда. И вот что я увидел когда буфер у меня пустой он мне машет флажком пустой , а когда в него байтик ложу всё равно пустой, и так пока 256 штук не положу, только после этого говорит не пустой.
Поэтому господа если кто может, вышлете мне пожалуста асинхронный фифо "параметрируемый"
Всем откликнувшимся очень признателен
Блииин а границы "ранних" флагов у вас случайно не развернуто поставленны ?
Реальные флаги пустоты, заполнения (не ранние должны вставать после 3 -х тактов стороны принимающей флаг). Но если вы пользуетсь ранними флагами, то у вас могут быть похожие проблемы при некорректно стоящих границах.
Да в общем не жалко.
На e-mail тоже выслал, на всякий случай.
Внутри архива:
ctrl_fifo512x32.edn - модуль сформирован кодогенератором, но уже не помню каким.
ctrl_fifo512x32.vhd - тоже сформирован кодогенератором
cl_fifo_control_v2.vhd - узел управления
cl_fifo512x32_v2.vhd - собственно компонент FIFO
Цитата(des00 @ Feb 17 2006, 18:56)

Цитата(0xFF @ Feb 17 2006, 10:40)

все стоит да толку никакого , вчера поставил ise8.1 та же проблема. Начал уже просто по шагам смотреть что же за ерунда. И вот что я увидел когда буфер у меня пустой он мне машет флажком пустой , а когда в него байтик ложу всё равно пустой, и так пока 256 штук не положу, только после этого говорит не пустой.
Поэтому господа если кто может, вышлете мне пожалуста асинхронный фифо "параметрируемый"
Всем откликнувшимся очень признателен
Блииин а границы "ранних" флагов у вас случайно не развернуто поставленны ?
Реальные флаги пустоты, заполнения (не ранние должны вставать после 3 -х тактов стороны принимающей флаг). Но если вы пользуетсь ранними флагами, то у вас могут быть похожие проблемы при некорректно стоящих границах.
Нет ранними флагами я не пользуюсь, мне бы хоть так работало, единственное чем я пользуюсь First Word Fall Through
Цитата(dsmv @ Feb 17 2006, 19:45)

Да в общем не жалко.
На e-mail тоже выслал, на всякий случай.
Внутри архива:
ctrl_fifo512x32.edn - модуль сформирован кодогенератором, но уже не помню каким.
ctrl_fifo512x32.vhd - тоже сформирован кодогенератором
cl_fifo_control_v2.vhd - узел управления
cl_fifo512x32_v2.vhd - собственно компонент FIFO
Спасибо большое сейчас попробую.
Epikur
Mar 24 2006, 12:18
Значит так.
У самого была похожая проблема, вот в чём было дело.
Сигнал "Буфер полон" тактируется от WriteClock, а сигнал "Буфер пуст" тактируется от ReadClock.
А потому если вы работаете в асинхронном режиме, пишите в буфер, но не читаете и даже клок чтения не подаёте, то сигнал "Буфер пуст" вообще никогда не изменится. (Здорово, правда?)
А так - достаточно одного тактового импульса чтения после сигнала сброса, чтобы "Буфер пуст" принял вменяемое значение.