RobFPGA 11 October 24, 2019 Posted October 24, 2019 · Report post Приветствую! Как можно получить число использованной памяти в так сказать в натуральном виде - штуках, а не в битах всего ? И желательно сразу поле синтеза/partition_merge процесса, не дожидаясь окончания fit. Вот выдает мне это Qu статистику после partition_merge ..../auto_generated|ALTSYNCRAM tyime_RAM:AUTO Simple Dual Port depth_A:32 width_A:32 depth_B:32 width_B:32 Bits:1024 ... и как мне догадаться столько блоков памяти этот кю использовал? Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
des00 14 October 25, 2019 Posted October 25, 2019 · Report post если найдете, сообщите пожалуйста, меня тоже бесит факт сей) Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 11 October 25, 2019 Posted October 25, 2019 · Report post Приветствую! Как говорится утопление утопающих их же и заслуга # brams.tcl # Get collection of block RAM proc get_brams {{mask "*ram_block*"}} { if {$mask != "*ram_block*"} { set brams [get_cells -compatibility_mode $mask] } else { set brams [get_cells -hierarchical $mask] } return $brams } # Count number of block ram proc count_brams {{mask "*ram_block*"}} { set brams [get_brams $mask] puts "Total block_ram cells:[get_collection_size $brams]" } # Report to file proc report_brams {{mask "*ram_block*"}} { set brams [get_brams $mask] set fo [open [file normalize "./brams.txt"] w] puts $fo "Total block_ram cells:[get_collection_size $brams]" foreach_in_collection cell $brams { set wtype [get_cell_info -wysiwyg_type $cell] set name [get_cell_info -name $cell] # set pins [get_cell_info -pins $cell] set pin_names [lsort -dictionary [get_cell_info -pin_names $cell]] set addrA_wh [llength [lsearch -all $pin_names {portaaddr*}]] set dataA_in [llength [lsearch -all $pin_names {portadatain*}]] set dataA_ou [llength [lsearch -all $pin_names {portadataout*}]] set weA [llength [lsearch -all $pin_names {portawe*}]] set addrB_wh [llength [lsearch -all $pin_names {portbaddr*}]] set dataB_in [llength [lsearch -all $pin_names {portbdatain*}]] set dataB_ou [llength [lsearch -all $pin_names {portbdataout*}]] set weB [llength [lsearch -all $pin_names {portbwe*}]] puts $fo [format "$wtype, portA: addr:%02d, din%03d, dou:%03d, we:%1d - portB: addr:%02d, din%03d, dou:%03d, we:%1d - $name" \ $addrA_wh $dataA_in $dataA_ou $weA $addrB_wh $dataB_in $dataB_ou $weB] } close $fo } Пока по-быстрому придумал такое - после partition_merge открыть TimeAnalyzer в режиме post_map нетлиста. А затем лазать по нетлисту выколупывая требуемую инфу. count_brams - выдает общее количество block_ram. count_brams module_name|*|ram_block* - только для конкретного модуля report_brams ... создает файл с основными параметрами всех найденных ram_block Приветствуются комментарии и дополнения. Превратим совместными усилиями Qu в Vviado! Успехов! Rob. Quote Share this post Link to post Share on other sites More sharing options...
des00 14 October 25, 2019 Posted October 25, 2019 · Report post 18 minutes ago, RobFPGA said: Пока по-быстрому придумал такое - после partition_merge открыть TimeAnalyzer в режиме post_map нетлиста. А затем лазать по нетлисту выколупывая требуемую инфу. говорила мне мама, учи TCL сынок (с)... Кстати, вспомнил, на этапе фиттера, некоторые блоки памяти могут быть слиты в один. Поэтому это не совсем достоверная информация Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 11 October 25, 2019 Posted October 25, 2019 · Report post Приветствую! Just now, des00 said: Кстати, вспомнил, на этапе фиттера, некоторые блоки памяти могут быть слиты в один. Поэтому это не совсем достоверная информация Может так и быть - так как от беглого анализ report файла волосы дыбом стоят - например память 256 слов х 128 бит набрана из 128 ram_block 256 x 1! Теперь надо ждать 4 часа что бы посмотреть как эта же память будет выглядеть после fit. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
novartis 0 October 25, 2019 Posted October 25, 2019 · Report post 13 minutes ago, RobFPGA said: Приветствую! Может так и быть - так как от беглого анализ report файла волосы дыбом стоят - например память 256 слов х 128 бит набрана из 128 ram_block 256 x 1! Теперь надо ждать 4 часа что бы посмотреть как эта же память будет выглядеть после fit. Удачи! Rob. А с каким семейством вы работаете? Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 11 October 25, 2019 Posted October 25, 2019 · Report post Приветствую! 37 minutes ago, novartis said: А с каким семейством вы работаете? Пока с Stratix V Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
novartis 0 October 25, 2019 Posted October 25, 2019 · Report post 2 minutes ago, RobFPGA said: Приветствую! Пока с Stratix V Удачи! Rob. Я к чему спросил. Например, в стратикс 4 три типа Memory Blocks: MLABs, M9K, M144K. До фиттрера квартус может прикинет и задействует только M9K, но в процессе фиттера вполне может переложить часть памяти на блоки M144K, если это будет ему удобнее и если жестко не прописали какие блоки юзать. Quote Share this post Link to post Share on other sites More sharing options...
dvlwork 0 October 25, 2019 Posted October 25, 2019 · Report post 1 час назад, des00 сказал: некоторые блоки памяти могут быть слиты в один Обычно это касается двух однопортовых блоков, размером не более половины блока памяти. 1 час назад, RobFPGA сказал: волосы дыбом стоят - например память 256 слов х 128 бит набрана из 128 ram_block 256 x 1! Это следствие того, что биты памяти взаимозаменяемы. Qu тасует их внутри блока памяти для удобства трассировки. Эти маленькие блочки объединяются в группы по имени (один из параметров блока). Если сможете получить параметры блока, то несложно будет посчитать их группировку. Как оценочная характеристика вполне приемлемо Quote Share this post Link to post Share on other sites More sharing options...
wolfman 0 October 25, 2019 Posted October 25, 2019 · Report post Как современных версия Ква не знаю, а вот в 12, 13 версия в логах точно был вывод о кол-ва занятых блоков. Помню пришлось воевать с Ква по этому поводу, т.к. по битам был запас, а по блокам нет. Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 11 October 25, 2019 Posted October 25, 2019 · Report post Приветствую! Обновленный вариант. Spoiler package require cmdline array unset ar_wtype # Crete array: wysiwyg_type -> list of cell_id proc mkt_cell_bd {} { global ar_wtype array unset ar_wtype set cells [get_cells -compatibility_mode "*"] foreach_in_collection cell $cells { set wtype [get_cell_info -wysiwyg_type $cell] lappend ar_wtype($wtype) $cell } foreach name [lsort -dictionary [array names ar_wtype]] { puts [format ">> count:%6d, :%-40s " [llength $ar_wtype($name)] $name] } } # Get list of block RAM proc get_brams {{mask "*"}} { global ar_wtype mkt_cell_bd set brams $ar_wtype(stratixv_ram_block) set l_names {} foreach cell $brams { set name [get_cell_info -name $cell] if {[string match $mask $name]} { lappend l_names $cell $name } } set l_names [lsort -dictionary -stride 2 -index 1 $l_names] set l_brams {} foreach {cell name} $l_names { lappend l_brams $cell } puts "Total block_ram cells:[llength $brams]" puts "Matched block_ram cells:[llength $l_brams]" return $l_brams } # Count number of block ram proc count_brams {{mask "*"}} { set brams [get_brams $mask] puts "Total block_ram cells:[llength $brams]" } # Report to file proc report_brams args { set proc_opt { {mask.arg "*" "mathing mask"} {fname.arg "./brams.txt" "report filename"} } array set opt [cmdline::getoptions args $proc_opt] set brams [get_brams $opt(mask)] set fo stdout if {$opt(fname)!=""} { set fo [open [file normalize $opt(fname)] w] } puts $fo "Total block_ram cells:[llength $brams]" foreach cell $brams { set wtype [get_cell_info -wysiwyg_type $cell] set name [get_cell_info -name $cell] set pin_names [lsort -dictionary [get_cell_info -pin_names $cell]] set addrA_wh [llength [lsearch -all $pin_names {portaaddr*}]] set dataA_in [llength [lsearch -all $pin_names {portadatain*}]] set dataA_ou [llength [lsearch -all $pin_names {portadataout*}]] set weA [llength [lsearch -all $pin_names {portawe*}]] set addrB_wh [llength [lsearch -all $pin_names {portbaddr*}]] set dataB_in [llength [lsearch -all $pin_names {portbdatain*}]] set dataB_ou [llength [lsearch -all $pin_names {portbdataout*}]] set weB [llength [lsearch -all $pin_names {portbwe*}]] puts $fo [format "$wtype, portA: addr:%02d, din%03d, dou:%03d, we:%1d - portB: addr:%02d, din%03d, dou:%03d, we:%1d - $name" \ $addrA_wh $dataA_in $dataA_ou $weA $addrB_wh $dataB_in $dataB_ou $weB] } close $fo } И как оказалось почти бесполезного скрипта - действительно пока fit не закончен число реальных BRAM не получишь. А что делать если как раз из-за этого fit и не заканчивается? "Error (170048): Selected device has 2640 RAM location(s) of type M20K block. However, the current design needs more than 2640 to successfully fit" И блин молчок на сколько это more. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 13 October 25, 2019 Posted October 25, 2019 · Report post 3 часа назад, RobFPGA сказал: И блин молчок на сколько это more. А если синтезировать то же самое в Synplify Pro или Precision, и на их отчеты по ресурсам посмотреть? Quote Share this post Link to post Share on other sites More sharing options...
des00 14 October 26, 2019 Posted October 26, 2019 · Report post 19 hours ago, dvlwork said: Обычно это касается двух однопортовых блоков, размером не более половины блока памяти. не точлько. М20К, в обсуждаемом чипе, разбивается на два М10К Quote Share this post Link to post Share on other sites More sharing options...
dvlwork 0 November 13, 2019 Posted November 13, 2019 · Report post В 26.10.2019 в 13:08, des00 сказал: М20К, в обсуждаемом чипе, разбивается на два М10К Вот в упор не вижу. В stratix5_handbook.pdf в разделе Embedded Memory Blocks - не нашел такого. Мы же о Stratix V ? Quote Share this post Link to post Share on other sites More sharing options...
des00 14 November 14, 2019 Posted November 14, 2019 · Report post 19 hours ago, dvlwork said: Вот в упор не вижу. В stratix5_handbook.pdf в разделе Embedded Memory Blocks - не нашел такого. Мы же о Stratix V ? чорт возьми, вы абсолютно правы. им не хватило тяму реализовать хилый режим разбиения большого блока на два независимых и полноценных, меньшего размера. Не ожидал, что там на аппартном уровне полный ноль. Моя неправда) Quote Share this post Link to post Share on other sites More sharing options...