【问题标题】:iCE40 IceStorm FPGA: Switchable Pullup on Bi-directional IO pinsiCE40 IceStorm FPGA:双向 IO 引脚上的可切换上拉
【发布时间】:2019-06-13 04:10:03
【问题描述】:

如何将可切换的上拉电阻添加到三态引脚?

icestudio 中有“Tri-State”和“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=禁用/关闭)。

如果这种行为是不可能的,是否有另一种方法(work-a-round)来获得可切换的引体向上?

【问题讨论】:

    标签: yosys


    【解决方案1】:

    在这里找到答案:https://discourse.tinyfpga.com/t/internal-pullup-in-bx/800/12

    一般的答案是; NO,不能添加。一些 FPGA 上有一些专用引脚(例如 UltraPlus 上的 2 个引脚)具有动态上拉控制。 SB_IO_I3C 原语支持它,例如授予https://github.com/cliffordwolf/icestorm/blob/master/icefuzz/tests/sb_io_i3c.v 除了这些引脚之外,所有其他引脚上的通用 IO 模块都没有用于上拉控制的输入。

    【讨论】:

      【解决方案2】:

      引脚的上拉由配置位流中的位决定,不能动态控制。在 Verilog 中,实例化的所有参数都必须是常量。 'pu' 因此必须计算为一个常数(1'b01'b1)。

      据我所知,您需要在 iCE40 系列 FPGA 外部添加可切换上拉电阻,使用两个引脚:

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

      【讨论】:

      • 当要求进行一轮工作时,我实际上是在考虑 Verilog 或 VHDL 构造。您提到的概念非常有趣-感谢您的提示。我会记下并考虑如何在我的情况下实现它...... ;)(我尝试使用 icestudio 在 Alhambra II 板上构建一个 arduino 等价物)
      • 只需稍作改动,您的工作循环还允许在上拉和下拉之间进行选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多