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

xilinx iddr2+oddr2+iobuf

Здравствуйте.

У меня есть плата с плис 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;

 

Изменено пользователем Kostochkin

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


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

Что показывает FPGA editor? Так ли выглядит схема как задумывалось? В отношениие пинов.
Что со времянкой. Перенос всего добра в выходные регистры делает времянку очень жёсткой но в то же время может оказаться что именно при этой времянке ваши данные не защёлкиваются.
Что с моделированием? В модели работает?

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


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

В 20.09.2019 в 09:16, Kostochkin сказал:

В плис заходит двунаправленная 8 битная шина. Работаю с шиной в режиме DDR.

А если приходящие по этой шине сигналы управления обработать по CDC и далее сделать автомат, чтобы работать с шиной на внутренней частоте проекта. И тогда никакие DDR не понадобятся. Ведь всяко внутренняя частота на порядок выше, чем частоте работы этой шины... 

А еще при переключении направления неплохо давать такт на разряд емкостей линии... 

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


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

13 minutes ago, iosifk said:

А если приходящие по этой шине сигналы управления обработать по CDC и далее сделать автомат, чтобы работать с шиной на внутренней частоте проекта. И тогда никакие DDR не понадобятся. Ведь всяко внутренняя частота на порядок выше, чем частоте работы этой шины... 

А еще при переключении направления неплохо давать такт на разряд емкостей линии... 

Эта шина emmc, в режиме HS400, частота шины 200МГц.

14 minutes ago, iosifk said:

А еще при переключении направления неплохо давать такт на разряд емкостей линии... 

Как это сделать?

Изменено пользователем Kostochkin

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


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

25 минут назад, Kostochkin сказал:

Эта шина emmc, в режиме HS400, частота шины 200МГц

А кто выдает клоки? ПЛИС или клоки приходят от шины?

Вот здесь https://www.anti-malware.ru/analytics/Technology_Analysis/use__eMMC_standard_for_data_access_in_mobile_devices нарисовано, что клоки в карту приходят извне. Т.е. из плис, а значит никаких 200МГц по плате в режиме ТТЛ не пройдет... 

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


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

Клок выдает плис, но в режиме HS400 кристалл emmc выдает строб 200МГц для приема данных по шине.

HS400 - DDR режим с частотой 200МГц.

Изменено пользователем Kostochkin

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


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

1 минуту назад, Kostochkin сказал:

Клок выдает плис, но в режиме HS400 кристалл emmc выдает строб 200Мгц для приема данных по шине.

200 Мгц по проводам на плате в формате ТТЛ? 

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


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

В 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. 

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


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

1 час назад, Kostochkin сказал:

The frequency of this signal follows the frequency of CLK. 

Тогда задаем вопрос: а каков CLK?

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


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

3 минуты назад, Kostochkin сказал:

200 МГц

Т.е. Вы по плате хотите пропустить 200Мгц? А в каком стандарте? ТТЛ?

В любом случае, Вы под свою же синхрочастоту всегда успеете обработать приходящие данные. На 8 бит данных придет 1 строб. А зачем там DDR?

 

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


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

На плате, которая у меня есть, этот режим сделать не получится, так как питание девайса 3.3 вольта, а режим HS400 требует питания 1.8 вольт.

Я на будущее хочу заложиться.

3 minutes ago, iosifk said:

Т.е. Вы по плате хотите пропустить 200Мгц? А в каком стандарте? ТТЛ? 

Пока не знаю

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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