Jump to content

    
Sign in to follow this  
Kluwer

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

Recommended Posts

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this