iCE40 IceStorm FPGA: переключаемое подтягивание на двунаправленных выводах ввода-вывода - PullRequest
1 голос
/ 09 июня 2019

Как я могу добавить переключаемое подтягивание к выводу Tri-State?

В icestudio есть блоки "Tri-State" и "Pull-Up".Я хочу объединить их в блок «Tri-State with Pull-Up», который имеет другой вход, который позволяет включать или отключать подтягивание (если, конечно, три-состояние находится в режиме ввода).

Просто использование сигнала ('pu') вместо константы, как показано здесь:

  SB_IO #(
      .PIN_TYPE(6'b1010_01),
      .PULLUP(pu)
  ) io_pin (
      .PACKAGE_PIN(pin),
      .OUTPUT_ENABLE(oe),
      .D_OUT_0(din),
      .D_IN_0(dout)
  );

приводит к ошибке непостоянного значения и не синтезирует.

Это должно синтезировать итем самым предоставьте еще один вход 'pu', который позволяет установить состояние подтягивания (1 = включено / включено или 0 = отключено / выключено).

Если такое поведение невозможно, есть ли другой способ(обходной), чтобы получить переключаемые подтягивания?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Нашел ответ здесь: https://discourse.tinyfpga.com/t/internal-pullup-in-bx/800/12

Общий ответ: НЕТ, это не может быть добавлено. На некоторых FPGA есть несколько выделенных контактов (например, 2 на UltraPlus), которые имеют динамическое управление подтягиванием. Примитив SB_IO_I3C поддерживает его, например, https://github.com/cliffordwolf/icestorm/blob/master/icefuzz/tests/sb_io_i3c.v Помимо этих выводов общий блок ввода-вывода на всех остальных выводах не имеет входа для управления подтягиванием.

0 голосов
/ 11 июня 2019

Подтягивание вывода определяется битом в битовом потоке конфигурации и не является динамически управляемым.В Verilog все параметры экземпляра должны быть константами.Таким образом, 'pu' должен быть постоянным (1'b0 или 1'b1).

Насколько я вижу, вам нужно будет добавить переключаемый внешний подтягивающий элемент к вашей FPGA семейства iCE40, используя два контакта:

pu -----|>---+
             |
1'b1 -------|>---[pin]-----+
                           |
oe -----|>---+            |R| 4.7k resistor or other value
             |             |
dout -------|>-+-[pin] ----+
               |
din --------<|-+
...