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

Чудеса быстродействия 18-разрядного счетчика.

2 minutes ago, RobFPGA said:

Приветствую!  
Простите, но гадать на кофейной гуще будет как то результативнее  :wink2:   
Мы отсюда не видим ни структуры вашей шины и обвязки вокруг памяти ни то как память к процу цепляется, ...   А у меня уже на сегодня лимит по кофе исчерпан  :cray:Удачи! Rob.

Страшный он, из-за того, что исторически делался впопыхах и для упрощения бенча используется параллельно 2* SPI, который я включаю в самом дизайне   для эрзац-проверки в симуляторе. И в самом бенче уже 2 мастера SPI, где стоит заглушка по последовательным данным.  Мне не жалко выставить этот ужас тут и разобраться тут будет сложно. Я тогда определю его как непосредственно готовый для сборки(лишнее отключаю.) и оценки TQ.  Эта гигантомания каприз начальства и для тестирования вполне хватило бы более скромных цифр. Но... так хотелки выстроились не верху... QII  18.0

MaxRAM_optEMIF200_SPI00a_83_186conv.qar

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


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

13 hours ago, Мур said:

Тоже решил заглянуть, проходя мимо. Развернул проект - не нашел слаков, связанных со счетчиками. Только куча addr_mem_b[...], связанных с разными тактовыми доменами и т.д.

А зачем на 200МГц по отрицательному фронту какие-то данные перекладывать? Там такая анархия творится... Мне кажется, дело не столько в счетчиках, сколько в этом. Перейдите в единый тактовый домен, уберите работу по заднему фронту тактовой.

ЗЫ.

Во всех RAM на порт А подана тактовая 100 МГц, а addr_mem_b защёлкивается на 200 МГц.

mem0: RAM2P
	PORT map	(
		address_a		=>		addr_mem_b,
		address_b		=>		adr_b,		--BUS
		clock_a			=>		clk100_s,
		clock_b			=>		nlk200_s,--clk200_s,	--clk200_s,	--BUS
		data_a			=>		DATAspi_b,
		data_b			=>		dat_b,		--BUS		
		wren_a			=>		wsw0_s,
		wren_b			=>		ww0_s,		--BUS
		q_a		 		=>		rim0_b,	
		q_b				=>		bus0_bus			--BUS
	);
...
  ...
  aaa: process (clk200_s)
begin
	if clk200_s'event and clk200_s = '0' then
			addr_mem20t_b	<= addr_mem200_b;--тут конвейер по адресу
			addr_mem2tt_b	<= addr_mem20t_b;
			addr_mem_b	  	<= addr_mem2tt_b;
			
	end if;
end process aaa;

Тоже самое с "address_b => adr_b,        --BUS". Входной сигнал через комбинаторику засовывается в порты RAM на 200 МГц.

Тоже самое с сигналом wt_s - формируется на 200 МГц, используется для записи в порт RAM, работающий на 100 МГц

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


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

2 hours ago, nice_vladi said:

Тоже решил заглянуть, проходя мимо. Развернул проект - не нашел слаков, связанных со счетчиками. Только куча addr_mem_b[...], связанных с разными тактовыми доменами и т.д.

А зачем на 200МГц по отрицательному фронту какие-то данные перекладывать? Там такая анархия творится... Мне кажется, дело не столько в счетчиках, сколько в этом. Перейдите в единый тактовый домен, уберите работу по заднему фронту тактовой.

отлично!..   Спасибо!

Имею право разделять RAM на две независимые(200 и 100) парадигмы, где одна обслуживает скоростную шину, другая в сервисе SPI.  Отрицательный фронт(раньше в IP его можно было выбирать) взят опытным путем, поскольку с прямым он тормозит в TQ в два раза!

Quote

Во всех RAM на порт А подана тактовая 100 МГц, а addr_mem_b защёлкивается на 200 МГц.

Тоже самое с "address_b => adr_b,        --BUS". Входной сигнал через комбинаторику засовывается в порты RAM на 200 МГц.

Тоже самое с сигналом wt_s - формируется на 200 МГц, используется для записи в порт RAM, работающий на 100 МГц

Это как раз недостающий конвейер шины адреса, который я поставил накануне, чтобы ближе протянуть её к самому RAM. Поскольку частоты кратны, я должен был это учитывать (один там лишний). Терять один тик 100МГц я ещё могу себе позволить...

Комбинаторика перед регистром - это нормально, тем более она есть быстрый мультиплексор(и регистр на выходе!)

С wt_s  не смотрел, поскольку в TQ его нет. Но за это спасибо! Буду внимательнее...  (Порт В  там как раз 200МГц!)  Так что все тут верно..

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


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

Приветствую!

6 hours ago, Мур said:

Это как раз недостающий конвейер шины адреса, который я поставил накануне, чтобы ближе протянуть её к самому RAM. Поскольку частоты кратны, я должен был это учитывать (один там лишний). Терять один тик 100МГц я ещё могу себе позволить...

Позволить  вы себе  можете многое  но вот результат такого позволения сомнителен. Даже если клоки  синхронные  при таком использовании времянки  ужесточаются в 2 раза. А с учетом работы по обоим фронтам и во все 4.  Что  только добавляет проблем при P&R. Ведь нет смысла  ставить  2 pipeline регистра на 200-x MHz когда  можно обойтись одним на 100.  

При такой "каше" первым  делом надо  пересматривать  структуру  дизайна, а не латать "тришкин кафтан" заплатками. 

 

Удачи! Rob.  

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


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

18 minutes ago, RobFPGA said:

При такой "каше" первым  делом надо  пересматривать  структуру  дизайна, а не латать "тришкин кафтан" заплатками.

+++

Пока дизайн не очень большой и сложный, я бы перетряхнул всё с чистого листа. Изначально задавшись ограничениями:

- на передельную частоту: скажем, 200 МГц, хотя и это для циклона5 не сильно комфортно

- на концепцию использования тактовой частоты: только положительный фронт, одна тактовая в проекте, в случае необходимости понижения - использовать clock enable

Ну и как следует отсимулять всё это.

7 hours ago, Мур said:

Имею право разделять RAM на две независимые(200 и 100) парадигмы, где одна обслуживает скоростную шину, другая в сервисе SPI

Тогда соблюдайте парадигму: для 200 все сигналы формируйте на 200, для 100 - все сигналы на 100.

7 hours ago, Мур said:

Отрицательный фронт(раньше в IP его можно было выбирать) взят опытным путем, поскольку с прямым он тормозит в TQ в два раза!

Нужно понимать, как он соотносится с остальными сигналами в дизайне. Да и слепо верить TQ не стоит. Он показывает только то, о чем вы просите. Где-то у @des00 были годные статьи на эту тему.

7 hours ago, Мур said:

Комбинаторика перед регистром - это нормально, тем более она есть быстрый мультиплексор(и регистр на выходе!)

Зацепился взглядом за то, что вы входной сигнал (с пина) протащили через логику и только потом щелкнули в регистр. С учетом того, что у вас 100+ МГц в дизайне, я бы не стал так делать.

7 hours ago, Мур said:

С wt_s  не смотрел, поскольку в TQ его нет. Но за это спасибо! Буду внимательнее...  (Порт В  там как раз 200МГц!)  Так что все тут верно..

Он есть, просто был очень глубоко в списке слаков. По умолчанию TQ показывает только первые 200 худших путей.

 

ЗЫ. Либо, если "и так сойдёт" и не нужно будет всё это развивать и поддерживать, просто забить на все предупреждения TQ. Мб и не имеет смысл тратить время на перетряхивание проекта о котором больше вы никогда не вспомните...

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


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

1 hour ago, RobFPGA said:

Приветствую!

Позволить  вы себе  можете многое  но вот результат такого позволения сомнителен. Даже если клоки  синхронные  при таком использовании времянки  ужесточаются в 2 раза. А с учетом работы по обоим фронтам и во все 4.  Что  только добавляет проблем при P&R. Ведь нет смысла  ставить  2 pipeline регистра на 200-x MHz когда  можно обойтись одним на 100.  

При такой "каше" первым  делом надо  пересматривать  структуру  дизайна, а не латать "тришкин кафтан" заплатками. 

Удачи! Rob.  

Согласен.  "На коленке" быстро не бывает!  Придется вникать..  Пока меня перекинули на другую тему, а эту буду дома факультативно менять и препарировать...

1 hour ago, nice_vladi said:

+++

Все сделаю на 200!!!  Чтобы не блукать потом...   Да и размер памяти стоит в предполагаемом тесте уменьшить...  Да и стоит сделать нормальный бенч, чтобы легче было ориентироваться в поведении.

Спасибо  всем! 

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


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

21 minutes ago, Мур said:

Все сделаю на 200!!!  Чтобы не блукать потом...   Да и размер памяти стоит в предполагаемом тесте уменьшить...

Помнится, пробовал я когда-то на Cyclone V  загружать во внутреннюю память с шины PCIe, используя альтеровский IP. На 125 МГц и 4 кслов (32-разрядных) собиралось без слаков, при 64кслов - уже TQ допускал работу что-то на 110-115 мегагерцах (в реале работало). Кристалл был загружен на 10-20% емнип. Затык был именно на пути к дальним блокам памяти.

На Arria V компилировалось без проблем, speedgrade у  Cyclone был 7, у Arria - 2 или 3. 

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


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

14 hours ago, Мур said:

Все сделаю на 200!!!

200 MHz на CYCLONE V EX  С8 ???

 

Да вы оптимист!.. :)

 

Вот результат синтеза FFT на 64k точек для 5CEFA9F23C7:

+-----------------------------------------------------------------------------------+
; Fitter Summary                                                                    ;
+---------------------------------+-------------------------------------------------+
; Fitter Status                   ; Successful - Tue Jul 27 19:53:33 2021           ;
; Top-level Entity Name           ; fft                                             ;
; Family                          ; Cyclone V                                       ;
; Device                          ; 5CEFA9F23C7                                     ;
; Timing Models                   ; Final                                           ;
; Logic utilization (in ALMs)     ; 1,801 / 113,560 ( 2 % )                         ;
; Total registers                 ; 4314                                            ;
; Total block memory bits         ; 2,713,752 / 12,492,800 ( 22 % )                 ;
; Total RAM Blocks                ; 337 / 1,220 ( 28 % )                            ;
; Total DSP Blocks                ; 6 / 342 ( 2 % )                                 ;
; Total PLLs                      ; 1 / 8 ( 13 % )                                  ;
+---------------------------------+-------------------------------------------------+

+----------------------------------------------------------------------------------------------------------------+
; Slow 1100mV 0C Model Fmax Summary                                                                              ;
+------------+-----------------+--------------------------------------------------------------------------+------+
; Fmax       ; Restricted Fmax ; Clock Name                                                               ; Note ;
+------------+-----------------+--------------------------------------------------------------------------+------+
; 202.18 MHz ; 202.18 MHz      ; pll_inst|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk ;      ;
+------------+-----------------+--------------------------------------------------------------------------+------+

 

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


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

Quote

Да вы оптимист!.. :)

....С8 поставлен как компромисс для аппаратных проверок п\п. В рабочий будет поставлен I7

Есть такое...

FFT  на такое количество точек это монстр! Я не стану идти на поводу гигантомании.

...К тому же тут не понятно, как слив данных с внутреннего буфера FFT будет организован?

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


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

Все руки не доходят показать результат тупого сокращения размера памяти в 4 раза (может кому интересно?), который сразу дал желаемы результат. Извините что сразу не показал...

MaxRAM_48kEMIF200_SPI00b_110_238conv.qar

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


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

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

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

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

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

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

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

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

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

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