реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Добавление даты в проект
Kluwert
сообщение Nov 18 2014, 08:14
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 15-11-09
Пользователь №: 53 639



Коллеги,

проблема такая: на плате имеются семисегментники, очень хочется, что бы при каждой пересборке проекта на них выводилась дата-время или хотя бы некоторый постоянно увеличивающийся номер версии. В Квартусе, к сожалению, нет чего-то похожего на пункт "pre-build", как например в код композере, что бы запустить перед сборкой свою прогу. Верилоговские макросы с выдачей даты или времени, Квартус игнорирует. Пошли путём написания стартового tcl-скрипта, который бы находил в нужном файле предопределённый localparam и менял его, но чего-то не получается никак этот tcl'ник заставить искать нужную строку. Да и тогда запускать сборку проекта придётся не стандартной кнопкой "Start Compilation", а щёлкая по скрипту. Тоже весьма неудобно.

Короче говоря, может кто знает как эту задачу проще решить? Поделитесь, плиз, решением!
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Nov 18 2014, 08:31
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 785
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Kluwert @ Nov 18 2014, 12:14) *
В Квартусе, к сожалению, нет чего-то похожего на пункт "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 для обновления версии:
CODE

# 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"
Go to the top of the page
 
+Quote Post
Kluwert
сообщение Nov 18 2014, 08:34
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 15-11-09
Пользователь №: 53 639



Благодарствую!
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 18 2014, 09:07
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 222
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



для верилога и времени сборки использовал файл 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



--------------------
Go to the top of the page
 
+Quote Post
novartis
сообщение Dec 2 2014, 08:40
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE?
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 11 2015, 09:55
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 972
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(des00 @ Nov 18 2014, 12:07) *
для верилога и времени сборки использовал файл get_time.tcl

Зачем может понадобиться время сборки, сохраненное в переменной/прошивке?


UPD: вместо «в переменной» следует читать «в параметре».

Сообщение отредактировал x736C - Sep 11 2015, 11:04
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 11 2015, 13:25
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



для идентификации версии, прибор может выводить ее куда то на индикатор...
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 11 2015, 14:11
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 972
Регистрация: 3-03-06
Пользователь №: 14 942



Я, видимо, сильно протупил. Подумал, что речь идет о длительности сборки, измеренной в секундах.

С датой и временем, когда была осуществлена сборка, всё ясно.
Go to the top of the page
 
+Quote Post
Nepoch
сообщение Sep 12 2015, 17:35
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 19-12-11
Из: Курск
Пользователь №: 68 971



В tclнике сделать параметр derived, во время генерации файлов, значению параметра присвоить время, после чего в виде параметра передать в исходник veriloga. А там уже просто вывести константу на индикатор.
Go to the top of the page
 
+Quote Post
Krys
сообщение Sep 16 2015, 08:35
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(novartis @ Dec 2 2014, 15:40) *
Вот для квартуса в .qsf можно воспользоваься PRE_FLOW_SCRIPT_FILE и POST_FLOW_SCRIPT_FILE, а как тот же фокус провернуть в ISE?
В исе такого нет, есть в Vivado. Мы для ИСЕ делали tcl-скрипт, в котором проделывались все нужные действия по подготовке даты, и затем скрипт сам запускал синтез (можно отдельно скрипт, затем вручную синтез, и имплементацию, но мы уменьшили ручную работу на 1 клик))) ). Чтобы скрипт выполнить, в ИСЕ открывали окно TCL console, там писали source synt.tcl, и таким образом выполняли всё это дело (т.е. не требовалось отдельно запускать процесс синтеза).


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SemperAnte
сообщение Sep 21 2015, 10:07
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 24-10-10
Из: Санкт-Петербург
Пользователь №: 60 386



Тоже когда-то делал tcl-скрипт, который изменяет константы в vhdl-файле (время сборки и номер версии) для Altera'-вского проекта.
Но столкнулся со следующей проблемой: если в проекте не было изменений в модуле, который использует эти константы, то при повторном синтезе проекта в Qaurtus константы в итоговой прошивке остаются старыми (я их вывожу на дисплей). При этом константы в vhdl файле изменяются на новые должным образом (здесь все верно).
Проблему решил так, что дополнительно в tcl-скрипте прописал удаление базы данных при каждом синтезе (папка db в проекте). Каких-то серьезных изменений в скорости компиляции не заметил.
Go to the top of the page
 
+Quote Post
Krys
сообщение Sep 21 2015, 11:08
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Да, тоже припоминаю, что для Xilinx ISE требовалось очищать проект, иначе всё старое бралось )))


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
toshas
сообщение Sep 22 2015, 12:24
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 14-02-06
Пользователь №: 14 339



Для Xilinx есть еще такой вариант: на этапе bitgen добавить время в файл прошивки, а потом через специальный примитив USR_ACCESS получить к нему доступ из работающего проекта.

http://www.xilinx.com/support/documentatio..._usr_access.pdf
Go to the top of the page
 
+Quote Post
Krys
сообщение Sep 23 2015, 02:57
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Огромное спасибо! Это самый "кошерный" вариант. Остальные - самодельные костыли ))


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
gotcha
сообщение Sep 24 2015, 11:37
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 19-03-06
Пользователь №: 15 389



toshas, хорошее решение, жаль только для Virtex®-5, Virtex-6, and all 7 series FPGAs =(
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2017 - 10:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016