Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Позитивные результаты синтеза и печалька с имплементацией
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
gotcha
Чип xilinx spartan6 XC6SLX9
Синтез в synplify h-2013.03
Имплементация ise14.4

Результат синтеза:
Код
Register bits not including I/Os:   6252 (50%)
Total  LUTs: 3773 (61%)
Region Summary:
Other LUTs: 4338 Other Registers: 6252
Mapper successful!

На этапе имплементации долго пыжится
Код
phase 9.8 global placement
...

И не могет (((
Код
Error:Place:543 - This design does not fit into the number of slices available...


Синплифай настолько не знаком со слайсами и возможным роутингом?
Maverick
Цитата(gotcha @ Oct 12 2015, 10:03) *
Чип xilinx spartan6 XC6SLX9
Синтез в synplify h-2013.03
Имплементация ise14.4

Результат синтеза:
Код
Register bits not including I/Os:   6252 (50%)
Total  LUTs: 3773 (61%)
Region Summary:
Other LUTs: 4338 Other Registers: 6252
Mapper successful!

На этапе имплементации долго пыжится
Код
phase 9.8 global placement
...

И не могет (((
Код
Error:Place:543 - This design does not fit into the number of slices available...


Синплифай настолько не знаком со слайсами и возможным роутингом?

если выбрать "пожирнее" ПЛИС?
т.е. вообще имплементация проекта в ПЛИС возможна?
RobFPGA
Приветствую!

Цитата(gotcha @ Oct 12 2015, 10:03) *
Синплифай настолько не знаком со слайсами и возможным роутингом?


А Вы CoreGen корки в проекте используете ?

Успехов! Rob.
Vascom
Ну так роутинг много ячеек может занимать в зависимости от кода.
gotcha
C чипом XC6SLX150 развелось.
Из корок только одна маленькая фифошка.
iosifk
Цитата(Vascom @ Oct 12 2015, 10:24) *
Ну так роутинг много ячеек может занимать в зависимости от кода.

Поддерживаю.
Это значит, что не хватило интерконнектов.
Посмотрите, можно ли убрать параллельные схемы. И заменить их на последовательные.
Или вместо логики применить память, SRL и т.д....
gotcha
Цитата
Ну так роутинг много ячеек может занимать в зависимости от кода


Согласен, но были статейки от синопсиса, что синтез поумнел и нонче неотвязан от имплементации.
Vascom
Синтез конечно отвязан. Но лишь имплементация позволяет узнать сколько ячеек будут заняты под интерконнект.
Timmy
У S6 только половина слайсов пригодна для сложения, и половина от пригодных для сложения - пригодна и для распределённой памяти. Поэтому, если в дизайне много сумматоров и распределённой памяти, может и не влезть, несмотря на вроде бы большой общий запас.
gotcha
Цитата(Timmy @ Oct 12 2015, 11:56) *
У S6 только половина слайсов пригодна для сложения, и половина от пригодных для сложения - пригодна и для распределённой памяти. Поэтому, если в дизайне много сумматоров и распределённой памяти, может и не влезть, несмотря на вроде бы большой общий запас.

Вы, попали в яблочко.
Жаль, что синплифай не дает никаких намеков.
gotcha
Ох уж эти новые попугаи. На 3м спартане XC3S500E разводит, но времянка проседает.
Krys
Цитата(Vascom @ Oct 12 2015, 15:55) *
сколько ячеек будут заняты под интерконнект.
Подскажите, пожалуйста, как ячейки бывают занятыми под интерконнект? Если между двумя регистрами надо прокинуть связь накоротко, а ячейка представляет собой например LUT, то PAR будет прокидывать связь через LUT, а не напрямую?
Vascom
Да, примерно так.
Конкретно можно увидеть после роутинга.
Krys
В том-то и заключается моё удивление, что я такого никогда не видел в схематике после роутинга. А Вам несложно какой-то живой пример, где например вот кусок кода описывающий прямую связь между регистрами, а вот схема, где эта прямая связь - вовсе не прямая, а через допустим LUT?
Vascom
Вот пример.
Схема после роутинга, как видим, между двумя регистрами ни какой логики нет.


Вот этот путь внутри микросхемы


Вот он же, с указанием пути разводки


Теперь приблизим самый конец пути


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

P.S. Хотя не, похоже все эти регистры имеют мультиплексор на входе. Сейчас ещё поищу.

Вот эта выходная SLICEL целиком


И приблизим выделенный мультиплексор в её центре


Наш интерконнект, выделенный малиновым, хоть и обходит этот мультиплексор, но уже не позволит использовать его где-то ещё.

Соответственно между двумя регистрами даже без логики могут быть длинные пути. При этом часть логических ресурсов FPGA становится заблокированной и недоступной для плейсмента и роутинга других элементов дизайна.
jojo
Товарищи, это же статический мультиплексор в LUT. У него нет других целей.

Что касается появления внезапных LUT-ов в путях - это вполне возможно.
Этим грешит как синтезатор, который из экономии делает, например, много LUT3 где можно сделать мало LUT6,
или "Улучшитель потребления" (Coolgate ™) который, гад, тоже много себе позволяет - из чистокровного регистра, например BRAM enable делает lut-ы.
Vascom
Да, про мультиплексор я дописал.

И ещё добавил, оно в то же сообщение попало.
RobFPGA
Приветствую!

Опять в темной комнате ищем кошку wacko.gif
Есть же логи в которых все должно быть понятно - почему не развелось, каких ресурсов не хватило.
Так нет же - будем гадать на интерконектой гуще.

ISE добавляет LUT/регистры для роутинга очень редко и в логе отдельной строкой идет
Number used as Latch-thrus: 4

В общем для решения нужны логи!

Успехов! Rob
jojo
Да, и про печальку с имплепентацией.

Если
1. укоротить пути распространения сигнала до 1-2 LUT,
2. не пережимать констрейны размещения и частот,
3. управлять входами clock enable с выхода триггера,
4. закладывать избыточные регистры в путях с выхода BRAM,
и т.п.

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

Если в проекте есть хоть какая-то дыра, она вылезет из-за высокой плотности размещения или частоты.
И перебор стратегий сборки в сложных случаях не поможет вплоть до
1. устранения причин,
2. смирения с происходящим.
Krys
Цитата(Vascom @ Oct 12 2015, 15:55) *
сколько ячеек будут заняты под интерконнект.
Я правильно понял, что всё же причина не в этом, и ячейки под интерконнект не расходуются (по крайней мере сверх того, что предложил синтез)?
Vascom
Синтез этого не предлагает. Он определяет только количество функциональных элементов.
Затем плейсмент размещает все эти элементы в заданной модели FPGA.
Затем роутинг ищет пути соединения этих элементов (возможно перемещает и сами элементы), удовлетворяющие констрейнам.

До окончания роутинга все оценки таймингов и занятых ресурсов - приблизительные.
alexadmin
Цитата(gotcha @ Oct 12 2015, 10:03) *
Чип xilinx spartan6 XC6SLX9
Синтез в synplify h-2013.03
Имплементация ise14.4


А если самим ISE синтезировать, не пробовали?
TRILLER
Цитата(Krys @ Oct 14 2015, 11:48) *
Я правильно понял, что всё же причина не в этом, и ячейки под интерконнект не расходуются (по крайней мере сверх того, что предложил синтез)?

Вы правильно поняли. Просто так ЛУТы для интерконнекта использоваться не будут.

Цитата(Vascom @ Oct 14 2015, 10:41) *
Вот эта выходная SLICEL целиком

Этот пример некорректен по многим причинам.
Во первых: B6LUT уже используется под логику(B5 и B6). В силу этого вполне логично, что маппер решил использовать лишний вход ЛУТа под интерконнект.
Во вторых: линия BX уже используется под логику, и соответственно, не может быть использована для прямого соединения триггеров.
В третьих - что самое главное: Ваш триггер BQ является элементом шины, а значит маппер в первую очередь поставил элементы вашего вектора в одну ячейку, а потом уже начал крутить логику и интерконнект вокруг них.
Krys
Цитата(Vascom @ Oct 14 2015, 15:52) *
Синтез этого не предлагает. Он определяет только количество функциональных элементов.
Затем плейсмент размещает все эти элементы в заданной модели FPGA.
Затем роутинг ищет пути соединения этих элементов (возможно перемещает и сами элементы), удовлетворяющие констрейнам.
Это всё понятно. Но мой вопрос был в том, что изначально было предположение, что PAR расходует элементы (допустим LUT) на интерконнект там, где по результатам синтеза LUTа быть не должно, а должна быть прямая связь. Вывод из предыдущих Ваших скриншотов такой, что предположение было ошибочным? Там потом ещё ув. jojo написал, что были задействованы лишь статические мультиплексоры, которые не задействованными и не могли быть. Т.е. их задействование неверно относить к аргументу в пользу предположения.


Цитата(Vascom @ Oct 14 2015, 15:52) *
До окончания роутинга все оценки таймингов и занятых ресурсов - приблизительные.
Да, это тоже всё понятно, не спорю. Особенно бывают всякие схемы оптимизации типа registers duplication и т.п.
gotcha
Цитата(alexadmin @ Oct 14 2015, 12:26) *
А если самим ISE синтезировать, не пробовали?

ISE не дружит с systemverilog, надо много чего переписывать.

... больше света в темную комнату
Код
Mapping to part: xc6slx9tqg144-2
Cell usage:
DCM_SP          1 use
FD              94 uses
FDE             2720 uses
FDR             245 uses
FDRE            3189 uses
FDSE            4 uses
GND             33 uses
MUXCY           12 uses
MUXCY_L         233 uses
MUXF7           290 uses
MUXF8           144 uses
VCC             33 uses
XORCY           209 uses
fifo_w4d16_spartan6  1 use
LUT1            109 uses
LUT2            202 uses
LUT3            934 uses
LUT4            991 uses
LUT5            527 uses
LUT6            1570 uses
LUT6_2            5 uses

I/O ports: 57
I/O primitives: 53
IBUF           12 uses
IBUFG          1 use
OBUF           40 uses

BUFG           2 uses

SRL primitives:
SRLC32E        48 uses

I/O Register bits:                  0
Register bits not including I/Os:   6252 (50%)

Global Clock Buffers: 2 of 16 (12%)

Total load per clock:
   clk8x|CLKFX_BUF_derived_clock: 6301
   clk8x|CLK0_BUF_derived_clock: 1
   clock_p51: 1

Mapping Summary:
Total  LUTs: 3773 (61%)

Distribution of All Consumed LUTs = SRL + LUT1 + LUT2 + LUT3 + LUT4 + LUT5 + LUT6 + LUT6_2- HLUTNM/2
Distribution of All Consumed Luts 3773 = 48 + 109 + 202 + 934 + 991 + 527 + 1570 + 5- 1226/2


Number of unique control sets:              130


Region Summary:
Other LUTs: 4338 Other Registers: 6252
Mapper successful!


Xilinx пишет
Код
Interim Summary
---------------
Slice Logic Utilization:
  Number of Slice Registers:                 6,282 out of  11,440   54%
    Number used as Flip Flops:               6,282
    Number used as Latches:                      0
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:                0
  Number of Slice LUTs:                      3,779 out of   5,720   66%
    Number used as logic:                    3,717 out of   5,720   64%
      Number using O6 output only:           2,880
      Number using O5 output only:              70
      Number using O5 and O6:                  767
      Number used as ROM:                        0
    Number used as Memory:                      48 out of   1,440    3%
      Number used as Dual Port RAM:              0
      Number used as Single Port RAM:            0
      Number used as Shift Register:            48
        Number using O6 output only:            48
        Number using O5 output only:             0
        Number using O5 and O6:                  0
    Number used exclusively as route-thrus:     14
      Number with same-slice register load:      0
      Number with same-slice carry load:        14
      Number with other load:                    0

Slice Logic Distribution:
  Number of MUXCYs used:                       320 out of   2,860   11%
  Number of LUT Flip Flop pairs used:        8,885
    Number with an unused Flip Flop:         2,732 out of   8,885   30%
    Number with an unused LUT:               5,106 out of   8,885   57%
    Number of fully used LUT-FF pairs:       1,047 out of   8,885   11%
    Number of unique control sets:             180
    Number of slice register sites lost
      to control set restrictions:             742 out of  11,440    6%

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

IO Utilization:
  Number of bonded IOBs:                        53 out of     102   51%

Specific Feature Utilization:
  Number of RAMB16BWERs:                         0 out of      32    0%
  Number of RAMB8BWERs:                          1 out of      64    1%
  Number of BUFIO2/BUFIO2_2CLKs:                 1 out of      32    3%
    Number used as BUFIO2s:                      1
    Number used as BUFIO2_2CLKs:                 0
  Number of BUFIO2FB/BUFIO2FB_2CLKs:             1 out of      32    3%
    Number used as BUFIO2FBs:                    1
    Number used as BUFIO2FB_2CLKs:               0
  Number of BUFG/BUFGMUXs:                       2 out of      16   12%
    Number used as BUFGs:                        2
    Number used as BUFGMUX:                      0
  Number of DCM/DCM_CLKGENs:                     1 out of       4   25%
    Number used as DCMs:                         1
    Number used as DCM_CLKGENs:                  0
  Number of ILOGIC2/ISERDES2s:                   0 out of     200    0%
  Number of IODELAY2/IODRP2/IODRP2_MCBs:         0 out of     200    0%
  Number of OLOGIC2/OSERDES2s:                   0 out of     200    0%
  Number of BSCANs:                              0 out of       4    0%
  Number of BUFHs:                               0 out of     128    0%
  Number of BUFPLLs:                             0 out of       8    0%
  Number of BUFPLL_MCBs:                         0 out of       4    0%
  Number of DSP48A1s:                            0 out of      16    0%
  Number of ICAPs:                               0 out of       1    0%
  Number of MCBs:                                0 out of       2    0%
  Number of PCILOGICSEs:                         0 out of       2    0%
  Number of PLL_ADVs:                            0 out of       2    0%
  Number of PMVs:                                0 out of       1    0%
  Number of STARTUPs:                            0 out of       1    0%
  Number of SUSPEND_SYNCs:                       0 out of       1    0%



Цитата(Vascom @ Oct 14 2015, 11:52) *
До окончания роутинга все оценки таймингов и занятых ресурсов - приблизительные.

огорчает приближение +- полчипа
Krys
Я вообще не обращаю внимание на сообщения синтезатора о тайминге в конце синтеза. Смотрю только после PAR.
А по поводу утилизации: результат может быть достигнут довольно близкий (синтез к PAR), если в PAR выключить все оптимизации типа registers duplication и т.п. Но кому это надо? Лучше просто не смотреть на сообщения синтезатора )))
gotcha
Цитата(Krys @ Oct 15 2015, 08:32) *
Я вообще не обращаю внимание на сообщения синтезатора о тайминге в конце синтеза. Смотрю только после PAR.
А по поводу утилизации: результат может быть достигнут довольно близкий (синтез к PAR), если в PAR выключить все оптимизации типа registers duplication и т.п. Но кому это надо? Лучше просто не смотреть на сообщения синтезатора )))


Код
Starting Clock                    Frequency     Frequency     Period        Period        Slack       Type                         Group          
---------------------------------------------------------------------------------------------------------------------------------------------------
clk8x|CLKFX_BUF_derived_clock     100.0 MHz     155.8 MHz     10.000        6.417         3.583       derived (from clock_p51)     default_clkgroup
clock_p51                         50.0 MHz      NA            20.000        NA            DCM/PLL     declared                     default_clkgroup
gotcha
Сегодня Xilinx решил зависнуть на другом этапе (обычно зависал на Phase 9.8 Global Placement):


Цитата(iosifk @ Oct 12 2015, 11:45) *
Поддерживаю.
Это значит, что не хватило интерконнектов.
Посмотрите, можно ли убрать параллельные схемы. И заменить их на последовательные.
Или вместо логики применить память, SRL и т.д....

В новой ветке проекта этим и занимаюсь.

Цитата(Timmy @ Oct 12 2015, 11:56) *
У S6 только половина слайсов пригодна для сложения, и половина от пригодных для сложения - пригодна и для распределённой памяти. Поэтому, если в дизайне много сумматоров и распределённой памяти, может и не влезть, несмотря на вроде бы большой общий запас.

Можете дать ссылку про это почитать?



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.