xilinx原语及bank简介

  Xlinx相关原语讲解导航页面,想要了解更过原语,可以点击该链接跳转。


  在此之前我对原语的理解就跟IP核一样,只是更直接的调用底层组件,事实也确实如此,也没有使用过原语,全部通过IP手册然后调用相关IP即可,比如锁相环,FIFO,FIR,FFT,ROM,RAM这些常用IP。

  但此次在编写HDMI接口驱动的时候,需要将单沿采样信号变为双沿采样的信号输出,还需要把单端信号转换为差分信号输出。实现这些功能可以调用SelectIO的IP,但是这个IP包含IDDR、ODDR、IDELAYE2等很多功能,单独调用个别功能还是比较麻烦。

  此时使用原语就可以只调用需要的组件,不需要去考虑其余组件参数设置,就方便很多,借助此次机会就对IDDR、ODDR、IDELAYE2、ODELAYE2、IDELAYCRTL、ISERDESE、OSERDESE等几个原语做了简要了解,并对原语的各个模式进行了仿真,本文最初是介绍IDDR的,但在介绍IDDR这些原语之前,还需要了解一下7系列FPGA bank的分类和区别,所以就有了本文。

1、什么是原语

  原语(Primitive)是Xilinx针对其器件特征开发的一系列常用模块的名称,涵盖了FPGA开发过程中的常用领域,方便用户直接调用FPGA的底层组件。

  Xilinx FPGA的底层组件分为10类,计算组件、IO端口组件、寄存器/锁存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、slice/CLB组件以及G-tranceiver,相应的原语也分为10类。

  举个例子,比如把FPGA的100MHz时钟信号转换为200MHz时钟信号使用,第一时间肯定想到使用锁相环进行倍频,然后就去调用锁相环的一个IP核,IP核的底层再去调用时钟组件的原语实现倍频。如果对锁相环的原语足够熟悉,那么用户就可以直接调用原语,省去中间Vivado/ise生成IP核的步骤,Vivado运行速度是很慢的,从而节省更多时间。

  一个稍微复杂点的IP核包含参数很多的,只是常用的配置就那么几个,比如锁相环IP常用参数就配置输入时钟频率,输出时钟频率、相位、占空比就行了,但实际上这个IP核还有很多参数没有配置,只是使用了默认参数而已。在调用原语时,通常也只需要关注常用的参数配置即可,但是第一次使用相关原语,还是推荐查看手册,了解每个参数的含义,将参数使用方式整理,便于后续灵活使用。

  对原语的调用可以理解为调用相同组件的IP。

  由于后续HDMI、千兆网相关接口需要用到一些原语,所以最近将相关原语手册(UG471)进行整理、仿真,便于后续使用,涉及原语有IDDR、ODDR、IDELAY、ODELAY、ISERDESE、OSERDESE等。这些原语都属于IO组件的原语,IO组件的原语如下表1所示。

表1 IO组件的原语
原语功能
BUFIOIO本地时钟缓存
DCIRESERFPGA配置成功后DCI状态机的复位信号
IBUFIO单端口输入缓存
IBUFDSIO差分端口输入缓存
IBUFG时钟专用引脚单端输入缓存
IBUFGDS时钟专用引脚差分输入缓存
IDDR双边沿数据输入寄存器
IDELAY输入延迟组件
IDELAYCTRL延迟组件控制模块
IOBUF单端口双向缓冲器
IOBUFDS差分端口双向缓冲器
ISERDES串行输入转并行
KEEPER双向端口监控结构
OBUFIO单端口输出缓冲
OBUFT三态输出缓冲器
OBUFDS单端转差分输出
OBUFTDS差分三态输出缓冲
ODDR双边沿输出寄存器
OSERDES并行输出转单端
PULLDOWN输入端寄存器下拉至GND
PULLDOUP输入端寄存器上拉至VCC

2、zynq 7000系列bank分布

  xilinx7系列FPGA主要包括:Spartan®-7、Artix®-7、Kintex®-7、Virtex®-7,其性能/密度/价格也随着系列的不同而提升。S7、A7、K7、V7的实际工艺不同,又构成了不同的FPGA系列,如图1所示。
在这里插入图片描述

图1 Xilinx FPGA架构

  常见的zynq 7000就是采用28nm工艺生产的,如图2所示,该系列只有A7和K7两种,zynq 7030及以上的PL是K7,zynq 7020及以下都是A7。

在这里插入图片描述

图2 zynq 7000资源概括

  Xilinx的FPGA bank主要分为三类,而zynq 7000系列只有 HR(最大电压支持3.3V)和HP(最大电压支持1.8V) 两种,HP的性能会比HR强,电压范围更窄。

  下面来看下zynq 7000各个型号的bank类型,如图3所示,为zynq7010的bank类型图,PL部分只有两个HR类型的bank。

在这里插入图片描述

图3 XC7Z010 和 XA7Z010 的Bank

  图4是zynq 7015的bank类型图,PL部分包含三个HR bank和一个高速收发器GTP bank,可以用于万兆以太网和PCIE的数据收发。

在这里插入图片描述

图4 XC7Z015 Bank

  图5是zynq 7020的bank类型图,PL部分包括四个HR bank,没有高速收发器相关的bank。

在这里插入图片描述

图5 XC7Z020、XA7Z020、XQ7Z020 Bank

  图6是zynq 7030的bank类型图,zynq7030属于K7系列,PS部分与前面的zynq都是一样的,PL部分有2个HR bank,还有3个HP bank,最后包括一个GTX的高速收发器bank。GTX最大速率接近GTP最大速率的2倍,提升比较明显。

在这里插入图片描述

图6 XC7Z030,、XA7Z030、XQ7Z030 Bank

  图7是zynq 7035、zynq 7045、zynq 7100的bank类型图,这几个芯片的区别在于逻辑资源的多少不同,bank类型一致,都包含5个HR bank,三个HP bank,四个高速收发器的bank。

在这里插入图片描述

图7 XC7Z035,、XC7Z045、XC7Z100 Bank

  通过上面几张图可知,A7系列只有HR bank,而K7有HP bank,还会包含高速收发器bank。

3、Xilinx 7系列的HR BANK与HP BANK

  A7只有高范围(HR) I/O bank,支持更广泛的I/O电平标准,最高支持3.3V,而K7有高性能(HP) I/O bank,旨在满足高速内存和其他电压高达1.8V的芯片间接口的性能, 表2是HR和HP I/O Bank中支持的功能。除逻辑资源不同外,另外的区别在于高速收发器的最大速率不同,A7的高速收发器是GTP,速率范围500Mb/s6.6Gb/s,因此A7无法实现万兆网,而K7高速收发器是GTX,速率范围500Mb/s12.5Gb/s,能够实现万兆网的收发速率。

表2 HR和HP I/O Bank中支持的功能
FeatureHP I/O BanksHR I/O Banks
3.3V I/O标准不支持支持
2.5V I/O 标准不支持支持
1.8V I/O 标准支持支持
1.5V I/O 标准支持支持
1.35V I/O 标准支持支持
1.2V I/O 标准支持支持
LVDS 标准支持支持
24ma驱动的LVCOMS和LVTTL不支持支持
VCCAUX_IO 电源轨支持不支持
数控阻抗 (DCI) 和 DCI 级联支持不支持
内部参考电压支持支持
内部差分终端 (DIFF_TERM)支持支持
IDELAY支持支持
ODELAY支持不支持
IDELAYCTRL支持支持
ISERDES支持支持
OSERDES支持支持
ZHOLD_DELAY不支持支持

  注意上表中HR bank是不支持ODELAY原语的,没有相应的硬件支持。

  除某些例外,每个I/O Bank包含50个SelectIO引脚,每个bank最末端的两个引脚只能作为单端I/O标准使用,其余48个引脚可用于单端或差分标准,使用两个SelectIO引脚组合在一起作为差分 (P/N) 对。每个SelectIO资源都包含输入、输出和三态驱动程序。

  图8是HP bank与HR bank的IO模块,其中PAD是FPGA的金属管脚,IOB是输入、输出引脚的控制模块。FPGA的外部信号通过PAD进入FPGA,然后经过IOB,可能会经过IDELAY2延迟,进入ILOGICE2进行寄存或者双沿转单沿的处理,最后给FPGA内部。输出信号先在OLOGICE2进行寄存或者单沿转双沿信号,然后可能经过ODELAY2延时处理后输出到IOB模块,最后通过PAD引脚输出。

  IDELAY2是输入数据的延时模块,可以调用原语实现,对于并行数据,可能信号的PCB走线并没有做等长处理,导致并行数据不同位到达管脚的延迟时间不同,此时就以PCB走线延迟最长位标准,将其余信号进行延迟,从而实现数据对齐。输出端口延迟的原理一致,只不过只有K7的HP bank才有ODELAYE2结构。

在这里插入图片描述

图8 7系列IO模块(左侧HP bank,右侧HR bank)

  ILOGICE2和ILOGICE3的结构差不多,区别在于ILOGICE2没有零保持延迟元件(ZHOLD),不能调用ZHOLD_DELAY原语。ILOGICE2和ILOGICE3都可以实现组合逻辑输入、寄存器输入、以及DDR双沿采样(IDDR)输入,并不能通过原语直接调用ILOGICE2,只能通过原语调用IDDR去使用ILOGICE2资源。ISERDESE2可以实现串行双沿采样转换为并行单沿采样,OSERDESE2与ISERDESE2功能刚好相反,比如实现HDMI接口时可以使用ODDR实现单沿转双沿,但是使用OSERDESE2会更方便,还能同时实现并行转串行,根据实际情况选择对应原语即可。

  图9左侧是HP bank的IOB结构,右侧是HR bank的IOB结构,HP bank多一个可以控制数控阻抗(DCI)的信号DCITERMDISABLE,其余结构都一样。其中PAD是FPGA的金属管脚,该管脚可作为输入也可作为输出,通过I、O信号实现单端输入、输出,DIFF_IN和IDFFO_OUT实现差分输入、输出,但是差分信号需要两个管脚进行配合实现。

在这里插入图片描述

图9 HP BANK与HR BANK的IOB结构

  通过以上讲解可知,IOB是FPGA输入、输出控制模块,并没有直接对应的原语,但是IO可以实现单端转差分吗,差分转单端的功能,所以可以通过调用OBUFDS原语在IOB模块内实现单端转差分的输出功能。

  本文主要对7系列FPGA的bank进行简单介绍,有利于后续几节内容详细讲解几个常用原语的参数及仿真。

文中的图来自xilinx的几个手册

  zynq-7000-product-selection-guide

  ug471_7Series_SelectIO

  ug865-Zynq-7000-Pkg-Pinout

  后续还会用到的手册

  ds181_Artix_7_Data_Sheet

  这些手册可直接在官网获取,也可以在公众号后台回复”xilinx手册”获取,后续用到的xilinx相关手册均在该文件夹中更新。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

<think>好的,我现在需要回答用户关于在Vivado中调用LVDS原语的问题。首先,我需要回忆一下Xilinx FPGA中的LVDS接口相关的内容。LVDS是低压差分信号,常用于高速数据传输,能有效减少噪声干扰。Vivado作为Xilinx的EDA工具,提供了原语来直接调用这些硬件资源。 接下来,用户提到的是调用LVDS原语,这可能涉及到SelectIO资源中的IBUFDS、OBUFDS等差分输入输出缓冲器。原语(Primitives)是FPGA中预定义的基本逻辑单元,用户可以直接在代码中实例化它们,而不必依赖综合工具自动推断。 我需要分步骤解释如何在Vivado中进行调用。首先,可能需要确认器件是否支持LVDS标准,因为不是所有FPGA都支持。然后,在代码中实例化相应的原语,例如IBUFDS用于输入,OBUFDS用于输出。需要给出示例代码,说明端口如何连接,比如差分对的P和N端,以及逻辑电平端。 另外,可能需要注意时钟和数据信号的约束,比如在XDC文件中设置正确的I/O标准和时序约束。此外,可能还需要提到IP Integrator中通过IP核的方式配置LVDS接口,但用户明确询问的是原语调用,所以重点应放在手动实例化上。 还要检查是否有常见的错误,比如原语名称拼写错误,端口连接顺序颠倒,或者未正确设置I/O属性。可能需要提醒用户在综合后的原理图中查看原语是否正确实例化,以及布局布线后的时序报告。 最后,是否需要提及仿真时的注意事项?比如差分信号在仿真中的表示可能不同于实际硬件,但用户的问题更偏向于实现而非验证,可能可以简要带过。 总结回答的结构应该是:介绍LVDS的作用,原语的概念,具体调用步骤,示例代码,注意事项,以及可能的后续步骤如约束设置和验证方法。确保使用正确的中文术语,避免技术术语错误,比如“原语”而非“原始模块”等。</think>在Xilinx Vivado中调用LVDS原语需要遵循以下分层实现流程: 一、LVDS技术基础 1. LVDS(低压差分信号)采用差分对传输,电压摆幅为350mV,抗干扰能力强 2. 典型应用场景:DDR接口、高速ADC/DAC、板间互连 3. Xilinx FPGA的SelectIO资源支持多种差分标准,包括LVDS、BLVDS等 二、原语调用步骤 1. 确认器件支持: - 7系列及更新器件均支持LVDS - 检查器件手册的SelectIO资源章节 2. 常用差分原语: ```verilog // 输入缓冲 IBUFDS #( .DIFF_TERM("TRUE"), // 启用差分终端 .IOSTANDARD("LVDS") // 设置I/O标准 ) ibufds_inst ( .O(data_in), // 缓冲后单端信号 .I(data_p), // 差分正端 .IB(data_n) // 差分负端 ); // 输出缓冲 OBUFDS #( .IOSTANDARD("LVDS") ) obufds_inst ( .O(data_p), // 差分正端输出 .OB(data_n), // 差分负端输出 .I(data_out) // 待发送单端信号 ); ``` 3. 时钟专用缓冲(必要时): ```verilog IBUFGDS #( .DIFF_TERM("TRUE"), .IOSTANDARD("LVDS") ) ibufgds_inst ( .O(clk_int), .I(clk_p), .IB(clk_n) ); ``` 三、约束配置要点 1. 必须设置正确的I/O标准: ```tcl set_property IOSTANDARD LVDS [get_ports {data_p data_n}] ``` 2. 差分对约束: ```tcl set_property DIFF_TERM TRUE [get_ports {data_p data_n}] ``` 3. 布局约束(可选): ```tcl set_property PACKAGE_PIN G12 [get_ports data_p] set_property PACKAGE_PIN G13 [get_ports data_n] ``` 四、设计验证 1. 硬件测试: - 使用示波器测量差分眼图 - 验证共模电压(典型值1.2V) 2. 时序分析: - 检查建立/保持时间余量 - 特别注意跨时钟域场景 五、常见问题处理 1. 未正确设置DIFF_TERM导致信号反射 2. P/N管脚对未分配到专用差分对Bank 3. 未正确约束导致时序违例 4. 电平不匹配(需确认接收端阻抗) 六、高级应用 1. 动态相位调整(IDELAYCTRL) 2. 输入延迟链校准 3. 差分信号转单端后的时钟域同步设计 建议在实现后通过I/O Ports视图验证约束生效情况,并通过Tcl命令`report_high_speed_interfaces`获取详细分析报告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电路_fpga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值