首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解为iCE40 I/O块生成的比特流

理解为iCE40 I/O块生成的比特流
EN

Stack Overflow用户
提问于 2017-02-23 18:55:52
回答 2查看 425关注 0票数 3

当我用Yosys和arachne合成一个空电路时,我得到了一些不规则的比特:

代码语言:javascript
复制
.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块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_IO没有提到IE位。它与PIN_TYPE参数设置有什么关系?

当我使用一个I/O引脚作为输入,任位被设置(拉上电阻禁用)。这表明,拉起电阻主要是为了防止未使用的引脚浮动,而不是为有条件连接的输入(例如按钮)提供拉出电阻。这个假设正确吗?为了这个目的,可以使用内部的拉起电阻吗?

技术图书馆说:

代码语言:javascript
复制
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

这是否意味着银行3没有拉电阻,或者仅仅是他们不能重新启用使用Verilog?如果我手动清除ASCII比特流中的位会发生什么?(我会尝试这样做,但iCEstick评估委员会并没有让3号银行的任何密码可以访问--这是巧合吗?--我还不确定自己是否想弄乱硬件。)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 14:04:26

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

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

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

在1k架构上,“正常”未使用的IO瓷砖是这样的:

代码语言:javascript
复制
$ 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参数设置有什么关系?

D_IN_0D_IN_1SB_IO连接到某物时,这就意味着IE。

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

请注意,IE在1k芯片上是活动低的,而在8k芯片上是活动高的。当您在1k设备上使用I/O引脚作为输出引脚时,应该设置相应的IE位,否则应该清除它。

票数 4
EN

Stack Overflow用户

发布于 2017-06-12 16:19:22

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

代码语言:javascript
复制
.io_tile 6 17
IoCtrl IE_1

I/O块16 7 0连接到某些包中的引脚,而不是在TQFP包中。

代码语言:javascript
复制
.io_tile 6 0
IoCtrl REN_0
IoCtrl REN_1

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42423960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档