【问题标题】:Understanding the bitstream generated for iCE40 I/O tiles了解为 iCE40 I/O 块生成的比特流
【发布时间】:2017-02-23 18:55:52
【问题描述】:

当我使用 Yosys 和 arachne-pnr 合成一个空电路时,我得到一些不规则的位:

.io_tile 6 17
IoCtrl IE_1

.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1

这些也是迄今为止我可以生成的所有其他文件的一部分。由于未使用的 I/O tile 设置了两个 IE 位,因此我将其解读为:

  • 对于 IE/REN 块 6 17 0,启用输入缓冲区
  • 对于 IE/REN 模块 6 0 0,启用输入缓冲器并禁用上拉电阻
  • 对于 IE/REN 模块 6 0 1,启用输入缓冲器并禁用上拉电阻

但是,根据文档,没有 IE/REN 块 6 17 0。 这些位的含义是什么?如果块 6 17 0 的 IE 位由于该块不存在而未设置,那么为什么其他不存在的块的位也未设置?其他 IE/REN 块似乎对应于 I/O 块 6 0 1 和 7 0 0。这些块有什么作用,为什么它们总是配置为输入?

SB_IOtechnology library 条目没有提及 IE 位。和PIN_TYPE参数设置有什么关系?

当我使用 I/O 引脚作为输入时,设置 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

这是否意味着 bank 3 没有上拉电阻,或者仅仅意味着它们无法使用 Verilog 重新启用?如果我手动清除 ASCII 比特流中的那个比特会发生什么? (我会尝试这个,但 iCEstick 评估板无法访问 bank 3 上的任何引脚 - 巧合? - 我还不确定我是否想弄乱硬件。)

当我使用 I/O 引脚作为输出时,IE 位不会被清除,但输入引脚功能设置为 PIN_INPUT。这有什么影响,为什么这样做?

【问题讨论】:

    标签: yosys ice40


    【解决方案1】:

    未使用的 IO 引脚的默认行为是启用上拉电阻并禁用输入启用。在 iCE40 1k 芯片上,这意味着 IE_0 和 IE_1 已设置,而 REN_0 和 REN_1 在未使用的 IO 块中被清除。 (在 8k 芯片上,IE_* 为高电平有效,即在 8k 芯片上未使用的 IO 块中的所有位都被清除。)

    icebox_explain 默认隐藏具有“无趣”内容的图块。 (运行icebox_explain -A 禁用此功能。)

    看起来arachne-pnr 没有为当前封装中不可用的 IO 引脚设置这些位。因此,您会在一些 IO 块中获得一些不寻常的位模式,其中包含未连接到任何封装引脚的 IO 块的 IE/REN 位。

    这是 1k 架构上“正常”未使用的 IO 磁贴的样子:

    $ 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参数设置有什么关系?

    当来自SB_IOD_IN_0D_IN_1 连接到某个东西时,这意味着IE。

    当我使用 I/O 引脚作为输出时,IE 位没有被清除

    请注意,IE 在 1k 芯片上为低电平有效,在 8k 芯片上为高电平有效。当您在 1k 设备上使用 I/O 引脚作为仅输出引脚时,应设置相应的 IE 位,否则应清零。

    【讨论】:

    • 根据chipdb-1k.txt,I/O 块 6 0 1 和 7 0 0 不是未连接的;它们分别连接到 TQ144 引脚 49 (GBIN5/PIO2_01) 和 50 (GBIN4/PIO2_02),这在 iCEstick 上没有使用。 — bank 3 上的上拉电阻怎么样?为什么只输出管脚上的输入管脚功能设置为PIN_INPUT (IOB_<n> PINTYPE_0),IE位有什么作用?
    • 问题是关于 IE/REN 位而不是 IO 块。没有1:1的关系。请参阅 chipdb 文件中的 .ieren。另外:我无法回答“为什么”的问题:我还没有设计芯片。你得问问格子。
    【解决方案2】:

    我找到了解释,所以我在这里分享以供将来参考:

    .io_tile 6 17
    IoCtrl IE_1
    

    I/O 块 16 7 0 在某些封装中连接到引脚,但在 TQFP 封装中不连接。

    .io_tile 6 0
    IoCtrl REN_0
    IoCtrl REN_1
    

    这对应于 I/O 模块 6 0 1 和 7 0 0(引脚 49 和 50),它们的输入路径分别馈入 PLL PORTA 和 PORTB 时钟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多