Kluwer 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба Коллеги, проблема такая: на плате имеются семисегментники, очень хочется, что бы при каждой пересборке проекта на них выводилась дата-время или хотя бы некоторый постоянно увеличивающийся номер версии. В Квартусе, к сожалению, нет чего-то похожего на пункт "pre-build", как например в код композере, что бы запустить перед сборкой свою прогу. Верилоговские макросы с выдачей даты или времени, Квартус игнорирует. Пошли путём написания стартового tcl-скрипта, который бы находил в нужном файле предопределённый localparam и менял его, но чего-то не получается никак этот tcl'ник заставить искать нужную строку. Да и тогда запускать сборку проекта придётся не стандартной кнопкой "Start Compilation", а щёлкая по скрипту. Тоже весьма неудобно. Короче говоря, может кто знает как эту задачу проще решить? Поделитесь, плиз, решением! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба В Квартусе, к сожалению, нет чего-то похожего на пункт "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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба Благодарствую! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба для верилога и времени сборки использовал файл 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 2 декабря, 2014 Опубликовано 2 декабря, 2014 · Жалоба Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 (изменено) · Жалоба для верилога и времени сборки использовал файл get_time.tcl Зачем может понадобиться время сборки, сохраненное в переменной/прошивке? UPD: вместо «в переменной» следует читать «в параметре». Изменено 11 сентября, 2015 пользователем x736C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба для идентификации версии, прибор может выводить ее куда то на индикатор... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Я, видимо, сильно протупил. Подумал, что речь идет о длительности сборки, измеренной в секундах. С датой и временем, когда была осуществлена сборка, всё ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nepoch 0 12 сентября, 2015 Опубликовано 12 сентября, 2015 · Жалоба В tclнике сделать параметр derived, во время генерации файлов, значению параметра присвоить время, после чего в виде параметра передать в исходник veriloga. А там уже просто вывести константу на индикатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 16 сентября, 2015 Опубликовано 16 сентября, 2015 · Жалоба Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE?В исе такого нет, есть в Vivado. Мы для ИСЕ делали tcl-скрипт, в котором проделывались все нужные действия по подготовке даты, и затем скрипт сам запускал синтез (можно отдельно скрипт, затем вручную синтез, и имплементацию, но мы уменьшили ручную работу на 1 клик))) ). Чтобы скрипт выполнить, в ИСЕ открывали окно TCL console, там писали source synt.tcl, и таким образом выполняли всё это дело (т.е. не требовалось отдельно запускать процесс синтеза). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
semperante 0 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Тоже когда-то делал tcl-скрипт, который изменяет константы в vhdl-файле (время сборки и номер версии) для Altera'-вского проекта. Но столкнулся со следующей проблемой: если в проекте не было изменений в модуле, который использует эти константы, то при повторном синтезе проекта в Qaurtus константы в итоговой прошивке остаются старыми (я их вывожу на дисплей). При этом константы в vhdl файле изменяются на новые должным образом (здесь все верно). Проблему решил так, что дополнительно в tcl-скрипте прописал удаление базы данных при каждом синтезе (папка db в проекте). Каких-то серьезных изменений в скорости компиляции не заметил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Да, тоже припоминаю, что для Xilinx ISE требовалось очищать проект, иначе всё старое бралось ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toshas 0 22 сентября, 2015 Опубликовано 22 сентября, 2015 · Жалоба Для Xilinx есть еще такой вариант: на этапе bitgen добавить время в файл прошивки, а потом через специальный примитив USR_ACCESS получить к нему доступ из работающего проекта. http://www.xilinx.com/support/documentatio..._usr_access.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 23 сентября, 2015 Опубликовано 23 сентября, 2015 · Жалоба Огромное спасибо! Это самый "кошерный" вариант. Остальные - самодельные костыли )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gotcha 0 24 сентября, 2015 Опубликовано 24 сентября, 2015 · Жалоба toshas, хорошее решение, жаль только для Virtex®-5, Virtex-6, and all 7 series FPGAs =( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться