Kostochkin 0 20 сентября, 2019 Опубликовано 20 сентября, 2019 (изменено) · Жалоба Здравствуйте. У меня есть плата с плис xilinx spartan 6. Проект в ise 14.7. В плис заходит двунаправленная 8 битная шина. Работаю с шиной в режиме DDR. Соответственно я использую IDDR2, ODDR2 и IOBUF для этой шины. ISE потребовал для сигнала управления T IOBUF, чтобы этот сигнал проходил через ODDR2 и на каждый бит шины был свой сигнал управления T IOBUF. Сделал, завел сигнал переключения двунаправленной шины на 8 ODDR2 и получил 8 сигналов управления, их завел на соответственно 8 входов T IOBUF. Проект собрался, но шина не работает в железе, прием данных не работает. Если удалить все IDDR2, ODDR2 и IOBUF и просто в режиме DDR работать с шиной не по фронту и спаду, а только по фронту, но с удвоенной частотой, при этом шина работает нормально... В чем ошибка? Благодарю. --data_emmc - 8bits bidirectional bus; --s_clk_mux_main - clock; --s_not_clk_mux_main - inversion clock; --s_reset - async reset; --s_data_emmc_out_16 - 16bits data out; --s_data_emmc_out_8 - 8bits data out; --s_data_emmc_in_16 - 16bits data in; --s_data_emmc_in_8 - 8bits data in; --s_flag_data_trans - bit control bus; --s_flag_data_trans_ddr - byte control bus; B1 : for ii in 0 to 7 generate B2 : IF (BUS_MODE = "DDR") GENERATE IOBUF_ii_ddr : IOBUF generic map ( DRIVE => 12, IOSTANDARD => "DEFAULT", SLEW => "SLOW") port map ( O => s_data_emmc_in_8(ii), IO => data_emmc(ii), I => s_data_emmc_out_8(ii), T => s_flag_data_trans_ddr(ii)); iddr2_ii : IDDR2 generic map ( DDR_ALIGNMENT => "C0", INIT_Q0 => '0', INIT_Q1 => '0', SRTYPE => "ASYNC") port map ( Q0 => s_data_emmc_in_16(ii+8), Q1 => s_data_emmc_in_16(ii), C0 => s_clk_mux_main, C1 => s_not_clk_mux_main, CE => '1', D => s_data_emmc_in_8(ii), R => s_reset, S => '0'); oddr_ii : ODDR2 generic map ( DDR_ALIGNMENT => "C0", INIT => '0', SRTYPE => "ASYNC") port map ( Q => s_data_emmc_out_8(ii), C0 => s_clk_mux_main, C1 => s_not_clk_mux_main, CE => '1', D0 => s_data_emmc_out_16(ii+8), D1 => s_data_emmc_out_16(ii), R => s_reset, S => '0'); oddr_tst : ODDR2 generic map ( DDR_ALIGNMENT => "C0", INIT => '0', SRTYPE => "ASYNC") port map ( Q => s_flag_data_trans_ddr(ii), C0 => s_clk_mux_main, C1 => s_not_clk_mux_main, CE => '1', D0 => s_flag_data_trans, D1 => not s_flag_data_trans, R => s_reset, S => '0'); end generate; end generate; Изменено 20 сентября, 2019 пользователем Kostochkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 сентября, 2019 Опубликовано 20 сентября, 2019 · Жалоба Что показывает FPGA editor? Так ли выглядит схема как задумывалось? В отношениие пинов. Что со времянкой. Перенос всего добра в выходные регистры делает времянку очень жёсткой но в то же время может оказаться что именно при этой времянке ваши данные не защёлкиваются. Что с моделированием? В модели работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба Извините, эта конструкция работает, я ошибся. Благодарю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба В 20.09.2019 в 09:16, Kostochkin сказал: В плис заходит двунаправленная 8 битная шина. Работаю с шиной в режиме DDR. А если приходящие по этой шине сигналы управления обработать по CDC и далее сделать автомат, чтобы работать с шиной на внутренней частоте проекта. И тогда никакие DDR не понадобятся. Ведь всяко внутренняя частота на порядок выше, чем частоте работы этой шины... А еще при переключении направления неплохо давать такт на разряд емкостей линии... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 (изменено) · Жалоба 13 minutes ago, iosifk said: А если приходящие по этой шине сигналы управления обработать по CDC и далее сделать автомат, чтобы работать с шиной на внутренней частоте проекта. И тогда никакие DDR не понадобятся. Ведь всяко внутренняя частота на порядок выше, чем частоте работы этой шины... А еще при переключении направления неплохо давать такт на разряд емкостей линии... Эта шина emmc, в режиме HS400, частота шины 200МГц. 14 minutes ago, iosifk said: А еще при переключении направления неплохо давать такт на разряд емкостей линии... Как это сделать? Изменено 23 сентября, 2019 пользователем Kostochkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 25 минут назад, Kostochkin сказал: Эта шина emmc, в режиме HS400, частота шины 200МГц А кто выдает клоки? ПЛИС или клоки приходят от шины? Вот здесь https://www.anti-malware.ru/analytics/Technology_Analysis/use__eMMC_standard_for_data_access_in_mobile_devices нарисовано, что клоки в карту приходят извне. Т.е. из плис, а значит никаких 200МГц по плате в режиме ТТЛ не пройдет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 (изменено) · Жалоба Клок выдает плис, но в режиме HS400 кристалл emmc выдает строб 200МГц для приема данных по шине. HS400 - DDR режим с частотой 200МГц. Изменено 23 сентября, 2019 пользователем Kostochkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 1 минуту назад, Kostochkin сказал: Клок выдает плис, но в режиме HS400 кристалл emmc выдает строб 200Мгц для приема данных по шине. 200 Мгц по проводам на плате в формате ТТЛ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба В EMMC 5.0 появился сигнал DATA_STROBE от девайса к хосту. JEDEC Standard No. 84-B50: Data Strobe: This signal is generated by the device and used for data output and CRC status response output in HS400 mode. The frequency of this signal follows the frequency of CLK. For data output each cycle of this signal directs two bits transfer(2x) on the data - one bit for positive edge and the other bit for negative edge. For CRC status response output, the CRC status is latched on the positive edge only, and don't care on the negative edge. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 1 час назад, Kostochkin сказал: The frequency of this signal follows the frequency of CLK. Тогда задаем вопрос: а каков CLK? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба Just now, iosifk said: Тогда задаем вопрос: а каков CLK? 200 МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 3 минуты назад, Kostochkin сказал: 200 МГц Т.е. Вы по плате хотите пропустить 200Мгц? А в каком стандарте? ТТЛ? В любом случае, Вы под свою же синхрочастоту всегда успеете обработать приходящие данные. На 8 бит данных придет 1 строб. А зачем там DDR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба На плате, которая у меня есть, этот режим сделать не получится, так как питание девайса 3.3 вольта, а режим HS400 требует питания 1.8 вольт. Я на будущее хочу заложиться. 3 minutes ago, iosifk said: Т.е. Вы по плате хотите пропустить 200Мгц? А в каком стандарте? ТТЛ? Пока не знаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться