реклама на сайте
подробности

 
 
> Асинхронное FIFO Spartan3, Странное поведение
0xFF
сообщение Feb 15 2006, 18:26
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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, но неужели нужно ждать чтоб получать данные.

ПОдскажите пожалуста, может я где то в установках чего напутал

Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Epikur
сообщение Mar 24 2006, 12:18
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Значит так.
У самого была похожая проблема, вот в чём было дело.
Сигнал "Буфер полон" тактируется от WriteClock, а сигнал "Буфер пуст" тактируется от ReadClock.
А потому если вы работаете в асинхронном режиме, пишите в буфер, но не читаете и даже клок чтения не подаёте, то сигнал "Буфер пуст" вообще никогда не изменится. (Здорово, правда?)
А так - достаточно одного тактового импульса чтения после сигнала сброса, чтобы "Буфер пуст" принял вменяемое значение.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 09:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016