7系列selectio之IOBUF(一)
从本章开始将对7系列的IOBUF进行逐一介绍,在介绍之前首先说一下Xilinx的IOBUF是什么,有什么作用。
Xilinx的IOBUF是原语,放置在“Language Templates”里面,如下图大的分类分为IBUF、OBUF和IOBUF,也就是支持输入、输出和输入输出。
在每个大类里面又有很多细分项,例如下图IBUF里面包括了差分输入、单端输入以及带有不同配置选项的,例如斜率、终端、DCI等等以满足不同场合不同的I/O标准。
那么这些BUF的作用是什么呢?主要用于在Xilinx FPGA设计中处理输入和输出信号的电平转换和驱动。IOBUF可以接收来自外部设备的输入信号,并将其转换为FPGA内部逻辑所需的电平,同时还可以将FPGA内部逻辑生成的信号发送到外部设备。IOBUF支持各种输入和输出IO标准,如LVCMOS、SSTL、LVDS等。它具有适应不同电压电平的能力,并提供电流放大和终端匹配等功能,以确保信号的正确传输和兼容性。此外,IOBUF还提供了一些附加功能,如输入/输出的使能控制、上拉/下拉电阻配置以及抗噪声和抗干扰特性的设置。这些功能使得IOBUF非常灵活,能够适应不同的应用场景和接口要求。
总之当我们掌握了原语及约束,就可以使用不同的原语可以实现不同I/O标准信号输入与输出的适配。
1IBUF和IBUFG
IBUF和IBUFG是一样的,IBUF是针对于数据信号,IBUFG是针对于始终信号,但我们可以调用同一个引脚,由软件自动分配。而且我们也可以不加此约束,工具会自动给我加上,因为这个是必须的。
IBUF IBUF_inst (
.O(O), // 1-bit output: Buffer output
.I(I) // 1-bit input: Buffer input
);
2IBUF_IBUFDISABLE
这个原语就不能靠工具自动加了,如果要使用需要我们手动添加,IBUF_IBUFDISABLE是一种带有禁用端口的输入缓冲器原语,用于将输入信号引入FPGA内部。禁用端口可以用作额外的节能功能,当输入信号未被使用时,可以禁用输入缓冲器以实现电源的节省。通过禁用输入缓冲器,可以减少不必要的功耗消耗,提高系统的能效。
在调用原语时,可以通过“USE_IBUFDISABLE”来使能禁用功能,默认时使能的。
“IBUF_LOW_PWR”是为TURE表示使能低功耗允许,对于速率较低的,例如Xilinx建议的1.6Gbps,则应该使能低功耗。“IOSTANDARD”是添加I/O标准的约束,这个可以在xdc中以约束语句set_property添加也可以在这里添加,例如约束为LVCMOS18,则可写为LVCMOS18,
IBUF_IBUFDISABLE #(
.IBUF_LOW_PWR("TRUE"), // Low power ("TRUE") vs. performance ("FALSE") for referenced I/O standards
.IOSTANDARD("DEFAULT"), // Specify the input I/O standard
.USE_IBUFDISABLE("TRUE") // Set to "TRUE" to enable IBUFDISABLE feature
) IBUF_IBUFDISABLE_inst (
.O(O), // Buffer output
.I(I), // Buffer input (connect directly to top-level port)
.IBUFDISABLE(IBUFDISABLE) // Buffer disable input, high=disable
);
对于SSTL和HSTL标准使用该原语会很明显的降低静态功耗,因为他们是差分输入BUF的单端I/O会使用VREF,会比LVCMOS这类标准有更高的静态功耗,所以使能USE_IBUFDISABLE有助于降低静态功耗。
3IBUFDS and IBUFGDS
这个没啥可说的,如下所示,差分输入缓冲器,
“IBUF_LOW_PWR”是为TURE表示使能低功耗允许,对于速率较低的,例如Xilinx建议的1.6Gbps,则应该使能低功耗。“IOSTANDARD”是添加I/O标准的约束,这个可以在xdc中以约束语句set_property添加也可以在这里添加,例如约束为LVDS_25,则可写为LVDS_25。“DIFF_TERM”表示添加差分终端,Xilinx内置了100Ω的终端电阻,对于没有外接终端阻抗的,需要选为TRUE,以保证阻抗匹配。支持的IO标准有 LVDS 、LVDS_25 、MINI_LVDS_25 、PPDS_25和RSDS_25。
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(O), // Buffer output
.I(I), // Diff_p buffer input (connect directly to top-level port)
.IB(IB) // Diff_n buffer input (connect directly to top-level port)
);
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我