【问题标题】:Understanding the SB_IO primitive in Lattice ICE40理解 Lattice ICE40 中的 SB_IO 原语
【发布时间】:2020-03-31 18:59:43
【问题描述】:

我正在玩cliffordwolf/picorv32,但在理解picosoc (link to source) 中的以下sn-p 时遇到了一些问题:

SB_IO #(
    .PIN_TYPE(6'b 1010_01),
    .PULLUP(1'b 0)
) flash_io_buf [3:0] (
    .PACKAGE_PIN({flash_io3, flash_io2, flash_io1, flash_io0}),
    .OUTPUT_ENABLE({flash_io3_oe, flash_io2_oe, flash_io1_oe, flash_io0_oe}),
    .D_OUT_0({flash_io3_do, flash_io2_do, flash_io1_do, flash_io0_do}),
    .D_IN_0({flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di})
);

我在Lattice iCE40 technology library documentation 中找到了SB_IO 原语的图形描述,但我仍然无法理解它的用途,因为它太复杂了,我无法解释。关于原语有another question,在阅读后我认为它会创建某种双向连接,但我不明白这与使输出引脚“三态”有什么关系。

我希望能对SB_IO 单元在此特定配置下的效果进行高级描述。哪个引脚连接到哪个引脚?哪些是输入,哪些是输出?实例化这个单元格的目的是什么?

【问题讨论】:

  • 唯一没有显示 4 个 Verilog 引脚与您提供链接的 PDF 的 P.87 上的 SB IO 焊盘之间的现成相关性的是连接到焊盘引脚的内容(flash_io_buf [3:0])。 .PIN_TYPE 描述了多路复用器的编程方式。没有上拉,并且锁存器似乎未使用。这里有编程问题还是您在错误的网站上询问硬件问题?
  • 嗨@user1155120,我想问一下单元实例化计数作为编程问题的影响?如果您有兴趣,这里是背景:我刚刚学习了 Verilog 的基础知识,但从未见过像SB_IO 这样的 FPGA“原语”。我搞砸这个的原因是我的 FPGA 课程的讲师鼓励我们参加 FPGA 竞赛(这是有道理的:这将是一种很好的学习方式),为此,我需要将 picosoc 合并到我的设计。
  • @user1155120 另外,“焊盘引脚”flash_io_buf [3:0] 以后不再使用,所以这个实例化一定有某种副作用?
  • 它们是 IO 引脚。

标签: verilog fpga lattice yosys ice40


【解决方案1】:

之所以使用此实例,是因为当时 Yosys 在 Verilog 中对三态的支持不够好,但现在可以,但一般来说,FPGA 工具链中的三态支持并不总是受信任的。

可以用下面的通用 Verilog 代替,从 0 到 4 重复 4 次。

assign flash_io0 = flash_io0_oe ? flash_io0_do : 1'bz;
assign flash_io0_di = flash_io0;

【讨论】:

  • 谢谢,这真的很有帮助!我想知道@user1155120 上面提到的flash_io_buf 是什么。例如,flash_io_buf[0] 在推理/实例化之后是 flash_io0 的别名吗?
  • flash_io_buf[0] 是 SB_IO instance 的名称,与电线或管脚无关
猜你喜欢
  • 2021-07-10
  • 2019-10-17
  • 2019-06-16
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多