Kluwer 0 March 3, 2020 Posted March 3, 2020 · Report post Привествую, коллеги, имеется проект с двумя ревизиями под платформы с разными камнями, но с одинаковыми сырцами. В главном сырце на СистемВерилоге, нужно определить под какой камень сейчас собирается проект (необходимо повыкидывать несколько выводов). Раньше проходила простая передача параметра из .qsf-файла, типа, #(parameter pCURRENT_DEVICE = pDEVICE) с добавлением в .qsf-файл строки типа set_parameter -name pDEVICE DEVICE. Но в PRO'шных версиях Квартуса почему-то не проходит (pDevice is not declared). Подскажите, плиз. Quote Share this post Link to post Share on other sites More sharing options...
Doka 0 March 3, 2020 Posted March 3, 2020 · Report post попробовать заменить parameter на define? в Квартусе не работал, но гипотетически если set_define тоже не сработает, то можно влоб из мейка/шелл-скрипта: echo "`define DEVICE Aria10GX1050\n" > device.vh Quote Share this post Link to post Share on other sites More sharing options...
Kluwer 0 March 3, 2020 Posted March 3, 2020 · Report post 3 hours ago, Doka said: если set_define тоже не сработает, то можно влоб из мейка/шелл-скрипта: echo "`define DEVICE Aria10GX1050\n" > device.vh Да, идея не плоха, но в Квартусе даже проще можно, в .qsf-файле дефайн прописывается, например, так set_global_assignment -name VERILOG_MACRO "pDEVICE=150" Далее, в теории, если верить докам на Квартус, для любого верилог-модуля в проекте - это то же самое, что `define pDEVICE 150 Но и это в прошной версии не работает :( Quote Share this post Link to post Share on other sites More sharing options...
Doka 0 March 3, 2020 Posted March 3, 2020 · Report post 4 hours ago, Kluwer said: Но и это в прошной версии не работает :( ...то можно влоб из мейка/шелл-скрипта см.выше .qsf-файл то поди не ручками из гуи запускается, а скриптом - вот туда и добавить Quote Share this post Link to post Share on other sites More sharing options...
negiin 0 March 4, 2020 Posted March 4, 2020 · Report post Можно сделать две ревизии и в каждой прописать параметр в Verilog HDL macro(аналогичен `define) в настройках проекта либо задать default parameters(аналогичен parameter в verilog или generic в vhdl). Каждую ревизию можно компилировать в командной строке с ключем -c rev_name0, -c rev_name1. Quote Share this post Link to post Share on other sites More sharing options...
Kluwer 0 March 4, 2020 Posted March 4, 2020 · Report post 13 hours ago, Doka said: ...то можно влоб из мейка/шелл-скрипта см.выше .qsf-файл то поди не ручками из гуи запускается, а скриптом - вот туда и добавить Ну, в конечном итоге я так и сделал. Единственно, я любитель гуёв, но у Квартуса можно добавлять tcl-скрипты, запускаемые до запуска компиляции в .qsf set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:device_id.tcl" А в самом скрипте device_id.tcl, ну как-то так, например set output_file "./device.vh" set line "`define pDEVICE Cyc150" if { [catch {open $output_file w} output] } { post_message -type error "device_id.tcl: Couldn't open $output_file." exit 1 } else { puts $output $line close $output post_message -type info "device_id.tcl: $output_file has been updated." exit 0 } Есс-но для разных ревизий нужно либо подготовить две разных версии скрипта device_id, соотвественно, либо добавить входной аргумент и вызывать как device_id(DEVICE). Этот вариант работает, нет проблем, но как-то это не изящно ... Quote Share this post Link to post Share on other sites More sharing options...
Kluwer 0 March 4, 2020 Posted March 4, 2020 · Report post 5 hours ago, negiin said: Можно сделать две ревизии и в каждой прописать параметр в Verilog HDL macro(аналогичен `define) в настройках проекта либо задать default parameters(аналогичен parameter в verilog или generic в vhdl). Каждую ревизию можно компилировать в командной строке с ключем -c rev_name0, -c rev_name1. Так я оба варианта выше и описал, но в PRO'шной версии Квартуса в верилог-модуле даже самого верхнего уровня он не видит почему-то ни параметра (даже global-параметра), не предопределённого глобального макроса в .gsf-файле, в том-то и засада была. Quote Share this post Link to post Share on other sites More sharing options...
Doka 0 March 4, 2020 Posted March 4, 2020 · Report post 1 hour ago, Kluwer said: А в самом скрипте device_id.tcl, ну как-то так: настоятельно рекомендую после команд/директив HDL добавлять перевод строки - это страхует от того, что файл по непотяной причине перестанет "работать" при смене версии/типа тула 1 hour ago, Kluwer said: Этот вариант работает, нет проблем, но как-то это не изящно ... ну так работа в гуи по определению не особо изящна, ИМХО Quote Share this post Link to post Share on other sites More sharing options...
negiin 0 March 4, 2020 Posted March 4, 2020 · Report post 9 hours ago, Kluwer said: Так я оба варианта выше и описал, но в PRO'шной версии Квартуса в верилог-модуле даже самого верхнего уровня он не видит почему-то ни параметра (даже global-параметра), не предопределённого глобального макроса в .gsf-файле, в том-то и засада была. У меня в версии 18.0.1 Pro Edition работает. В qsf set_parameter -name n 960 в топовом модуле parameter n = 1024; Может быть нужно задать pDevice и тогда его можно переопределить в qsf файле. Quote Share this post Link to post Share on other sites More sharing options...
Kluwer 0 March 5, 2020 Posted March 5, 2020 · Report post 19 hours ago, negiin said: У меня в версии 18.0.1 Pro Edition работает. В qsf set_parameter -name n 960 в топовом модуле parameter n = 1024; Может быть нужно задать pDevice и тогда его можно переопределить в qsf файле. Да, Стратикс меня побери, это работает! :) Спасибо, коллега! Просто последний раз пользовал параметры из .qsf-файла в графической обёртке и там использовал блок "Parameters" и почему-то наглухо засело, что то, что установленно set_parameter - это некая внешняя постоянная, а вот то, что она, на самом деле, переопредяляет аналогичный параметр в заголовочном модуле я как-то из виду и упустил. Да, в моём случае, да, надо было так и оно так работает <название_модуля> #(parameter pDEVICE = "Cyc105") Век живи ... :) Quote Share this post Link to post Share on other sites More sharing options...