Flip-fl0p 4 14 февраля, 2017 Опубликовано 14 февраля, 2017 (изменено) · Жалоба Работая с макетной платой, я столкнулся с затруднениями в назначении входных/выходных портов. Каждый раз, когда я хочу какой-то порт в проекте вывести на один из множества светодиодов на плате, мне приходиться обращаться к схеме или таблице соединений, чтобы посмотреть, какая ножка в ПЛИС физически связана с нужным мне светодиодом. Это не сложно, когда у меня в проекте используется только один светодиод. Проблемы появляются, когда у меня в проекте используется очень много выводов: подключены семисегментные индикаторы, микросхема SDRAM, светодиоды и пр. Каждый раз проверять по схеме или таблице соединений, что куда идёт, очень долго, а самое главное - чревато ошибками. Мне кажется, должен быть инструмент/способ, который может существенно облегчить жизнь при назначении пинов. Попытавшись в этом разобраться, я нашел, что Quartus создает файл с расширением .qsf, который содержит все назначения пинов в проекте. Поигравшись с этим файлом, я пришел к выводу, что можно внутри этого файла создать имя порта и указать на какую ножку микросхемы он подключен. Поскольку в проекте этот порт отсутствует, но в файле .qsf он вручную описан, то этот порт будет виден в Pin Planner'е, где ему будет присвоен статус Unknown, но так-же ему будет присвоено назначение на нужную мне ножку микросхемы. Таким образом я смогу всей периферии на макетной плате описать соответствие ножкам микросхемы. Что приведет к тому, что в HDL описании мне достаточно будет просто выходному\входному порту дать такое же имя, как порту, вручную описанному в файле .qsf. И поскольку имена совпадают, порт в HDL описании подключается к нужным мне ножкам, что и требовалось изначально. У меня возникло ощущение, что я упустил какой-то инструмент, который позволяет сделать почти то-же самое, но меньшими усилиями, и гораздо проще, чем то, что я сейчас описал. Уважаемые гуру, подскажите мне, правильно ли я делаю ? Можно ли так вообще поступать ? И можно ли это сделать более правильным способом ? Изменено 14 февраля, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
semperante 0 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба Собственно, какую операцию вы хотите упростить? Вы все верно описываете - один раз для конкретной платы прописываются все связи между физическими пинами и именами портов. Это можно сделать либо с помощью текстового редактора, либо с помощью GUI (того же Pin Planner'а). На выходе имеем готовый .qsf файл (может быть другое расширение). В следующем проекте просто выполняется команда "Import assignments ...". Для готовых отладочных плат такой файл обычно подготавливается производителем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба А почему не сделать назначение прямо в Pin Planner'е? Там автоматически появляются все порты top-level модуля. Так же намного удобнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба А почему не сделать назначение прямо в Pin Planner'е? Там автоматически появляются все порты top-level модуля. Так же намного удобнее. Можно и в Pin Planner'е делать. Просто когда есть готовый файл назначений, то его проще скопировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба Десять раз показывал. В вериложном файле: module Top_m ( /* Test */ (* chip_pin = "1", altera_attribute = "-name io_maximum_toggle_rate 0" *) output TEST, // Test output /* Выводы ?? используются для SignalProbe */ /* Clock 250MHz, инверсные входы LVDS */ (* chip_pin = "91", altera_attribute = "-name global_signal on; -name io_standard lvds" *) input PLC_N, /* ADC1 */ (* chip_pin = "104", altera_attribute = "-name io_maximum_toggle_rate 0" *) output PDWN1, (* chip_pin = "99, 103, 121, 127, 129, 133, 144", altera_attribute = "-name io_standard lvds; -name pad_to_input_register_delay 0", useioff = 1 *) input [7:1] S1D_N, (* chip_pin = "10", altera_attribute = "-name io_standard lvds; -name pad_to_input_register_delay 0", useioff = 1 *) input S1D_P, /* TRIG */ (* chip_pin = "106", altera_attribute = "-name io_standard 2.5V; -name auto_open_drain_pins on; -name io_maximum_toggle_rate 0" *) output TRHYS, (* chip_pin = "89", altera_attribute = "-name io_standard lvds" *) input TRC_N, ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Это и есть самое простое - описать все ножки сразу с понятными именами и затем лишь подключать их в top-файле. Часто вместе с документацией к evaluation бордам идёт и файл с готовым описанием ножек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться