Kluwer 0 Posted November 18, 2014 · Report post Коллеги, проблема такая: на плате имеются семисегментники, очень хочется, что бы при каждой пересборке проекта на них выводилась дата-время или хотя бы некоторый постоянно увеличивающийся номер версии. В Квартусе, к сожалению, нет чего-то похожего на пункт "pre-build", как например в код композере, что бы запустить перед сборкой свою прогу. Верилоговские макросы с выдачей даты или времени, Квартус игнорирует. Пошли путём написания стартового tcl-скрипта, который бы находил в нужном файле предопределённый localparam и менял его, но чего-то не получается никак этот tcl'ник заставить искать нужную строку. Да и тогда запускать сборку проекта придётся не стандартной кнопкой "Start Compilation", а щёлкая по скрипту. Тоже весьма неудобно. Короче говоря, может кто знает как эту задачу проще решить? Поделитесь, плиз, решением! Quote Ответить с цитированием Share this post Link to post Share on other sites
andrew_b 0 Posted November 18, 2014 · Report post В Квартусе, к сожалению, нет чего-то похожего на пункт "pre-build",Есть это там, только называется оно PRE_FLOW_SCRIPT_FILE и предназначено для запуска tcl-скрипта. Вы его начали писать, и это правильно. Короче говоря, может кто знает как эту задачу проще решить? Поделитесь, плиз, решением! Я делал для vhdl. Файл с версией version.vhd выглядит так (оставлен минимум): library IEEE; use IEEE.std_logic_1164.all; package version is -- Timestamp contains two fields: -- (31 downto 8) is a current date (yymmdd). This field is regenerated -- automatically before every new compilation. -- ( 7 downto 0) is a current build in the current date. This field is increased by 1 -- automatically before every new compilation. I hope, 255 builds per day is enough :-) constant Timestamp : std_logic_vector (31 downto 0) := x"12052900"; end package version; Скрипт update_version.tcl для обновления версии: # update info in the version.vhd file # the version update procedure consists of two parts: # 1) generate timestamp # 2) increment a build number for current timestamp #set version_file "[get_project_directory]../rtl/version.vhd" set version_file "../rtl/version.vhd" # generate timestamp function proc generate_timestamp { } { return [clock format [clock seconds] -format {%y%m%d}] } proc update_build_number { timestamp build_number } { set current_timestamp [generate_timestamp] set str_compare [string compare $timestamp $current_timestamp] if { $str_compare == 0 } { return [incr build_number 1] } else { return 1 } } proc update_version { input_file output_file } { # if the input file can't be opened, return an error if { [catch {open $input_file} input] } { return -code error $input } # if the output file can't be opened, return an error if { [catch {open $output_file w} output] } { return -code error $output } # read through the input file a line at a time while { [gets $input line] != -1 } { # line with timestamp if { [regexp {^constant Timestamp.*([[:xdigit:]]{8})} $line match prev_timestamp] } { # split previous timestamp value to timestamp and build number set timestamp [string range $prev_timestamp 0 5] set build_number [string range $prev_timestamp 6 7] # convert the hexadecimal build_number to base ten scan $build_number "%x" new_build_number set new_build_number [update_build_number $timestamp $new_build_number] set build_number [format "%02X" $new_build_number] set timestamp [generate_timestamp] regsub $prev_timestamp $line "$timestamp$build_number" line post_message -type info "Version is: $timestamp$build_number" } # write out the line to the new file puts $output $line } close $input close $output } set new_version_file "${version_file}.tmp" if { [catch { update_version $version_file $new_version_file } res] } { post_message -type critical_warning "Could not update version number: $res" } else { if { [catch { file rename -force $new_version_file $version_file } res ] } { post_message -type critical_warning \ "Could not update version number: $res" } } В .qsf пишете: # update version number before the flow starts set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:update_version.tcl" Quote Ответить с цитированием Share this post Link to post Share on other sites
Kluwer 0 Posted November 18, 2014 · Report post Благодарствую! Quote Ответить с цитированием Share this post Link to post Share on other sites
des00 0 Posted November 18, 2014 · Report post для верилога и времени сборки использовал файл get_time.tcl project_open -revision pdh_mp_prd_top pdh_mp_prd_top set t [clock seconds] set_parameter -name pCOMPILATION_TIME $t export_assignments в самом коде `ifdef MODEL_TECH parameter int pCOMPILATION_TIME = 100; `else parameter int pCOMPILATION_TIME; `endif Quote Ответить с цитированием Share this post Link to post Share on other sites
novartis 0 Posted December 2, 2014 · Report post Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE? Quote Ответить с цитированием Share this post Link to post Share on other sites
x736C 0 Posted September 11, 2015 (edited) · Report post для верилога и времени сборки использовал файл get_time.tcl Зачем может понадобиться время сборки, сохраненное в переменной/прошивке? UPD: вместо «в переменной» следует читать «в параметре». Edited September 11, 2015 by x736C Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted September 11, 2015 · Report post для идентификации версии, прибор может выводить ее куда то на индикатор... Quote Ответить с цитированием Share this post Link to post Share on other sites
x736C 0 Posted September 11, 2015 · Report post Я, видимо, сильно протупил. Подумал, что речь идет о длительности сборки, измеренной в секундах. С датой и временем, когда была осуществлена сборка, всё ясно. Quote Ответить с цитированием Share this post Link to post Share on other sites
nepoch 0 Posted September 12, 2015 · Report post В tclнике сделать параметр derived, во время генерации файлов, значению параметра присвоить время, после чего в виде параметра передать в исходник veriloga. А там уже просто вывести константу на индикатор. Quote Ответить с цитированием Share this post Link to post Share on other sites
Krys 0 Posted September 16, 2015 · Report post Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE?В исе такого нет, есть в Vivado. Мы для ИСЕ делали tcl-скрипт, в котором проделывались все нужные действия по подготовке даты, и затем скрипт сам запускал синтез (можно отдельно скрипт, затем вручную синтез, и имплементацию, но мы уменьшили ручную работу на 1 клик))) ). Чтобы скрипт выполнить, в ИСЕ открывали окно TCL console, там писали source synt.tcl, и таким образом выполняли всё это дело (т.е. не требовалось отдельно запускать процесс синтеза). Quote Ответить с цитированием Share this post Link to post Share on other sites
semperante 0 Posted September 21, 2015 · Report post Тоже когда-то делал tcl-скрипт, который изменяет константы в vhdl-файле (время сборки и номер версии) для Altera'-вского проекта. Но столкнулся со следующей проблемой: если в проекте не было изменений в модуле, который использует эти константы, то при повторном синтезе проекта в Qaurtus константы в итоговой прошивке остаются старыми (я их вывожу на дисплей). При этом константы в vhdl файле изменяются на новые должным образом (здесь все верно). Проблему решил так, что дополнительно в tcl-скрипте прописал удаление базы данных при каждом синтезе (папка db в проекте). Каких-то серьезных изменений в скорости компиляции не заметил. Quote Ответить с цитированием Share this post Link to post Share on other sites
Krys 0 Posted September 21, 2015 · Report post Да, тоже припоминаю, что для Xilinx ISE требовалось очищать проект, иначе всё старое бралось ))) Quote Ответить с цитированием Share this post Link to post Share on other sites
toshas 0 Posted September 22, 2015 · Report post Для Xilinx есть еще такой вариант: на этапе bitgen добавить время в файл прошивки, а потом через специальный примитив USR_ACCESS получить к нему доступ из работающего проекта. http://www.xilinx.com/support/documentatio..._usr_access.pdf Quote Ответить с цитированием Share this post Link to post Share on other sites
Krys 0 Posted September 23, 2015 · Report post Огромное спасибо! Это самый "кошерный" вариант. Остальные - самодельные костыли )) Quote Ответить с цитированием Share this post Link to post Share on other sites
gotcha 0 Posted September 24, 2015 · Report post toshas, хорошее решение, жаль только для Virtex®-5, Virtex-6, and all 7 series FPGAs =( Quote Ответить с цитированием Share this post Link to post Share on other sites