当前位置: 首页 > news >正文

LVDS系列3:Xilinx的IOBUFDS原语

前面两节讲解了差分转单端的IBUFDS原语和单端转差分的OBUFDS原语,今天来讲一个同时带有两者功能的原语IOBUFDS;
前述的IBUFDS原语只能接收外部差分信号,此时连接管脚为input管脚,OBUFDS只能向外部输出差分信号,此时连接管脚为output管脚,但差分信号还有可能出现IO类型,也就是inout管脚,一对差分信号,可以输入,也可以输出,此时使用IBUFDS和OBUFDS就不能解决问题,需要使用到IOBUFDS原语;
如有一个典型的例子,DDR接口中的DQS数据选通信号,就是差分双向管脚DQS_P、DQS_N;
该信号为双向信号,因为该信号与DQ数据采集相关,当对DDR读取时,该信号由DRAM驱动,当向DDR写入时,该信号由内存控制器驱动;
且由于DDR通信的频率速率比较高,通常达几千Mbps,且数据选通信号需要用于8/16或更多数据信号线的捕获,所以需要其在传输过程中受的影响尽可能小信号尽可能稳定,所以使用抗干扰能力更强的差分信号则成了必要;
所以该信号就需要使用IOBUFDS这样的三态双向差分信号原语;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 IOBUFDS原语:
在这里插入图片描述
IOBUFDS为差分输入/输出缓存原语。 T 管脚上的逻辑高电平表示禁用输出缓存。
端口IO、IOB:双向端口,连接到焊盘上的双向差分信号;
端口I:原语的输入端口,接收FPGA内部数据变换后从IO和IOB输出;
端口O:原语的输出端口,IO和IOB接收数据转换后从O端口输出到FPGA内部;
端口T:原语的输入端口,控制原语的功能模式;

功能模式说明:
输入模式(T=1):
IO和IOB由外部设备驱动,作为差分输入信号。
内部逻辑将IO和IOB的差分值(IO - IOB)转换为单端信号输出至O。
例如,若IO=1且IOB=0,则O=1;若IO=0且IOB=1,则O=0,此时功能与IBUFDS一致。
若外部差分信号未驱动(高阻态),O可能保持前一次有效值或进入不定态(X),需通过外部约束或硬件设计避免此情况。
此时T=1,输出缓存被禁用,I到IO、IOB的路径关闭,原语的I端口输入任何值(无论0/1或是悬空)都不会对IO、IOB的电压状态造成任何影响;

输出模式(T=0):
I的单端信号被转换为差分信号,驱动到IO(与I同相)和IOB(与I反相)。
例如,若I=1,则IO=1且IOB=0;若I=0,则IO=0且IOB=1,此时功能与OBUFDS一致。
此时T=1,输出缓存启用,可以看到在原语的图中,IO、IOB到O的路径没有受到T端口开关的影响,此时O的输出来自IO、IOB,而IO、IOB的值此时来自于I,所以O值与I值相同。

 原语例化如下:
7系:
IOBUFDS #(
.DIFF_TERM(“FALSE”), // Differential Termination (“TRUE”/“FALSE”)
.IBUF_LOW_PWR(“TRUE”), // Low Power - “TRUE”, High Performance = “FALSE”
.IOSTANDARD(“BLVDS_25”), // Specify the I/O standard
.SLEW(“SLOW”) // Specify the output slew rate
) IOBUFDS_inst (
.O(O), // Buffer output
.IO(IO), // Diff_p inout (connect directly to top-level port)
.IOB(IOB), // Diff_n inout (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input, high=input, low=output
);

Ultrascale+系:
IOBUFDS IOBUFDS_inst (
.O(O), // 1-bit output: Buffer output
.I(I), // 1-bit input: Buffer input
.IO(IO), // 1-bit inout: Diff_p inout (connect directly to top-level port)
.IOB(IOB), // 1-bit inout: Diff_n inout (connect directly to top-level port)
.T(T) // 1-bit input: 3-state enable input
);

可以看到两个原语的端口一致,不过7系的原语同样比Ultrascale+系多几个参数,Ultrascale+的参数如前述,被整合到约束部分;
7系例化里可以看到参数DIFF_TERM、IBUF_LOW_PWR在IBUFDS部分讲解过,SLEW在OBUFDS部分讲解过,IOSTANDARD则是两节里都讲过,这里不再赘述;
不过这里可以看到模板默认的电平标准是BLVDS,BLVDS 仅在 HR I/O bank 中可用,并且要求 VCCO 电压电平为 2.5V。 IOSTANDARD 称为BLVDS_25,在下一讲将简单汇总下FPGA中常见的差分电平标准。

 IOBUFDS原语仿真:
测试模块:
module top_7series_iobufds(
input wire clk,
input wire rst,
inout wire PAD_IO,
inout wire PAD_IOB,
input wire iob_t,
input wire iob_in,
output wire iob_out
);

IOBUFDS #(
.DIFF_TERM(“FALSE”), // Differential Termination (“TRUE”/“FALSE”)
.IBUF_LOW_PWR(“TRUE”), // Low Power - “TRUE”, High Performance = “FALSE”
.IOSTANDARD(“BLVDS_25”), // Specify the I/O standard
.SLEW(“SLOW”) // Specify the output slew rate
) IOBUFDS_inst (
.O(iob_out), // Buffer output
.IO(PAD_IO), // Diff_p inout (connect directly to top-level port)
.IOB(PAD_IOB), // Diff_n inout (connect directly to top-level port)
.I(iob_in), // Buffer input
.T(iob_t) // 3-state enable input, high=input, low=output
);

endmodule

testbench:
这里将原语的T端口每隔1000ns切换一次,且设置50ns变化一次的两个随机值分别赋值给端口IO/IOB和端口I;然后仿真查看根据T端口的变化,原语的各端口输入输出如何变化;
module tb;
reg clk;
reg rst;
reg data1;
reg data2;
wire PAD_IO;
wire PAD_IOB;
reg iob_t;
wire iob_in;
wire iob_out;
wire pad_dio;
wire pad_diob;

initial begin
clk = 0;
rst = 1;
#100
rst = 0;
end

always #50 clk = ~clk;

initial begin
data1 = 0;
data2 = 0;
while(1)begin
#50
data1 = $random();
data2 = $random();
end
end

initial begin
iob_t = 0;
while(1)begin
#1000
iob_t = ~iob_t;
end
end

assign iob_in = iob_t ? 1’bz : data1;
assign {PAD_IO,PAD_IOB} = iob_t ? {data2,~data2} : 2’bz;
assign pad_dio = PAD_IO;
assign pad_diob = PAD_IOB;

top_7series_iobufds inst_top_7series_iobufds(
.clk (clk),
.rst (rst),
.PAD_IO (PAD_IO),
.PAD_IOB (PAD_IOB),
.iob_t (iob_t),
.iob_in (iob_in),
.iob_out (iob_out)
);

endmodule
 仿真结果:
在这里插入图片描述
仿真波形如图所示:
为方便描述,上图中4根黄线将波形分为4个区域,区域1/3的iob_t设置为0,表示原语处于输出模式,区域2/4的iob_t设置为1,表示原语处于输入模式;

可以看到:

区域1/3,输出模式下,iob_in输入的值将被转换为差分的同相的PAD_IO和反相的PAD_IOB输出,可以看到在此范围内,PAD_IO输出值与iob_in相同,PAD_IOB输出值与iob_in相反;
此时iob_out的值与iob_in相同;

区域2/4,输入模式下,PAD_IO和PAD_IOB将作为输入,转换后端口O输出,可以看到在此范围内,端口O输出与PAD_IO相同,与PAD_IOB相反;
而且此时iob_in输入接口给了一个悬空的高阻状态,但是可以看到图中所示,这个iob_in的高阻输入也不会对PAD_IO和PAD_IOB产生任何影响;

相关文章:

LVDS系列3:Xilinx的IOBUFDS原语

前面两节讲解了差分转单端的IBUFDS原语和单端转差分的OBUFDS原语,今天来讲一个同时带有两者功能的原语IOBUFDS; 前述的IBUFDS原语只能接收外部差分信号,此时连接管脚为input管脚,OBUFDS只能向外部输出差分信号,此时连接…...

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...

Django-ORM-select_related

Django-ORM-select_related 作用使用场景示例无 select_related 的查询有 select_related 的查询 如何理解 "只发起一次查询,包含所有相关作者信息"1. select_related 的工作原理2. 具体示例解析3. 为什么只发起一次查询 数据库中的books量巨大&#xff0…...

蓝桥杯 k倍区间

题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1​,A2​,⋯AN​,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi​,Ai​1,⋯Aj​ ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...

数据结构(蓝桥杯常考点)

数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...

Tomcat+Servlet运行后出现404错误解决方案

TomcatServlet运行后出现404错误解决方案 一、错误效果复现 后续的解决方案,仅仅针对我遇到的情况。对不能涵盖大部分情况感到抱歉。 二、错误分析 先看看源代码? package com.example.secondclass.Servlet; import java.io.*; import jakarta.servl…...

论文摘要生成器:用TextRank算法实现文献关键信息提取

我们基于python代码,使用PyQt5创建图形用户界面(GUI),同时支持中英文两种语言的文本论文文献关键信息提取。 PyQt5:用于创建GUI应用程序。 jieba:中文分词库,用于中文文本的处理。 re&#xff…...

Flutter中网络图片加载显示Image.network的具体用法

Image.network的具体用法 Image.network 是 Flutter 中用于从网络加载图片的便捷方法。它基于 NetworkImage,可以快速加载并显示网络图片。以下是 Image.network 的具体用法和常见参数说明。 基本用法 最简单的用法是提供一个图片的 URL: dart 复制 …...

【HarmonyOS Next】鸿蒙应用故障处理思路详解

【HarmonyOS Next】鸿蒙应用崩溃处理思路详解 一、崩溃问题发现后定位 1. 崩溃现象: 常见的崩溃问题表现为,应用操作后白屏闪退,或者应用显示无响应卡死。 2.定位问题: 发现崩溃后,我们首先需要了解复现步骤&#x…...

狮子座大数据分析(python爬虫版)

十二星座爱情性格 - 星座屋 首先找到一个星座网站,作为基础内容,来获取信息 网页爬取与信息提取 我们首先利用爬虫技术(如 Python 中的 requests 与 BeautifulSoup 库)获取页面内容。该页面(xzw.com/astro/leo/&…...

QT系列教程(18) MVC结构之QItemSelectionModel模型介绍

视频教程 https://www.bilibili.com/video/BV1FP4y1z75U/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 QItemSelectionModel Qt的MVC结构支持多个View共享同一个model,包括该model的选中状态等。我们可以通过设置QItemSelectionModel,来更改View的选…...

git设置本地仓库和远程仓库

设置本地仓库和远程仓库是使用Git进行版本控制的基本操作。以下是详细步骤: 创建本地仓库 初始化本地仓库: 打开命令行工具(如Terminal或Git Bash)。导航到你希望创建Git仓库的项目文件夹。运行以下命令来初始化一个新的Git仓库&…...

openharmony中HDF驱动框架源码梳理-驱动加载流程

要想大概了解一个公司,我们可能只需要知道它的运行逻辑即可,例如我们只需要知道它有财务有研发有运营等,财务报销、研发负责产品等即可,但是如果想深入具体的了解的话我们就要了解都有什么部门(对象)、各部门都包含哪些职责(对象方…...

golang 高性能的 MySQL 数据导出

需求导出方式对比方案1:快照导出(耗时:1.5s)方案2: 偏移分页(耗时:4s)方案 3:普通分页(耗时:4min40s) 需求 导出 MySQL 数据 分析: 一次性 select 大量数据带来的问题 性能问题: 数据库负载:大量数据查询会增加数据库的CPU、内存和I/O负担&#xff…...

31-判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#x…...

leetcode日记(95)将有序数组转换为二叉搜索树

很简单,感觉自己越来越适应数据结构题目了…… /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : va…...

使用SSH密钥连接本地git 和 github

目录 配置本地SSH,添加到github首先查看本地是否有SSH密钥生成SSH密钥,和邮箱绑定将 SSH 密钥添加到 ssh-agent:显示本地公钥*把下面这一串生成的公钥存到github上* 验证SSH配置是否成功终端跳转到本地仓库把http协议改为SSH(如果…...

C语言基础之【内存管理】

C语言基础之【内存管理】 存储类型作用域普通局部变量静态局部变量普通全局变量静态全局变量全局函数和静态函数 内存布局内存分区存储类型与内存四区内存操作函数memset()memcpy()memmove()memcmp() 堆区内存分配和释放malloc()free() 内存分区代码分析返回栈区地址返回data区…...

C盘清理技巧分享:释放空间,提升电脑性能

目录 1. 引言 2. C盘空间不足的影响 3. C盘清理的必要性 4. C盘清理的具体技巧 4.1 删除临时文件 4.2 清理系统还原点 4.3 卸载不必要的程序 4.4 清理下载文件夹 4.5 移动大文件到其他盘 4.6 清理系统缓存 4.7 使用磁盘清理工具 4.8 清理Windows更新文件 4.9 禁用…...

每天一道算法题【蓝桥杯】【两两交换链表中的节点】

思路 本质问题可以分成若干个子问题 即把前两个链表交换,并与后面的链表相连 故实现函数功能调用自身递归即可 #define _CRT_SECURE_NO_WARNINGS 1 struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), nex…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...