Понимание битового потока, сгенерированного для тайлов ввода-вывода iCE40

Когда я синтезирую пустую схему, используя Yosys и arachne-pnr, я получаю несколько неправильных битов:

.io_tile 6 17
IoCtrl IE_1

.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1

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

  • для блока IE/REN 6 17 0 входной буфер включен
  • для блока IE/REN 6 0 0 входной буфер включен, а нагрузочный резистор отключен
  • для блока IE/REN 6 0 1 входной буфер включен, а нагрузочный резистор отключен

Однако, согласно документации, нет блока IE/REN 6 17 0. Что означают эти биты? Если бит IE блока 6 17 0 не установлен, потому что блок не существует, почему не сбрасываются и биты других блоков, которые не существуют? Кажется, что другие блоки IE/REN соответствуют блокам ввода / вывода 6 0 1 и 7 0 0. Что делают эти блоки и почему они всегда конфигурируются как входы?

Запись в библиотеке технологий для SB_IO не упоминает бит IE. Как это связано с настройками параметра PIN_TYPE?

Когда я использую вывод ввода / вывода в качестве входа, устанавливается бит REN (нагрузочный резистор отключен). Это говорит о том, что подтягивающие резисторы предназначены, прежде всего, для удержания неиспользуемых штырей от плавания, а не для обеспечения подтягивающего резистора для условно подключенных входов (например, кнопок). Это предположение верно? Можно ли использовать для этого внутренние подтягивающие резисторы?

Библиотека технологий говорит следующее:

defparam IO_PIN_INST.PULLUP = 1'b0;
// By default, the IO will have NO pull up.
// This parameter is used only on bank 0, 1,
// and 2. Ignored when it is placed at bank 3

Означает ли это, что в банке 3 нет подтягивающих резисторов или просто они не могут быть повторно включены с помощью Verilog? Что произойдет, если я очищу этот бит в битовом потоке ASCII вручную? (Я бы попробовал это, но оценочная плата iCEstick не делает ни одного булавки на банке 3 доступным - совпадение? - и я не уверен, хочу ли я еще связываться с аппаратным обеспечением.)

Когда я использую вывод ввода / вывода в качестве выхода, бит IE не очищается, но функция входного вывода установлена ​​на PIN_INPUT. Какой эффект это имеет, и почему это сделано?

2 ответа

Решение

Поведение по умолчанию для неиспользуемых выводов ввода-вывода состоит в том, чтобы включить нагрузочные резисторы и отключить входное разрешение. На чипах iCE40 1k это означает, что IE_0 и IE_1 установлены, а REN_0 и REN_1 очищены в неиспользуемом тайле ввода-вывода. (На чипах 8 КБ IE_* имеет высокий активный уровень, то есть все биты очищаются в неиспользуемом тайле ввода-вывода на 8 КБ.)

icebox_explain по умолчанию скрывает тайлы с "неинтересным" содержимым. (Бежать icebox_explain -A отключить эту функцию.)

Это выглядит как arachne-pnr не устанавливает те биты для выводов ввода / вывода, которые недоступны в текущем пакете. Таким образом, вы получаете необычный битовый шаблон в некоторых тайлах ввода-вывода, которые содержат биты IE/REN для блоков ввода-вывода, не подключенных ни к одному выводу пакета.

Вот как выглядит "обычная" неиспользуемая плитка ввода-вывода в архитектуре 1k:

$ icebox_explain -mAt '1 0' example.asc
Reading file 'example.asc'..
Fabric size (without IO tiles): 12 x 16

.io_tile 1 0
  B0 ------------------
  B1 ------------------
  B2 ------------------
  B3 ------------------
  B4 ------------------
  B5 ------------------
  B6 ---+--------------
  B7 ------------------
  B8 ------------------
  B9 ---+--------------
 B10 ------------------
 B11 ------------------
 B12 ------------------
 B13 ------------------
 B14 ------------------
 B15 ------------------
IoCtrl IE_0
IoCtrl IE_1

Можно ли использовать для этого внутренние подтягивающие резисторы?

Да.

В записи библиотеки технологий для SB_IO не упоминается бит IE. Как это связано с настройками параметра PIN_TYPE?

когда D_IN_0 или же D_IN_1 от SB_IO связано с чем-то, то это подразумевает IE.

Когда я использую вывод ввода / вывода в качестве выхода, бит IE не очищается

Обратите внимание, что IE активен на низком уровне на 1 000 фишек и активен на высоком уровне на 8 000 фишек. Когда вы используете вывод ввода / вывода в качестве вывода только для выхода на устройстве 1k, тогда должен быть установлен соответствующий бит IE, в противном случае он должен быть очищен.

Я нашел объяснение, поэтому я делюсь им здесь для дальнейшего использования:

.io_tile 6 17
IoCtrl IE_1

Блок ввода-вывода 16 7 0 подключен к выводу в некоторых пакетах, но не в пакете TQFP.

.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1

Это соответствует блокам ввода / вывода 6 0 1 и 7 0 0 (выводы 49 и 50), в входные тракты которых подаются тактовые импульсы PLL PORTA и PORTB соответственно.

Другие вопросы по тегам