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

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

НАшел тут интересный документ по примитивам ПЛИС.

Правильно ли я понимаю что я могу использовать их в своем коде чтобы добиться нужного поведения?? Это нормальная практика??

 

К примеру у меня SDRAM ругается на то что ссигналы выставляются не в то время что нужно.

У меня идея взять такой вот блок: 

image.thumb.png.b7cef827f85aac3df869910f247cce5e.png

И тупо сдвинуть частоты на какое нибудь время. Вроде моделсим нормально так отработал, сдвиг получился, да и на качество кода это вроде как влияет минимально.

Можно так делать или есть какие нибудь подводные камни или ограничения?

 

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


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

Конечно можно и нужно 🙂
Они для этого и сделаны 🙂 

Само собой если они от той плис которая у вас 🙂 И вы понимаете где именно они стоят. Например IODelay это задержка для входов выходов и не может применятся внутри проекта. Только на внешних выводах и т.д.

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

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


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

В 25.03.2024 в 11:57, MegaVolt сказал:

Например IODelay это задержка для входов выходов и не может применятся внутри проекта. Только на внешних выводах и т.д.

То то я и смотрю что IDE ругается. 

А чем внутренний сигнал задержать не подскажете?

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


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

43 minutes ago, Worldmaster said:

А чем внутренний сигнал задержать не подскажете?

Триггером.

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


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

On 3/25/2024 at 12:43 PM, Worldmaster said:

чем внутренний сигнал задержать

на какое время?
прописать время задержки  в файл sdc...

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


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

В 25.03.2024 в 13:26, attaboy сказал:

Триггером.

А можно примерчик?

В 25.03.2024 в 13:34, Yuri124 сказал:

на какое время?
прописать время задержки  в файл sdc...

А моделсим это учтет? 

у меня он пишет что надо чтобы 1ns была. 

$hold( posedge Clk:312188750 ps, Ras_n:312188750 ps, 1 ns );

 

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


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

58 минут назад, Worldmaster сказал:

То то я и смотрю что IDE ругается. 

А чем внутренний сигнал задержать не подскажете?

На сколько и с каким шагом?

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


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

2 hours ago, Worldmaster said:

А можно примерчик?

reg some_sig;

reg some_sig_dly;

always @ (posedge clk) some_sig_dly <= some_sig;

 

some sig_dly задерживается на один такт. Время задержки определяется частотой clk.

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


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

4 часа назад, Worldmaster сказал:

1ns

А диапазон?

1ГГц в плис не живёт. Можно 500ГГц и DDR но это опять же уже на выходах в каких нибудь SerDes там вполне реально. Ну или в DDR триггерах выходных.... Но это означает что внутри плис оно будет более широкой шиной и некая логика обеспечивает крупную задержку. А SerDes мелкую.

Плюс опять же задержка в самом кристалле которую в ноль не убрать никак.

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


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

6 часов назад, MegaVolt сказал:

Например IODelay это задержка для входов выходов и не может применятся внутри проекта. Только на внешних выводах

А если сделать финт ушами и пустить сигнал с ноги на ногу?

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


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

9 hours ago, Worldmaster said:

То то я и смотрю что IDE ругается. 

А чем внутренний сигнал задержать не подскажете?

Внутренние сигналы обычно не задерживают. В случае острой необходимости это можно сделать, например на тех IODELAY заняв какую то неиспользуемую ногу ПЛИС. Но вряд ли вам это нужно. SDRAM прекрасно заработает с IODELAY

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


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

В 25.03.2024 в 22:00, dsmv сказал:

SDRAM прекрасно заработает с IODELAY

Чего то не очень.

MyIODel:IODELAY
GENERIC MAP (C_STATIC_DLY=>55
)
PORT MAP (
	DO=>dout,
	DF=>df, 
	DI=>sdram_clk,     <- сюда приходим с PLL
	SDTAP=>'0',
	SETN=>setn,
	VALUE=>value
); 


MySDRAM:  SDRAM_Controller_HS_Top
	port map (
		O_sdram_clk => O_sdram_clk,
		O_sdram_cke => O_sdram_cke,
		O_sdram_cs_n => O_sdram_cs_n,
		O_sdram_cas_n => O_sdram_cas_n,
		O_sdram_ras_n => O_sdram_ras_n,
		O_sdram_wen_n => O_sdram_wen_n,
		O_sdram_dqm => O_sdram_dqm,
		O_sdram_addr => O_sdram_addr,
		O_sdram_ba => O_sdram_ba,
		IO_sdram_dq => IO_sdram_dq,  

		I_sdrc_clk => sdrc_clk,
		I_sdram_clk => dout,      <------------------------ затем вот сюда
		I_sdrc_rst_n => rst_n,

		I_sdrc_cmd_en => I_sdrc_cmd_en,
		I_sdrc_cmd => I_sdrc_cmd,
		I_sdrc_precharge_ctrl => I_sdrc_precharge_ctrl,
		I_sdram_power_down => I_sdram_power_down,
		I_sdram_selfrefresh => I_sdram_selfrefresh,
		I_sdrc_addr => I_sdrc_addr,
		I_sdrc_dqm => I_sdrc_dqm,
		I_sdrc_data => I_sdrc_data,
		I_sdrc_data_len => I_sdrc_data_len,
		O_sdrc_data => O_sdrc_data,
		O_sdrc_init_done => O_sdrc_init_done,
		O_sdrc_cmd_ack => O_sdrc_cmd_ack
	);
ERROR (CK0018) : Instance 'SDRAM/MySDRAM/MyIODel' is not connected to buffer
WARN  (ST0001) : Ignored static timing analysis because of the failure of circuit analysis checking

 

 

Можно конечно использовать задержку PLL но там углы слишком большие и почему то перестает работать модуль при 90 градусном сдвиге. Но зато пропадают ошибки SDRAM.

 

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


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

16 часов назад, Jackov сказал:

А если сделать финт ушами и пустить сигнал с ноги на ногу?

В каких то очень странных случаях может помочь... Но вы бы спросили что решаете причём в отдельной теме и вам бы скорее ответили.
С плис работает почти всё что угодно включая DDR память... и почти под всё уже есть готовые решения.

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


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

8 hours ago, Worldmaster said:

Чего то не очень.

MyIODel:IODELAY
GENERIC MAP (C_STATIC_DLY=>55
)
PORT MAP (
	DO=>dout,
	DF=>df, 
	DI=>sdram_clk,     <- сюда приходим с PLL
	SDTAP=>'0',
	SETN=>setn,
	VALUE=>value
); 


MySDRAM:  SDRAM_Controller_HS_Top
	port map (
		O_sdram_clk => O_sdram_clk,
		O_sdram_cke => O_sdram_cke,
		O_sdram_cs_n => O_sdram_cs_n,
		O_sdram_cas_n => O_sdram_cas_n,
		O_sdram_ras_n => O_sdram_ras_n,
		O_sdram_wen_n => O_sdram_wen_n,
		O_sdram_dqm => O_sdram_dqm,
		O_sdram_addr => O_sdram_addr,
		O_sdram_ba => O_sdram_ba,
		IO_sdram_dq => IO_sdram_dq,  

		I_sdrc_clk => sdrc_clk,
		I_sdram_clk => dout,      <------------------------ затем вот сюда
		I_sdrc_rst_n => rst_n,

		I_sdrc_cmd_en => I_sdrc_cmd_en,
		I_sdrc_cmd => I_sdrc_cmd,
		I_sdrc_precharge_ctrl => I_sdrc_precharge_ctrl,
		I_sdram_power_down => I_sdram_power_down,
		I_sdram_selfrefresh => I_sdram_selfrefresh,
		I_sdrc_addr => I_sdrc_addr,
		I_sdrc_dqm => I_sdrc_dqm,
		I_sdrc_data => I_sdrc_data,
		I_sdrc_data_len => I_sdrc_data_len,
		O_sdrc_data => O_sdrc_data,
		O_sdrc_init_done => O_sdrc_init_done,
		O_sdrc_cmd_ack => O_sdrc_cmd_ack
	);
ERROR (CK0018) : Instance 'SDRAM/MySDRAM/MyIODel' is not connected to buffer
WARN  (ST0001) : Ignored static timing analysis because of the failure of circuit analysis checking

 

 

Можно конечно использовать задержку PLL но там углы слишком большие и почему то перестает работать модуль при 90 градусном сдвиге. Но зато пропадают ошибки SDRAM.

 

Вам нужен

image.thumb.png.cca82e76393b4c7e27fb2461b4ef5118.png

как я понимаю

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


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

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

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

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

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

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

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

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

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

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