Перейти к содержанию
    

Как в VHDL получить дату компиляции проека?

День добрый,

есть такая проблема. В процессе разработки схемы часто начинаешь путаться в различных версиях прошивок ПЛИС. Хочется в устройстве сделать регистр, из которого можно было бы читать дату компиляции проекта. Причем дата должна заноситься автоматически в виде константы, поскольку руками все равно когда-нибудь да забудешь. Никак не могу придумать. Кто как решает подобные проблемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

День добрый,

есть такая проблема. В процессе разработки схемы часто начинаешь путаться в различных версиях прошивок ПЛИС. Хочется в устройстве сделать регистр, из которого можно было бы читать дату компиляции проекта. Причем дата должна заноситься автоматически в виде константы, поскольку руками все равно когда-нибудь да забудешь. Никак не могу придумать. Кто как решает подобные проблемы?

Да обычно этим САПР занимается. Зачем в проект то зашивать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да обычно этим САПР занимается. Зачем в проект то зашивать?

 

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

Так что вопрос остается открытым.

 

Можно, конечно, взять что-нибудь вроде sed'a с компанией и натравливать его на исходники перед началом компиляции...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да обычно этим САПР занимается. Зачем в проект то зашивать?

 

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

Так что вопрос остается открытым.

 

Можно, конечно, взять что-нибудь вроде sed'a с компанией и натравливать его на исходники перед началом компиляции...

Вы слишком многого хотите от языка не программирования. shell+sed/awk,по-моему, лучшее решение. Там и дату можно получить в разных форматах.

У Xilinx есть, по-моему, в bitgen опция userid. Ее можно использовать.Тем более, что из одного и того же кода можно получить разные прошивкив зависимости от параметров разводки.

Изменено пользователем andrew_b

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажем в Квартусе дата/время заносится автоматически в report'ы проекта...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

День добрый,

есть такая проблема. В процессе разработки схемы часто начинаешь путаться в различных версиях прошивок ПЛИС. Хочется в устройстве сделать регистр, из которого можно было бы читать дату компиляции проекта. Причем дата должна заноситься автоматически в виде константы, поскольку руками все равно когда-нибудь да забудешь. Никак не могу придумать. Кто как решает подобные проблемы?

 

Когда я делаю встроенный микроконтроллер, мой самодельный ассемблер делает файл прошивки и помещает его в верилог-файл микроконтроллера. В самом конце файла он ищет строку что-то типа "assign data = ....." и заменяет ее на строку с текущей датой. А эта строка потом читается как код и дата прошивки. В файле микроконтроллера, там где инициализация памяти, компилятор пишет как комментарии дату, название асм. файла и пр. параметры.

Материалы об этом я сдал в редакцию, так что через месяц статья выйдет.

А дата и версия прошивки - дело важное. Опыт показывает, что когда программисты начинают путаться в версиях, то отладка прибора в целом практически останавливаются. Поэтому целесообразно, чтобы GUI сразу выводила на экран параметры модулей, и в том числе дату прошивки.

 

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы слишком многого хотите от языка не программирования. shell+sed/awk,по-моему, лучшее решение. Там и дату можно получить в разных форматах.

 

Под компанией к sed я и подразумевал shell, cut и прочие textutils. :)

 

У Xilinx есть, по-моему, в bitgen опция userid. Ее можно использовать.Тем более, что из одного и того же кода можно получить разные прошивкив зависимости от параметров разводки.

 

Userid - это, afair, функция для идентификации прошивки через JTAG. Т.е. так просто до этой информации не доберешься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется затронул интерестную тему :)

 

Вы слишком многого хотите от языка не программирования. shell+sed/awk,по-моему, лучшее решение. Там и дату можно получить в разных форматах.

У Xilinx есть, по-моему, в bitgen опция userid. Ее можно использовать.Тем более, что из одного и того же кода можно получить разные прошивкив зависимости от параметров разводки.

 

Я к сожалению не знаю что такое "sed/awk". Что это?

Может быть это через tcl-скрипты можно сделать? Я с ними правда не работал.

С userid интерестная идея. А он для каждой прошивки как то автоматически компилятором генерится, или руками где-то в опциях задается?

 

Скажем в Квартусе дата/время заносится автоматически в report'ы проекта...

report - это окончательный результат компиляции, а дата должна заноситься раньше.

 

Материалы об этом я сдал в редакцию, так что через месяц статья выйдет.

 

А в какое журнал? Хочется прочитать.

 

А может быть это на verilog'е можно сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется затронул интерестную тему :)

 

Я к сожалению не знаю что такое "sed/awk". Что это?

 

Это стандартные утилиты для обрабоки текстовой информации. Sed - Stream EDitor. Поищите в google.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется затронул интерестную тему :)

 

А в какое журнал? Хочется прочитать.

 

А может быть это на verilog'е можно сделать?

 

Если бы Вы посмотрели карточку участника конференции, нашли бы мой сайт, там раздел статьи и тд. то и вопрос не пришлось бы задавать.

Но я Вас приглашаю:

www.iosifk.narod.ru.

Статья "Микропроцессор своими руками - 3",

Журнал "Компоненты и Технологии", ожидается №2 или 3, как там будет место.

 

Как это же сделать средствами верилога - я не ставил себе такой задачи. Наоборот, я предпочитаю делать софт-инструменты, которые сами генерят верилог-файлы. Часть из них описана в статьях.

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть это через tcl-скрипты можно сделать? Я с ними правда не работал.

 

вот 101% :) видел в инете скрипт tcl который может возвращать в файл текущее время и дату.

 

в понедельник могу на работе посмотреть.. кажися я его даже качнул.

имея его - все просто (vhdl образ мышления):

 

1 вставляешь батник, запускающий этот скрипт, перед началом синтеза

2 в каком-нибудь пакете обьявляешь константу типа std_logic_vector ( у скрипта выход в таком формате)

3 пишешь функцию, которая читает из файла твою дату и заносит в эту константу.

 

ЗЫ

щас тута начнут, может, выступать по поводу синтезабельности файловых операций..

так вот - не слушайте. По крайней мере синплифай нормально это дело хавает.

главное чтобы все файловые операции были времени синтеза а не выполнения

 

ЗЗЫ

 

на крайняк, если скрипт не найдется, что мешет вам написать мал. прожку на cpp которая будет работать заместо скрипта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и вдогонку..

еще легче ваще весь пакет с указанной константой сгенерить програмно..

 

fprintf(ffp,"library ieee;\nuse ieee.std_logic_1164.all;\n");

fprintf(ffp,"use ieee.std_logic_unsigned.all;\n\n");

 

fprintf(ffp,"entity %s is\n",basename);

fprintf(ffp,"\tport( address : in std_logic_vector(7 downto 0);\n");

fprintf(ffp,"\t\tclk : in std_logic;\n\t\tdout : out std_logic_vector(15 downto 0));\n\tend;\n\n");

fprintf(ffp,"architecture v1 of %s is\n\n", basename);

 

fprintf(ffp,"\tconstant ROM_WIDTH: INTEGER:= 16;\n");

fprintf(ffp,"\tconstant ROM_LENGTH: INTEGER:= 256;\n\n");

fprintf(ffp,"\tsubtype rom_word is std_logic_vector(ROM_WIDTH-1 downto 0);\n");

fprintf(ffp,"\ttype rom_table is array (0 to ROM_LENGTH-1) of rom_word;\n\n");

fprintf(ffp,"constant rom: rom_table := rom_table'(\n");

for(i = 0; i < PROGRAM_COUNT-1; i++){

fprintf(ffp, "\t\"");

for(j = 15; j >= 0; j--)

fprintf(ffp, "%d", (program_word>>j) & 1); //print binary

fprintf(ffp, "\",\n");

}

fprintf(ffp, "\t\"");

for(j = 15; j >= 0; j--)

fprintf(ffp, "%d", (program_word>>j) & 1); //print binary

fprintf(ffp, "\");\n\n");

 

fprintf(ffp,"begin\n\nprocess (clk)\nbegin\n", basename);

fprintf(ffp,"\tif clk'event and clk = '1' then\n\t\tdout <= rom(conv_integer(address));\n");

fprintf(ffp,"\tend if;\nend process;\nend v1;\n");

 

вот..

нашел даже какой то пример..

генерит, по всей видимости, ПЗУ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть это через tcl-скрипты можно сделать? Я с ними правда не работал.

 

вот 101% :) видел в инете скрипт tcl который может возвращать в файл текущее время и дату.

 

в понедельник могу на работе посмотреть.. кажися я его даже качнул.

имея его - все просто (vhdl образ мышления):

 

1 вставляешь батник, запускающий этот скрипт, перед началом синтеза

2 в каком-нибудь пакете обьявляешь константу типа std_logic_vector ( у скрипта выход в таком формате)

3 пишешь функцию, которая читает из файла твою дату и заносит в эту константу.

 

ЗЫ

щас тута начнут, может, выступать по поводу синтезабельности файловых операций..

так вот - не слушайте. По крайней мере синплифай нормально это дело хавает.

главное чтобы все файловые операции были времени синтеза а не выполнения

 

ЗЗЫ

 

на крайняк, если скрипт не найдется, что мешет вам написать мал. прожку на cpp которая будет работать заместо скрипта

Привет Всем!

 

Дак как на счет понедельника, Ведь уже вторник, а ответа все и нету?

 

Да тема однако очень актуальная для многих (на мой взгляд).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

tcl>> clock seconds

bash>> date +%S

perl >> $time_const = time();

 

возвращают время в секундах. можно в любом формате.

 

а) tcl скрипт воткнуть в вашу тулзу и подсовывать в параметр компиляции - чтобы, например, переопределять параметр или дифайн в ХДЛ - если поддерживает тулза.

еще можно тиклом переписать ваш хдл файл.

 

б) perl/shell скрипт или срр программа - натравливать перед компиляцией, чтобы переписать те же константы в файле

 

вам сваять какой-нибудь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 lutik:

спасибо, за идеи. В продолжение мысль: включить его в автозагрузку. А можно в автозагрузку включить bat-файл, который делает текстовый файл с датой и временем. А в VHDL-модуле этот файл читается и генерит дату. Это избавляет от необходимости что-то делать ручками перед началом синтеза. Правда тоже есть недостатки. Хочется чтобы этот файл должен быть доступен из разных проектов и разным пользователям. Наверное можно через всякие переменные среды сделать. Правда автозагрузку при переустановки системы можно позабыть:)

2 id_gene:

а можно это tsl/perl/bash скрипты как нибудь с quartus`ом связать? Ну чтобы с запуском компиляции атоматически еще и этот скрипт запускался? Спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...