|
|
  |
Асинхронное FIFO Spartan3, Странное поведение |
|
|
|
Feb 15 2006, 18:26
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Доброго времени суток.
Необходимо в проекте использовать асинхронное фифо. Чтобы не тратить время на построение модуля, попросил 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, но неужели нужно ждать чтоб получать данные.
ПОдскажите пожалуста, может я где то в установках чего напутал
Заранее благодарен.
|
|
|
|
|
Feb 16 2006, 10:01
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-02-06
Из: Украина
Пользователь №: 13 850

|
Данные на выходе асинхронного фифо появляются при проведении оперции чтения из фифо, которое можно проводить сразу же после записи (через один или два такта точно не помню) и совсем не должно зависит от глубины фифо (это принцип фифо). При условии, что присутствуют клоки, сняты сигналы сброса глюков быть не должно.
А еще в глаза бросились следующие настройки, может я не прав, но проверте 1, // c_preload_latency 1) // c_wr_response_latency
|
|
|
|
|
Feb 16 2006, 14:42
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата(dsmv @ Feb 16 2006, 14:05)  Сотня тактов это странно. Вот сейчас проверил: асинхронное FIFO, данные появились на пятый такт. Даже сам не знаю что делать, может у меня CoreGenerator работает косо, либо весь ISE 7.1 sp4. Сам понимаю что это бред и так быть не должно. Но оно есть. Поставил опцию First_Word_Fall_Through ему по барабану 256 тактов говорит что мол пустой и на 257 появляется. Ума не приложу что делать. З.Ы.: Думаю может уже кого попросить мне корку сгенирить.
|
|
|
|
|
Feb 17 2006, 13:47
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(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 с исползованием корок "жалкое подобие левой руки" (с) Старый анекдот
--------------------
|
|
|
|
|
Feb 17 2006, 15:40
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата(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 штук не положу, только после этого говорит не пустой. Поэтому господа если кто может, вышлете мне пожалуста асинхронный фифо "параметрируемый" Всем откликнувшимся очень признателен
|
|
|
|
|
Feb 17 2006, 16:45
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Да в общем не жалко. На e-mail тоже выслал, на всякий случай. Внутри архива: ctrl_fifo512x32.edn - модуль сформирован кодогенератором, но уже не помню каким. ctrl_fifo512x32.vhd - тоже сформирован кодогенератором cl_fifo_control_v2.vhd - узел управления cl_fifo512x32_v2.vhd - собственно компонент FIFO
|
|
|
|
|
Feb 17 2006, 16:49
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата(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 Спасибо большое сейчас попробую.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|