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

Как убрать варнинги

В 01.03.2024 в 11:15, Maverick_ сказал:

в корку MIPI я бы работал через двухклоковое фифо 

Ну у меня по сути так и есть. Запись ведется при поступлении данных с MIPI в одном процессе. А отправка в оперативу идет по контролю количества в буфере в другом процессе, который формирует команды для SDRAM.

А сам буфер циклический.

В 01.03.2024 в 11:15, Maverick_ сказал:

возможно лучше сделал бы пакетное фифо - мое на форуме как пример

А в чем преимущество? То что вы предлагаете должно работать быстрее?? 

Я вообще понял что проблема где то в корке а не в моем коде. 

В 01.03.2024 в 11:15, Maverick_ сказал:

пакетное фифо - мое на форуме как пример

Можно ссылку?

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


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

22 minutes ago, Worldmaster said:

Можно ссылку?

вот

 

23 minutes ago, Worldmaster said:

А в чем преимущество? То что вы предлагаете должно работать быстрее?? 

промоделируете и увидите)))

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


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

Хм. А вот это как можно объяснить?

Переписал код и получил вот такие частоты:

image.thumb.png.ae4cc45c53529b3d649fd3312feb06e0.png

 

Логический уровень у Ffifo_clock = 1. Частота более чем достаточная.

Далее добавляю еще один констрейн чтобы посмотреть частоту в модуль SDRAM. 

И каким то чудесным образом логический уровень поднимается до 7.

image.thumb.png.59c3b86367d73c20ddf2558618a3b3f0.png

 

Код то не меняется. Как этот констрейн влияет на сборку то?

 

 

После оптимизации модуля SDRAM уровень упал но частота почему то снизилась. 

image.thumb.png.f796aba6380582b819bf47dd671ed5b5.png

 

Где тут логика то.. модули же не связаны между собой от слова совсем.

 

 

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

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


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

40 minutes ago, Worldmaster said:

Далее добавляю еще один констрейн чтобы посмотреть частоту в модуль SDRAM. 

просто просмотр Fmax добавьте, а не частоту.

 

41 minutes ago, Worldmaster said:

Где тут логика то.. модули же не связаны между собой от слова совсем.

Если совсем - то возможно надо falsepath

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


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

24 minutes ago, _4afc_ said:

 

не пробовали pipelineCounter для повышения частоты

для задания паузы?

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


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

1 hour ago, Worldmaster said:

Хм. А вот это как можно объяснить?

Переписал код и получил вот такие частоты:

image.thumb.png.ae4cc45c53529b3d649fd3312feb06e0.png

 

Логический уровень у Ffifo_clock = 1. Частота более чем достаточная.

Далее добавляю еще один констрейн чтобы посмотреть частоту в модуль SDRAM. 

И каким то чудесным образом логический уровень поднимается до 7.

image.thumb.png.59c3b86367d73c20ddf2558618a3b3f0.png

 

Код то не меняется. Как этот констрейн влияет на сборку то?

 

 

После оптимизации модуля SDRAM уровень упал но частота почему то снизилась. 

image.thumb.png.f796aba6380582b819bf47dd671ed5b5.png

 

Где тут логика то.. модули же не связаны между собой от слова совсем.

 

 

 

в IP core есть модуль DMA или VDMA (для видео) если есть может стоит попробовать его?

пакетная передача в видео - ставиться фифо на размер строки видео и таким образом формируется так называемый пакет как avalon или axi stream интерфейсе

таким образом можно считать пакеты - формировать кадры

использование стандарных интерфейсов увеличивает читабельность описания - avalon или axi stream

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


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

В 01.03.2024 в 14:32, Maverick_ сказал:

в IP core есть модуль DMA или VDMA (для видео)

Не вижу такого. image.png.6e25f9803f20f2a8a3b782f7a47722c1.png

У меня не просто видео, стандартные решения для видео не подойдут. К тому же к каждому кадру нужен дополнительный штамп данных который должен быть жестко привязан к кадру. 

Да и как бы сейчас уже менять концепцию поздно. В отдельной теме же обсуждали это некоторое время назад. Теперь когда вся логика работает надо просто напильничком допилить чтобы укладывалось в железку.

 

 

В 01.03.2024 в 13:40, _4afc_ сказал:

просто просмотр Fmax добавьте, а не частоту.

Можно пример как это сделать?

 

В 01.03.2024 в 14:04, Maverick_ сказал:

не пробовали pipelineCounter для повышения частоты

для задания паузы?

Что то не понятно, к чему это? 

 

В 01.03.2024 в 13:40, _4afc_ сказал:

Если совсем - то возможно надо falsepath

Можно пример?? 

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

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


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

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


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

36 minutes ago, Worldmaster said:

Можно пример как это сделать?

Report max frequenсy

 

1 hour ago, Maverick_ said:

не пробовали pipelineCounter для повышения частоты

Quote

применить конвеерний счетчик - вместо встроенного в модуль PauseCounter сигнала count

VHDL2008 не мой язык. Данная операция потребует времени и усилий которых у меня нет. Но направление для ускорения верное.

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


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

В 01.03.2024 в 15:25, _4afc_ сказал:

конвеерний счетчик

Это прикольная техника .. Попробую. пасибо.

 

А может быть можно как то оптимизировать запись в большие регистры?? 

типа 

signal O_sdrc_data:   std_logic_vector(31 downto 0); 

Может там тоже есть какая нибудь хитрая конвееризация?

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

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


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

1 hour ago, _4afc_ said:

Report max frequenсy

 

VHDL2008 не мой язык. Данная операция потребует времени и усилий которых у меня нет. Но направление для ускорения верное.

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

в описании модуля для создания паузы - проблема ж частоты именно в "большой" разрядности счетчика

например 64 бита и/или 32 бита и/или 24 бита

менять разрядность в строке

       width_g: natural := 64; -- Must be divisible by parts_g.

1 hour ago, Worldmaster said:

Это прикольная техника .. Попробую. пасибо.

 

А может быть можно как то оптимизировать запись в большие регистры?? 

типа 

signal O_sdrc_data:   std_logic_vector(31 downto 0); 

Может там тоже есть какая нибудь хитрая конвееризация?

 

 в некоторых памятях например в DDR есть так называемый burst режим -когда данные пишутся в память непрерывно по 16/32/64 слова/байта

вот

можно использовать например если тактовая отличается в разы - в DDR3/4 используется также

при работе с трансиверами например 10G - 64 bit данные

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


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

49 minutes ago, Maverick_ said:

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

например 64 бита и/или 32 бита и/или 24 бита

 

При ширине 4 всё плохо,

  • 8 бит - 290МГц, 3 слоя много цепочек DFFCE-LUT3-LUT4-DFFCE
  • 16бит - 246МГц.
  • 32бит - 195МГц.
  • 64бит - 154МГц.

 

А вот при ширине 3 - уже лучше:

  • 9 бит - 433МГц, 2 слоя одна цепочка DFFCE-LUT2-LUT4-DFFCE
  • 18бит - 297МГц. 3 слоя
  • 33бит - 213МГц. 4 слоя
  • 64бит - 165МГц. 4 слоя

Дальнейшее уменьшение ширины только ухудшает ситуацию...

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


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

2 minutes ago, _4afc_ said:

При ширине 4 всё плохо,

  • 8 бит - 290МГц, 3 слоя много цепочек DFFCE-LUT3-LUT4-DFFCE
  • 16бит - 246МГц.
  • 32бит - 195МГц.
  • 64бит - 154МГц.

 

А вот при ширине 3 - уже лучше:

  • 9 бит - 433МГц, 2 слоя одна цепочка DFFCE-LUT2-LUT4-DFFCE
  • 18бит - 297МГц. 3 слоя
  • 33бит - 213МГц. 4 слоя
  • 64бит - 165МГц. 4 слоя

Дальнейшее уменьшение ширины только ухудшает ситуацию...

огромное спасибо за информацию)

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


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

Продолжаем ковырять. ))

Подскажите еще пожалуйста как работает логика вот тут:

Сделал три разных процесса которые работают с памятью и буферами

Каждый процесс запитал частотой от разных экземпляров одного PLL. с одинаковыми параметрами и выходной частотой 160mhz.

     -- 160 mhz
      component sdram_pll_clk
          port (
              clkout: out std_logic;
              lock: out std_logic;
              clkoutp: out std_logic;
              clkin: in std_logic
          );
      end component;
--------------------------------------------


clk160mhz: sdram_pll_clk
 		port map (
 			clkout => clk_160mhz,
 			lock => pll_lock_160,
 			clkoutp => clk_160_d22_mhz,
 			clkin => InClock_50
 		);
 	
	clk160mhz_next: sdram_pll_clk
 		port map (
 			clkout => clk_160_2mhz,
 			lock => pll_lock_160_2,
 			clkoutp => clk_160_2_d22_mhz,
 			clkin => InClock_50
 		);
	
		clk160mhz_next_3: sdram_pll_clk
 		port map (
 			clkout => clk_160_3mhz,
 			lock => pll_lock_160_3,
 			clkoutp => clk_160_3_d22_mhz,
 			clkin => InClock_50
 		);

 

После компиляции получаю очень хороший результат.

image.thumb.png.f5753f7809f914aa48253b8e69731fd8.png

 

Вроде бы все супер. Но дальше я убираю эти генераторы и запитываю все процессы от одного генератора в 160mhz.

И после сборки опять все становится плохо. 

image.thumb.png.ad4ee90ab3389f095a81291ff6943e91.png

 

Разве тут не работает логика что время должно рассчитываться по самой длиннейшей цепочке?

Должно же быть не ниже 218mhz. 

Почему оно не так то?? И как сделать чтобы было нормально?

 

 

 

 

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


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

On 3/5/2024 at 9:13 AM, Worldmaster said:

время должно рассчитываться по самой длиннейшей цепочке?

Насколько я понимаю - кроме кол-ва логических блоков на частоту влияют также задержки на элементах коммутации сигналов и длина путей.

Ведь , к примеру, 2 блока логики могут находиться рядом или на противоположных сторонах кристалла  - соответственно время прохождения сигнала через них при кажущейся одинаковости будет разное.
А если CLК  идет по выделенным скоростным ресурсам, то этот сигнал будет заметно быстрее доходит до тактируемых элементов, чем данные. Т.е. надо задержать тактируемый фронт = понизить частоту.

Ну и когда у Вас 3 разные частоты "питают" 3 разных блока - они , наверное, считаются независимыми? Возможно, синтезатору легче разложить требуемое железо в кристалле с требуемыми частотами...

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


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

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

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

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

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

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

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

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

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

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