了解 Lattice ICE40 中的 SB_IO 原语
Understanding the SB_IO primitive in Lattice ICE40
我正在玩 cliffordwolf/picorv32 and am having some problem understanding the following snippet in picosoc
(link to source):
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, but I still cannot understand its purpose because it's too complex for me to interpret. There is 中找到了关于原语的 SB_IO
原语的图形描述,阅读后我认为它创建了某种双向连接,但我不明白那是怎么回事与使输出引脚"tristated".
有关
如果能对 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;
我正在玩 cliffordwolf/picorv32 and am having some problem understanding the following snippet in picosoc
(link to source):
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, but I still cannot understand its purpose because it's too complex for me to interpret. There is SB_IO
原语的图形描述,阅读后我认为它创建了某种双向连接,但我不明白那是怎么回事与使输出引脚"tristated".
如果能对 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;