iCE40 IceStorm FPGA:双向IO引脚上的可切换上拉

时间:2019-06-09 19:52:58

标签: yosys

如何为三态引脚添加可切换的上拉?

icestudio中有“三态”和“上拉”块。我想将它们组合成一个“具有上拉的三态”块,该块具有另一个允许启用或禁用上拉的输入(当然,如果三态处于输入模式)。

仅使用信号('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 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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