了解为 iCE40 I/O 块生成的比特流
Understanding the bitstream generated for iCE40 I/O tiles
当我使用 Yosys 和 arachne-pnr 合成一个空电路时,我得到了一些不规则的位:
.io_tile 6 17
IoCtrl IE_1
.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1
这些也是我目前可以生成的所有其他文件的一部分。由于未使用的 I/O 磁贴设置了两个 IE 位,因此我将其解读为:
- 对于IE/REN块6 17 0,启用输入缓冲区
- 对于IE/REN block 6 0 0,输入缓冲器启用,上拉电阻禁用
- 对于IE/REN block 6 0 1,输入缓冲器使能,上拉电阻禁用
但是,根据文档,没有 IE/REN 块 6 17 0。
这些位的含义是什么?如果块 6 17 0 的 IE 位因为该块不存在而未设置,为什么其他不存在的块的位也未设置?其他IE/REN块似乎对应于I/O块6 0 1和7 0 0。这些块是做什么的,为什么它们总是配置为输入?
SB_IO
的 technology 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。这有什么作用,为什么要这样做?
未使用的 IO 引脚的默认行为是启用上拉电阻并禁用输入启用。在 iCE40 1k 芯片上,这意味着 IE_0 和 IE_1 被设置,REN_0 和 REN_1 在未使用的 IO 块中被清除。 (在 8k 芯片上,IE_* 为高电平有效,即在 8k 芯片上未使用的 IO 块中清除所有位。)
icebox_explain
默认情况下隐藏具有 "uninteresting" 内容的图块。 (运行 icebox_explain -A
禁用此功能。)
看起来arachne-pnr
没有为当前封装中不可用的IO引脚设置那些位。因此,您会在某些 IO 块中得到一些不寻常的位模式,这些块包含未连接到任何封装引脚的 IO 块的 IE/REN 位。
这是 "normal" 未使用的 IO 块在 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
Would it be ok to use the internal pull-up resistors for that purpose?
是的。
The technology library entry for SB_IO does not mention the IE bit. How is it related to the PIN_TYPE parameter settings?
当 SB_IO
中的 D_IN_0
或 D_IN_1
连接到某物时,这意味着 IE。
When I use an I/O pin as an output, the IE bit isn't cleared
请注意,IE 在 1k 芯片上为低电平有效,在 8k 芯片上为高电平有效。当您在 1k 设备上将 I/O 引脚用作仅输出引脚时,应设置相应的 IE 位,否则应将其清除。
我找到了解释,所以我在这里分享以供将来参考:
.io_tile 6 17
IoCtrl IE_1
I/O block 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 时钟分别馈入其输入路径。
当我使用 Yosys 和 arachne-pnr 合成一个空电路时,我得到了一些不规则的位:
.io_tile 6 17
IoCtrl IE_1
.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1
这些也是我目前可以生成的所有其他文件的一部分。由于未使用的 I/O 磁贴设置了两个 IE 位,因此我将其解读为:
- 对于IE/REN块6 17 0,启用输入缓冲区
- 对于IE/REN block 6 0 0,输入缓冲器启用,上拉电阻禁用
- 对于IE/REN block 6 0 1,输入缓冲器使能,上拉电阻禁用
但是,根据文档,没有 IE/REN 块 6 17 0。 这些位的含义是什么?如果块 6 17 0 的 IE 位因为该块不存在而未设置,为什么其他不存在的块的位也未设置?其他IE/REN块似乎对应于I/O块6 0 1和7 0 0。这些块是做什么的,为什么它们总是配置为输入?
SB_IO
的 technology 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。这有什么作用,为什么要这样做?
未使用的 IO 引脚的默认行为是启用上拉电阻并禁用输入启用。在 iCE40 1k 芯片上,这意味着 IE_0 和 IE_1 被设置,REN_0 和 REN_1 在未使用的 IO 块中被清除。 (在 8k 芯片上,IE_* 为高电平有效,即在 8k 芯片上未使用的 IO 块中清除所有位。)
icebox_explain
默认情况下隐藏具有 "uninteresting" 内容的图块。 (运行 icebox_explain -A
禁用此功能。)
看起来arachne-pnr
没有为当前封装中不可用的IO引脚设置那些位。因此,您会在某些 IO 块中得到一些不寻常的位模式,这些块包含未连接到任何封装引脚的 IO 块的 IE/REN 位。
这是 "normal" 未使用的 IO 块在 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
Would it be ok to use the internal pull-up resistors for that purpose?
是的。
The technology library entry for SB_IO does not mention the IE bit. How is it related to the PIN_TYPE parameter settings?
当 SB_IO
中的 D_IN_0
或 D_IN_1
连接到某物时,这意味着 IE。
When I use an I/O pin as an output, the IE bit isn't cleared
请注意,IE 在 1k 芯片上为低电平有效,在 8k 芯片上为高电平有效。当您在 1k 设备上将 I/O 引脚用作仅输出引脚时,应设置相应的 IE 位,否则应将其清除。
我找到了解释,所以我在这里分享以供将来参考:
.io_tile 6 17
IoCtrl IE_1
I/O block 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 时钟分别馈入其输入路径。