目录
前言:
主要参考 Xilinx 官方文档《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL Designs》UG768 (v14.7) October 2, 2013。
一、原语使用说明
OBUFDS 是支持低压差分信号的单输出缓冲器,用于将单端信号转换为差分信号,适用于需要差分信号驱动的应用场景,如高速数据传输和时钟信号传递。
它的输出表示为两个不同的端口(O和OB),一个被视为"主端口",另一个被视为"从端口",两端口电平极性相反。
端口示意图如下:
逻辑表和端口描述:
I
: 单端输入信号;O
: 差分输出信号正端;OB
: 差分输出信号负端OBUFDS
将输入信号I
转换为差分对,输出O
和OB
。当输入I
为高电平时,输出O
和OB
会形成一对极性相反的差分信号O=1、OB=0;当输入I
为低电平时,O=0、OB=1。
二、原语实例化代码模版
打开Vivado左侧导航栏中的"Language Templates",搜索"IBUFDS",找到可直接调用的原语模块实例化代码
参数说明:
-IOSTANDARD
指定输入/输出电平标准
。
"DEFAULT"
: 使用 FPGA 工具默认的 I/O 标准。其他值: 如:**
"LVCMOS33"
、"LVDS_25"
、"HSTL_I"
**等根据具体的应用需求选择适当的 I/O 标准。**
-SLEW 指定输出驱动程序的转换速率。它
**影响信号的上升和下降速度,即信号从低电平到高电平和从高电平到低电平的过渡速率。
"SLOW"
: 输出信号的转换速率 较慢,有助于减少电磁干扰(EMI),适用于较低频率或需要降低 EMI 的应用。"FAST"
: 输出信号的转换速率较快,提供更高的速度,适用于高速信号传输,但可能会增加 EMI。
三、使用示例
1.设计文件代码
// OBUFDS: Differential Output Buffer
module example_obufds (
input wire I, // 单端输入信号
output wire O, // 差分输出信号正端
output wire OB // 差分输出信号负端
);
// OBUFDS 实例化
OBUFDS #(
.IOSTANDARD("DEFAULT"), // 指定输出 I/O 标准
.SLEW("SLOW") // 指定输出斜率为慢
) OBUFDS_inst (
.O (O), // 差分输出信号正端
.OB(OB), // 差分输出信号负端
.I (I) // 单端输入信号
);
endmodule
2.仿真文件代码
`timescale 1ns / 1ps
module tb_example_obufds();
// 测试平台中的信号定义
reg data_in; // 单端输入信号
wire data_out_p; // 差分输出信号正端
wire data_out_n; // 差分输出信号负端
// 实例化 example_obufds 模块
example_obufds uut (
.data_in(data_in),
.data_out_p(data_out_p),
.data_out_n(data_out_n)
);
// 初始块,用于生成测试信号
initial begin
// 初始化信号
data_in = 0;
// 生成测试信号
#10;
data_in = 1;
#10;
data_in = 0;
#10;
data_in = 1;
#10;
data_in = 0;
#10;
data_in = 1;
#10;
data_in = 0;
#10;
data_in = 1;
#10;
$stop; // 停止仿真
end
endmodule