реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Выяснить парт-номер ПЛИС
Lutovid
сообщение Mar 20 2018, 11:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Здравствуйте!
Появилась такая задача:
Есть прошивка, которая может быть сгенерирована либо для кристалла малого объема, либо для большого(серия одна).
Есть один elf файл sdk, который может быть запущен на двух разных кристаллах. Нужно софтом определить какой это кристал.
Есть идея дописать tcl скрипт, который в процессе генерации битпотока будет в регистр ядра part_checker прописывать парт номер, а микроблейзом по этому регистру читать(цель в автоматизации процесса - если руками каждый раз прописывать в этот регистрб то можно и забыть). Но наиболее удобным было бы вычитать его непосредственно какими-то стандартными методами - считывается же как-то этот парт номер при подключении программатора. Пробовал использовать DNA, но как я понял этот идентификационный номер не содержит информации о партномере.

Конечная цель, которой хотелось бы добиться:
Выбираешь в настройках проекта кристалл -> запускаешь генерацию битпотока -> экспортируешь в SDK -> Заливаешь в плис -> спрашиваешь что за кристалл, софт отвечает
Меняешь в настройках кристалл на другой, проделываешь те же действия, получаешь ответ от плисины, что кристалл другой.

Ко всему прочему хотелось бы, что бы сохранилась функциональность кнопок в ГУЕ(запуск синтеза и имплементации). У меня есть вариант как все сделать скриптами, но в этом случае пропадет возможность использовать полноценно ГУЙ.
Я написал вот такой скрипт:
(Есть system_Part_number_0.v который представляет собой просто блок сидящий на акси и содержащий всего 1 регистр с партномером)
Код
set proj_name [current_project]
set proj_dir [get_property directory $proj_name]
set verilog_filename "$proj_dir/$proj_name.srcs/sources_1/bd/system/ip/system_Part_number_0/synth/system_Part_number_0.v"
set verilog_filename_orig "$verilog_filename.orig"

set part_var [get_property PART [current_project ]]
set part_325 xc7k325tffg676-2

puts "Path:"
puts $verilog_filename

if {[file exists $verilog_filename]} {

    file rename -force $verilog_filename $verilog_filename_orig

    set fp_w [open $verilog_filename w]
    set fp_r [open $verilog_filename_orig r]
    set file_data [read $fp_r]
    set file_lines [split $file_data "\n"]

    foreach line $file_lines {
        if {[string match .CONST_VAL('H00000000) $line]} {
            if {$part_var == $part_325} {
                set line [string map {'H00000000 'D325} $line]
                puts "INFO: part 325!"
            } else {
                set line [string map {'H00000000 'D410} $line]
                puts "INFO: part 410!"
            }
        }
        if {[string match .CONST_VAL('D325) $line] || [string match .CONST_VAL('D410) $line]} {
            if {$part_var == $part_325 && [string match .CONST_VAL('D410) $line]} {
                set line [string map {'D410 'D325} $line]
                puts "INFO: part 325!"
            } elseif {$part_var != $part_325 && [string match .CONST_VAL('D325) $line]} {
                set line [string map {'H00000000 'D410} $line]
                puts "INFO: part 410!"
            }
        }

        puts $fp_w $line
    }

    close $fp_r
    close $fp_w
} else {
    puts "File part_checker not found!"
}

Добавил вызов его хуком:
set_property STEPS.SYNTH_DESIGN.TCL.PRE check_part.tcl [get_runs synth_1]
И получил ошибку заключающуюся в том, что при вызове скрипта таким образом не отрабатывает set proj_dir [get_property directory $proj_name]
Таким образом не отрабатывается выполнение скрипта через гуй(через коммандную строку все ок)
Подскажите пожалуйста, как решаются такие проблемы? Меня не оставляет чувство, что я перемудрил и все можно сделать намного проще
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 20 2018, 12:43
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 176
Регистрация: 23-12-04
Пользователь №: 1 643



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

Цитата(Lutovid @ Mar 20 2018, 14:42) *
...
Добавил вызов его хуком:
set_property STEPS.SYNTH_DESIGN.TCL.PRE check_part.tcl [get_runs synth_1]
И получил ошибку заключающуюся в том, что при вызове скрипта таким образом не отрабатывает set proj_dir [get_property directory $proj_name]
Таким образом не отрабатывается выполнение скрипта через гуй(через коммандную строку все ок)
Подскажите пожалуйста, как решаются такие проблемы? Меня не оставляет чувство, что я перемудрил и все можно сделать намного проще

Таксс - судя по всему имеем дело с Vivado - так как это очень пакостный косяк с $proj_name -
если запускаете компиляцию из GUI то root для proj_name получается внутри proj_name.run/synth_?/ а не там где proj_name.xpr лежит. sad.gif
Можете попробовать привязать путь к исходнику через путь к скрипту
Код
set PRJ_ROOT  [file normalize "[file dirname [info script]]../.."]

Ну и можно не генерировать исходник а просто менять generic parameters в топе при синтезе
на значения полученные из скрипта или из свойств проекта.
Код
set_property -name "steps.synth_design.args.more options" -value "-generic COMPILE_DATE=$CompileDate ... -objects [get_runs synth_1]
// а в top соответственно
module tom #(parameter  COMPILE_DATE= 0, ...


Успехов! Rob.
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Mar 20 2018, 12:49
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Цитата(RobFPGA @ Mar 20 2018, 15:43) *
Ну и можно не генерировать исходник а просто менять generic parameters в топе при синтезе
на значения полученные из скрипта или из свойств проекта.
Код
set_property -name "steps.synth_design.args.more options" -value "-generic COMPILE_DATE=$CompileDate ... -objects [get_runs synth_1]
// а в top соответственно
module tom #(parameter  COMPILE_DATE= 0, ...


В случае если менять параемтры: у меня топлевел это блок дизайн
К модулю акси подключается ip блок constant значение в котором я и меняю.
Если я сделаю модуль rtl без constant блока, то это потребует еще update и upgrade модуля после изменений, а моим способом я подменяю исходник, который непосредственно уже вставлен в блок дизайн и эти этапы опускаются

Спасибо за совет с путем! буду пробовать!
P.S. ааа или вашим способом эти апгрейды уже не потребуются?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 20 2018, 12:58
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 176
Регистрация: 23-12-04
Пользователь №: 1 643



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

Цитата(Lutovid @ Mar 20 2018, 15:49) *
В случае если менять параемтры: у меня топлевел это блок дизайн
...

Тут уж как кому нравится. Я просто никогда не делаю BD как top - у меня всегда top это мой rtl даже как просто враппер для BD. Ну а раз он мой то и что хочу то и ворочу. sm.gif В этом случае из BD торчит несколько входов на модуль констант проекта на которые и вешаются глобальные параметры.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Mar 20 2018, 13:09
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Ваш совет с привязкой к директории скрипта очень помог, спасибо!
Go to the top of the page
 
+Quote Post
aabmail
сообщение Mar 20 2018, 13:29
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



А вот хотелось бы все-таки узнать, если ли возможность изнутри прошивки узнать part-номер ПЛИС, на котором данная прошивка крутится.
Кто-нибудь знает?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Mar 20 2018, 13:32
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 2-12-05
Пользователь №: 11 695



Мож не в тему - однако по пробовал в TCL консоли в открытом проекте в вивадо 2017.4.1

set proj_name [current_project]
get_property directory $proj_name

Оно выдало путь до места где расположен XXX.XPR
Что я делаю не так ?

Теперь понял - Спасибо.

Цитата(aabmail @ Mar 20 2018, 16:29) *
А вот хотелось бы все-таки узнать, если ли возможность изнутри прошивки узнать part-номер ПЛИС, на котором данная прошивка крутится.
Кто-нибудь знает?

глубоко не копал - может стоит посмотреть в сторону ICAP ? (или как там его? для частичной реконфигурации ПЛИС). к примеру ug470

Сообщение отредактировал Alex77 - Mar 20 2018, 13:52
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 20 2018, 13:35
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 176
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Alex77 @ Mar 20 2018, 16:30) *
...
Оно выдало путь до места где расположен XXX.XPR
Что я делаю не так ?
Не внимательно читаете sm.gif

Цитата(RobFPGA @ Mar 20 2018, 15:43) *
...
если запускаете компиляцию из GUI то root для proj_name получается внутри proj_name.run/synth_?/ а не там где proj_name.xpr лежит. sad.gif
...

При работе в консоле из GUI и при компиляции разные пути для проекта.
К тому же при запуске синтеза или P&R как таковой xpr не используется.
Там все разворачивается в скрипты и запускается через кашу из tcl и js.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Mar 20 2018, 13:36
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Цитата(Alex77 @ Mar 20 2018, 16:32) *
Мож не в тему - однако по пробовал в TCL консоли в открытом проекте в вивадо 2017.4.1

set proj_name [current_project]
get_property directory $proj_name

Оно выдало путь до места где расположен XXX.XPR
Что я делаю не так ?


Я там написал выше - если с консоли, то все работает, если запускать хуком через гуй на событие запуска синтеза< то тогда проблемы
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Mar 21 2018, 04:04
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Lutovid @ Mar 20 2018, 18:42) *
Здравствуйте!
Появилась такая задача:
Есть прошивка, которая может быть сгенерирована либо для кристалла малого объема, либо для большого(серия одна).
Есть один elf файл sdk, который может быть запущен на двух разных кристаллах. Нужно софтом определить какой это кристал.
Есть идея дописать tcl скрипт, который в процессе генерации битпотока будет в регистр ядра part_checker прописывать парт номер, а микроблейзом по этому регистру читать(цель в автоматизации процесса - если руками каждый раз прописывать в этот регистрб то можно и забыть). Но наиболее удобным было бы вычитать его непосредственно какими-то стандартными методами - считывается же как-то этот парт номер при подключении программатора. Пробовал использовать DNA, но как я понял этот идентификационный номер не содержит информации о партномере.

Конечная цель, которой хотелось бы добиться:
Выбираешь в настройках проекта кристалл -> запускаешь генерацию битпотока -> экспортируешь в SDK -> Заливаешь в плис -> спрашиваешь что за кристалл, софт отвечает
Меняешь в настройках кристалл на другой, проделываешь те же действия, получаешь ответ от плисины, что кристалл другой.

Я бы копал в двух направлениях : 1 узнать DeviceID (если это можно сделать через JTAG, то и изнутри наверняка это доступно, через макрос ICAP или ещё как-то, надо разбираться).
2. В случае Микроблейза можно пользовать PVR регистр, заполнив его значение из дженерика XPS проекта. Деталей не знаю - всего лишь идея.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th August 2018 - 02:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01054 секунд с 7
ELECTRONIX ©2004-2016