nal*_*zok 2 verilog fpga lattice yosys ice40
我正在玩cliffordwolf/picorv32,并且在理解以下代码片段picosoc(源代码链接)时遇到一些问题:
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})
);
Run Code Online (Sandbox Code Playgroud)
SB_IO我在Lattice iCE40 技术库文档中找到了该原语的图形描述,但我仍然无法理解它的用途,因为它对我来说太复杂了,无法解释。关于原语还有另一个问题,读完后我认为它创建了某种双向连接,但我无法理解这与使输出引脚“三态”有何关系。
我希望能够对这种特定配置下的电池效果进行高级描述SB_IO。哪个引脚连接到哪个引脚?哪些是输入,哪些是输出?实例化这个单元格的目的是什么?
使用此实例是因为当时 Yosys 对 Verilog 中的三态支持不够好,现在可以了,但一般来说 FPGA 工具链中的三态支持并不总是值得信赖。
它可以用以下通用 Verilog 替换,从 0 到 4 重复 4 次。
assign flash_io0 = flash_io0_oe ? flash_io0_do : 1'bz;
assign flash_io0_di = flash_io0;
Run Code Online (Sandbox Code Playgroud)