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

Quartus, как получить доступ к содержимому LUT-ов?

Вопрос знатокам тонкостей Quartus-а

 

Через Resource Property Editor, который вызывается из Chip Planer можно просмотреть логическое уравнение LUT (SUM/Carry Equation) и соответствующую этому уравнению LUT Mask. В этом же редакторе имеется возможность изменять уравнение или маску. Короче, можно просматривать и менять содержимое LUT-ов.

 

Мне нужно проделать аналогичную процедуру (считывание / изменение LUT Mask) но не вручную. Моя программа должна пройтись по проекту, считать LUT-маски и по определенному принципу изменить их.

 

Вопрос: может, кто знает, где Quartus хранит LUT-маски или как получить к ним доступ?

 

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


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

Вопрос знатокам тонкостей 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, но это штука непростая, придётся покурить мануалы.

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


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

Неужели невозможно?

Вручную можно менять содержимое LUT, а программно нельзя?

 

Вариант 1 :

Вместо LUTов ставьте RAM и подгружайте в неё любую логическую функцию. По ресурсу получится почти то же самое, что и на обычных LUTах (добавится логика записи в RAM).

Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах.

 

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


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

Неужели невозможно?

Вручную можно менять содержимое LUT, а программно нельзя?

 

 

Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах.

см. пункт 2.

 

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


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

Неужели невозможно?

Возможно. Посмотрите в помощи на Quartus:

LUT_INPUT Primitive

LUT_OUTPUT Primitive

Если получится использовать, не поленитесь доложить.

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


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

Неужели невозможно?

Вручную можно менять содержимое LUT, а программно нельзя?

Мне нужно по уже готовым проектам пройтись, там логика уже в LUT-ах.

 

Все зависит от размера проекта, что Вы хотите получить в конечном итоге. Ну и от вашего опыта.

 

Получить доступ к ЛУТам можно несколькими путями.

Я знаю пока только три (при уже разведенном проекте).

 

1) Стандартный путь.

Использовать встроенный TCL и Chip Editor.

 

2) Использовать С++ и Quartus SDK.

Откуда Вы его возьмете это вопрос отдельный.

 

3) Поменять ЛУТы в выходном файле (POF, SOF, RBF).

Ну этот путь соответственно для исключительных случаев.

 

Но ЛУТ маски надо менять синхронно с входными портами.

Если входной порт не используется, то соответственно надо менять маску.

Иначе Fitter выдаст ошибку. Собственно это и в ручном режиме видно.

 

Пример:

chip_editor_ex.zip

 

 

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


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

Спасибо всем, кто написал советы.

 

1) Стандартный путь.

Использовать встроенный TCL и Chip Editor.

Буду пытаться пробовать этот способ.

 

3) Поменять ЛУТы в выходном файле (POF, SOF, RBF).

Ну этот путь соответственно для исключительных случаев.

Этот вариант мне приходил в голову. Но для его реализации нужно знать формат POF/SOF файлов. Насколько мне известно, Альтера не афиширует эти форматы. Мне не удалось их найти.

 

jks, Вы не знаете где их можно посмотреть?

 

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


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

Этот вариант мне приходил в голову. Но для его реализации нужно знать формат POF/SOF файлов. Насколько мне известно, Альтера не афиширует эти форматы. Мне не удалось их найти.

 

jks, Вы не знаете где их можно посмотреть?

 

www.pldtool.com/pdf/fmt_pof.pdf

 

http://electronix.ru/forum/index.php?s=&am...t&p=1143519

 

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

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


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

Решил, что для быстрого решения моей задачи (считывание и модификация значений 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 тоже не дают нужного результата. Не могу найти ответа

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

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


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

В 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
}

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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