files 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Вопрос знатокам тонкостей Quartus-а Через Resource Property Editor, который вызывается из Chip Planer можно просмотреть логическое уравнение LUT (SUM/Carry Equation) и соответствующую этому уравнению LUT Mask. В этом же редакторе имеется возможность изменять уравнение или маску. Короче, можно просматривать и менять содержимое LUT-ов. Мне нужно проделать аналогичную процедуру (считывание / изменение LUT Mask) но не вручную. Моя программа должна пройтись по проекту, считать LUT-маски и по определенному принципу изменить их. Вопрос: может, кто знает, где Quartus хранит LUT-маски или как получить к ним доступ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 11 марта, 2013 Опубликовано 11 марта, 2013 · Жалоба Вопрос знатокам тонкостей Quartus-а Через Resource Property Editor, который вызывается из Chip Planer можно просмотреть логическое уравнение LUT (SUM/Carry Equation) и соответствующую этому уравнению LUT Mask. В этом же редакторе имеется возможность изменять уравнение или маску. Короче, можно просматривать и менять содержимое LUT-ов. Мне нужно проделать аналогичную процедуру (считывание / изменение LUT Mask) но не вручную. Моя программа должна пройтись по проекту, считать LUT-маски и по определенному принципу изменить их. Вопрос: может, кто знает, где Quartus хранит LUT-маски или как получить к ним доступ? Вариант 1 : Вместо LUTов ставьте RAM и подгружайте в неё любую логическую функцию. По ресурсу получится почти то же самое, что и на обычных LUTах (добавится логика записи в RAM). Вариант 2 : Есть ещё такя тема как partial reconfiguration, но это штука непростая, придётся покурить мануалы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
files 0 13 марта, 2013 Опубликовано 13 марта, 2013 · Жалоба Неужели невозможно? Вручную можно менять содержимое LUT, а программно нельзя? Вариант 1 : Вместо LUTов ставьте RAM и подгружайте в неё любую логическую функцию. По ресурсу получится почти то же самое, что и на обычных LUTах (добавится логика записи в RAM). Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Неужели невозможно? Вручную можно менять содержимое LUT, а программно нельзя? Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах. см. пункт 2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Неужели невозможно? Возможно. Посмотрите в помощи на Quartus: LUT_INPUT Primitive LUT_OUTPUT Primitive Если получится использовать, не поленитесь доложить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jks 0 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Неужели невозможно? Вручную можно менять содержимое LUT, а программно нельзя? Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах. Все зависит от размера проекта, что Вы хотите получить в конечном итоге. Ну и от вашего опыта. Получить доступ к ЛУТам можно несколькими путями. Я знаю пока только три (при уже разведенном проекте). 1) Стандартный путь. Использовать встроенный TCL и Chip Editor. 2) Использовать С++ и Quartus SDK. Откуда Вы его возьмете это вопрос отдельный. 3) Поменять ЛУТы в выходном файле (POF, SOF, RBF). Ну этот путь соответственно для исключительных случаев. Но ЛУТ маски надо менять синхронно с входными портами. Если входной порт не используется, то соответственно надо менять маску. Иначе Fitter выдаст ошибку. Собственно это и в ручном режиме видно. Пример: chip_editor_ex.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
files 0 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Спасибо всем, кто написал советы. 1) Стандартный путь. Использовать встроенный TCL и Chip Editor. Буду пытаться пробовать этот способ. 3) Поменять ЛУТы в выходном файле (POF, SOF, RBF). Ну этот путь соответственно для исключительных случаев. Этот вариант мне приходил в голову. Но для его реализации нужно знать формат POF/SOF файлов. Насколько мне известно, Альтера не афиширует эти форматы. Мне не удалось их найти. jks, Вы не знаете где их можно посмотреть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Djamal 0 19 марта, 2013 Опубликовано 19 марта, 2013 (изменено) · Жалоба Этот вариант мне приходил в голову. Но для его реализации нужно знать формат POF/SOF файлов. Насколько мне известно, Альтера не афиширует эти форматы. Мне не удалось их найти. jks, Вы не знаете где их можно посмотреть? www.pldtool.com/pdf/fmt_pof.pdf http://electronix.ru/forum/index.php?s=&am...t&p=1143519 Изменено 19 марта, 2013 пользователем Djamal Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
files 0 25 марта, 2013 Опубликовано 25 марта, 2013 (изменено) · Жалоба Решил, что для быстрого решения моей задачи (считывание и модификация значений LUT Mask) наиболее подходит первый способ рекомендованный jks: 1) Стандартный путь. Использовать встроенный TCL и Chip Editor. Однако, не могу разобраться с TCL командами Quartus Chip Planner: http://quartushelp.altera.com/current/merg...ner_ver_2.0.htm Да, есть команда get_node_info, позволяющая получить LUT Mask. Есть команда set_node_info, позволяющая установить LUT Mask. Но как мне позиционироваться на нужные мне LUT-ы? Единственная команда, которая содержит параметр location, это команда add_new_cell. С ее помощью я могу создать новую ячейку и при этом задать ее координаты в FPGA, после чего применять к ячейке get_node_info и set_node_info. Но как мне спозиционироватся (задать location) на уже существующую ячейку? Чтобы для нее применить команды get_node_info и set_node_info. Помогите. Все альтеровские рекомендации перерыл. Примеры, которые дал jks тоже не дают нужного результата. Не могу найти ответа Изменено 25 марта, 2013 пользователем files Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jks 0 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба В Quartus'e принято работать с символьными именами узлов или цепей, а не с абсолютными координатами ЛЕ. Не совсем понятно зачем Вам нужны абсолютные координаты. Для работы с абсолютными координатами надо знать геометрию кристалла (размещение ЛЕ), Для каждого типа свое размещение LE, DSP, RAM блоков по столбцам. Код ниже позволяет разрешить (преобразовать) символьное имя узла в координату ЛЕ. В массив node_map заносится node_id. Индексом является строка node_location . При помощи array size имя_массива и array get имя_массива координата можно получить сохраненный node_id. # # all, lcell, io, pll, dsp, ram set cell_nodes [ get_nodes -type lcell] # set nodes_count [get_collection_size $cell_nodes] puts "Total nodes count = $nodes_count" foreach_in_collection node $cell_nodes { set node_name [get_node_info -node $node -info "Name"] set node_location [get_node_info -node $node -info "Location String"] set node_id [get_node_by_name -name $node_name] puts "node($node), name = $node_name, $node_location" # # set node_map($node_location) $node_id } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться