xilinx FPGA的资源一般指IOB,CLB,BRAM,DCM,DSP五种资源。其中IOB就是input/output block,完成不同电气特性下对输入输出信号的的驱动和匹配要求。

IOB的作用就是完成信号的采集和输出,引脚可以配置支持不同电气特性,上拉下拉或三态,差分或单端。有ologic,ilogic,idelay,odelay,iserdes,oserdes功能。如下图所示。

为了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。将信号打一拍的方法是将信号通过一次寄存器,而且必须在IOB里面的寄存器中打一拍。因为,从FPGA的PAD到IOB里面的寄存器是有专用布线资源的,而到内部其他寄存器没有专用的布线资源。使用IOB里面的寄存器可以保证每次实现的结果都一样,使用内部其他寄存器就无法保证每次用的都是同一个寄存器且采用同样的布线。同时,为了使用输入输出延迟功能(Input / Output delay),也必须要求信号使用IOB里面的寄存器。(https://blog.csdn.net/xuexiaokkk/article/details/50630717)

简单写一个寄存器输出,RTL如下图所示:

输出c和d两个信号,约束c的输出寄存器放到IOB里,d的不允许。约束方法有两种,选中cd port,注意不是OBUF,在I/O Port的属性中添加IOB属性,设置为TRUE(允许)或FALSE(不允许),可以看到默认的都为Auto。在xdc文件中会生成约束命令。

set_property IOB TRUE [get_ports c]
           set_property IOB FALSE [get_ports d]

实际工程中也可以用下面的语句约束全部输入输出。

set_property IOB TRUE [all_inputs]
           set_property IOB FALSE [all_outputs]

打开implement,从device版图可以明显看到c 的输出是从CLB里的一个ff,打了一拍后再连接到IOB中的FF,这样可以使输出FF的Q到PAD的路径是固定的,最短的,避免了PAD到内部FF的路径的未知性,对于分析时序是非常有利的。d的输出是在同一个siice中紧挨着的2个ff串联后再输出到PAD的OBUF。

前面提到输入输出都要打一拍,是为了避免在FF输出Q到OBUF中间还有连线输出,如选图所示。此时就无法实现IOB寄存器的布局,只能用CLB中的寄存器。因此要该信号再按时钟打一拍,如前面图3所示。

具体代码如下:

module test(input [3:0]a,b,output c,d,input clk,input rst);reg reg_c = 1'd0;  reg reg_d = 1'd0;always@(posedge clk)if(rst)beginreg_c <= 1'd0;reg_d <= 1'd0;   endelsebeginreg_c <= reg_c +  1'd1;reg_d <= reg_d +  1'd1;endreg reg_c1 = 1'd0;  reg reg_d1 = 1'd0;always@(posedge clk)beginreg_c1 <= reg_c;reg_d1<= reg_d;endassign c = reg_c1;assign d = reg_d1;endmodule

在赛灵思系列FPGA 的IOB 中分别有输入和输出寄存器。如果将设计中的第一级寄存器或最后一级寄存器用IOB 内部寄存器实现,那么就可以缩短IO 引脚到寄存器之间的路径(理解这句话是关键,我的理解是:若输入输出不连IOB寄存器,则代码修改后(但逻辑功能相同)每次的布局布线后,输入输出信号会 被连在不同的内部寄存器上,这样输入信号进入第一级寄存器的布线延迟就会每次都不同,这样有可能在高速信号采集的时候不能正确采样,因为布线延迟会导致建 立或保持时间不满足;如果在UCF文件中使用IOB寄存器,则不管代码如何修改,输入信号进入fpga内部都是被第一级的IOB寄存器采样,更能满足采样 条件),这通常可以缩短大约1~2ns 的传输时延。

但是在使用UCF文件约束IOB寄存器时,首先,有一些限制。对于输入寄存器在从管脚到寄存器间不能有组合逻辑存在。对于输出寄存器,在寄存器和管脚之间也不能有组合逻辑存在(也就是信号在输入输出之前在代码设计中都要干干净净打一拍)。对 于三态输出,在IOB中的所有的寄存器必须使用同一个时钟信号和复位信号,而且IOB三态寄存器必须低电平有效才能放到IOB中(三态缓冲器低电平有效, 所以在寄存器和三态缓冲器之间不需要一个反相器)。必须使软件能够选用IOB寄存器,可以设置全局实现选项:为输入、输出或输入输出选择IOB寄存器。缺 省值为关 off。

一般方案中,寄存器是实现在FPGA内部,因此到PAD的延时相对比较长,尤其是设计较大较复杂的时候。使用IOB Packing则将寄存器实现在FPGA边缘的IOB中,大大缩短延迟时间,提高了时序性能

将寄存器放入IOB中的方法:
1.verilog代码中
(IOB = “TRUE”) output reg [3:0] LED;
2.XDC文件中
set_property IOB TRUE [get_ports {REMOTE_FIFO_din[15]}]
两种方法任意一种皆可

Xilinx FPGA 将寄存器放入IOB中相关推荐

  1. 将寄存器放入IOB的方法

    1.verilog代码中 (IOB = "TRUE") output reg [3:0] LED; 2.XDC文件中 set_property IOB TRUE [get_port ...

  2. 【Qt】QStackedWidget:将多个窗口控件放入堆中,每次只显示一个窗口控件

    1.简介 QStackedWidget可以容纳多个窗口控件,每次只显示其中一个.例如:登录页面.各种功能页面等不同时显示的窗口,可以放入QStackedWidget中. 2.demo // 创建三个页 ...

  3. OC--有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 倒序输出字符串...

    有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 1 NSInteger num=123456789; 2 NSString *str=[[NSStri ...

  4. java jsp js xml_jsp实现将信息放入xml中的方法

    本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: 北京 广东 海南 市: 北京 二.ajax代码创建服务器请求代码不用写了,写onchange ...

  5. python读取一行数组_python 把文件中的每一行以数组的元素放入数组中的方法

    有时候需要把文件中的数据放入到数组中,这里提供了一种方法,可以根据文件结尾的标记进行数据拆分,然后再把拆分的文件放入数组中 # -*-coding: utf-8 -*- f = open(" ...

  6. java怎么把数据封进对象里_(Java)想把数组中一条一条的数据全部放入对象中去..要怎么做呢...

    展开全部 Java把数组中一条一条的数据全部放入对象中去操作如下: 1.先获取到数组中的数据dataArray数据. 2.接32313133353236313431303231363533e58685 ...

  7. 包+类导入+静态导入+类放入包中+包作用域

    [0]README 0.1)本文转自 core java volume 1, 旨在理清 包和类导入的相关知识: [1] 包 1.1) java 允许使用包将类组织起来,包可以方便组织代码,并将自己的代 ...

  8. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中

    //数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中#include "stdafx.h" #include <iostream> #include < ...

  9. set是无序集合,放入set中的元素通过iterator输出时候是无序的

    set是无序集合,放入set中的元素通过iterator输出时候是无序的 HashMap<String , String> hashMap = new HashMap<String ...

最新文章

  1. C 语言编程 — 堆栈与内存管理
  2. 购物车的收货地址js php,Javascript实现购物车功能的详细代码
  3. Valgrind快速入门指南
  4. Repeater简单应用(动态改变内部样式)
  5. VisualStudio卸载后无法再次安装的解决方法
  6. 使用cross-env解决跨平台设置NODE_ENV的问题
  7. SQL Server 通过发布订阅 实现数据库同步
  8. 拉取 google.golang.org/grpc 报错
  9. RDKit|使用MolDraw2DCairo模块绘制分子
  10. excel检验是否是正态分布-T分布
  11. Xcode打包ipa基本步骤
  12. 华为手机相册怎么镜像翻转_怎么制作照片视频?利用手机相册快速制作卡点视频...
  13. hp打印机一直显示正在打印中_打印机显示正在打印却没反应 - 卡饭网
  14. Sequence Model-week1编程题2-Character level language model【RNN生成恐龙名 LSTM生成莎士比亚风格文字】...
  15. 小菜鸟之HTML第二课
  16. Windows 组策略 应用
  17. 下载文件到本地解压压缩包出现文件损坏,报错问题已解决
  18. java获取usb设备的相关信息
  19. 绝对隐私:华为公司员工待遇全面揭秘(转)
  20. PR调色 日常Vlog街拍时尚视频博客视频调色PR预设

热门文章

  1. 微信小程序位置授权被取消再授权
  2. R语言文本挖掘展示:画词云图
  3. 机械/电信/生物/化学专业出身,为啥都要转行计算机?
  4. 计算机网络-学习笔记
  5. un7.28:redis客户端常用命令。
  6. 几种投影的特点及分带方法
  7. iOS 各种手势用法
  8. 在程序中打开系统设置页
  9. 共享汽车数据分析调研案例报告
  10. 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首