Jump to content

    

Как понять под какую микросхему собирается проект?

Привествую, коллеги,

имеется проект с двумя ревизиями под платформы с разными камнями, но с одинаковыми сырцами. В главном сырце на СистемВерилоге, нужно определить под какой камень сейчас собирается проект (необходимо повыкидывать несколько выводов). Раньше проходила простая передача параметра из .qsf-файла, типа,

#(parameter pCURRENT_DEVICE = pDEVICE)

с добавлением в .qsf-файл строки типа

set_parameter -name pDEVICE DEVICE.

Но в PRO'шных версиях Квартуса почему-то не проходит (pDevice is not declared). Подскажите, плиз.

Share this post


Link to post
Share on other sites

попробовать заменить parameter на define?

 

 

в Квартусе не работал, но гипотетически если set_define тоже не сработает, то можно влоб из мейка/шелл-скрипта:

echo "`define DEVICE Aria10GX1050\n" > device.vh

 

Share this post


Link to post
Share on other sites
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

Но и это в прошной версии не работает :(

Share this post


Link to post
Share on other sites
4 hours ago, Kluwer said:

Но и это в прошной версии не работает :( 

...то можно влоб из мейка/шелл-скрипта

см.выше

 

.qsf-файл то поди не ручками из гуи запускается, а скриптом - вот туда и добавить

Share this post


Link to post
Share on other sites

Можно сделать две ревизии и  в каждой прописать параметр в Verilog HDL macro(аналогичен `define) в настройках проекта либо задать default parameters(аналогичен parameter в verilog или generic в vhdl).

Каждую ревизию можно компилировать в командной строке с ключем -c rev_name0, -c rev_name1.

Share this post


Link to post
Share on other sites
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).

Этот вариант работает, нет проблем, но как-то это не изящно ...

Share this post


Link to post
Share on other sites
5 hours ago, negiin said:

Можно сделать две ревизии и  в каждой прописать параметр в Verilog HDL macro(аналогичен `define) в настройках проекта либо задать default parameters(аналогичен parameter в verilog или generic в vhdl).

Каждую ревизию можно компилировать в командной строке с ключем -c rev_name0, -c rev_name1.

Так я оба варианта выше и описал, но в PRO'шной версии Квартуса в верилог-модуле даже самого верхнего уровня он не видит почему-то ни параметра (даже global-параметра), не предопределённого глобального макроса в .gsf-файле, в том-то и засада была.

Share this post


Link to post
Share on other sites
1 hour ago, Kluwer said:

А в самом скрипте device_id.tcl, ну как-то так:

настоятельно рекомендую после команд/директив HDL добавлять перевод строки - это страхует от того, что файл по непотяной причине перестанет "работать" при смене версии/типа тула

 

1 hour ago, Kluwer said:

Этот вариант работает, нет проблем, но как-то это не изящно ...

ну так работа в гуи по определению не особо изящна, ИМХО

Share this post


Link to post
Share on other sites
9 hours ago, Kluwer said:

Так я оба варианта выше и описал, но в PRO'шной версии Квартуса в верилог-модуле даже самого верхнего уровня он не видит почему-то ни параметра (даже global-параметра), не предопределённого глобального макроса в .gsf-файле, в том-то и засада была.

У меня в версии 18.0.1 Pro Edition работает.

В qsf 

set_parameter -name n 960

в топовом модуле 

parameter n		        = 1024;

Может быть нужно задать pDevice и тогда его можно переопределить в qsf файле.

Share this post


Link to post
Share on other sites
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")

Век живи ... :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this