FPGA基础资源之IOB的应用

1.应用背景

在我们做时序约束时,有时候需要对FPGA驱动的外围器件进行input_delay/output_delay进行约束。不知道,大家有没有被以下这种类似的现象折磨过。你好不容易约束通过的工程,仅改动了个标点符号,或者其他不相关模块改动一丢丢。编译出来的工程时序就不过了。

碰到上述的现象,我觉得可能的原因有以下几种:1.时钟频率确实已经到极限了。2.器件的资源利用率已经达到瓶颈,软件已经尽力去优化了。

针对原因2,除了处理好跨时钟域等问题以外,我们通常会从整体上,去评估模块的布局是否合理,是否还有值得优化的空间。又或者针对关键的路径/模块,利用Pb_lock等技术,划分出某一区域,有限满足关键模块的布线等等手段。本文要介绍的IOB,针对外围器件input/output delay约束,有很好的提升效果。

2.什么是IOB

xilinx FPGA的基本资源一般包括可编程IO,IOB,CLB,BRAM,DCM,DSP等资源,某些器件还会集成一些特殊的硬核,例如GT、MIG等。其中IOB就是input/output buffer。可编程IO的作用就是完成信号的采集和输出,引脚可以配置支持不同电气特性,上拉下拉或三态,差分或单端。IOB与附近的idelay、odelay、ilogic、ologic和可编程IO等资源,共同组成FPGA的IO_Bank。

3.IOB的应用以及注意事项

为了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。这样做的目的是为了让这打一拍的寄存器约束到IOB上,从而使得每一次编译输入或者输出的时序不会发生改变。这是因为,IOB是位于IO附近的寄存器,是FPGA上距离IO最近的寄存器,并且位置固定。当你输入或者输出采用了IOB约束,那么就可以保证从IO到达寄存器或者从寄存器到达IO之间的走线延迟最短、最大限度保证时序满足要求,同时由于IO的位置是固定的,所以每一次编译都不会造成输入或者输出的时序发生改变。

IOB的应用一般有两种,一种是在代码中添加约束,另一种可以在约束文件xdc中添加。

  • 在约束文件中加入下面约束:

set_property  IOB true [get_ports {port_name}]

  • 直接在代码中加约束,在寄存器前加入下面约束,需要注意的是,对于输入IOB约束,这里的寄存器是第一级寄存器,对于输出IOB约束,这里的寄存器是最后一级寄存器,且寄存器输出不能再作为组合逻辑输入。

(* IOB = "true" *) reg  O_data;

4.实例说明

下面的实例,分别对输入寄存器[3:0]reg_a,以及输出寄存器reg_c1进行IOB约束,停过对比并行的寄存器[3:0]reg_b和reg_d1,从而能发现他们之间的差异。

下面是映射到device的情况:

我们以输出的寄存器reg_c1和reg_d1为例,从下图能明显能看出,增加了IOB约束的reg_c1,是被映射到device靠近pad的Ologic里面的IOB寄存器中,而没添加IOB约束的输出寄存器reg_d1,是直接从某个CLB 中其中一个slice里的寄存器中。当逻辑代码改变,很有可能下一次编译,reg_d1映射的位置会发生改变,从而导致时序路径发生变化。

同样,输入的寄存器也是一个道理,这里就不展开论述了。

附代码:

module IOB_test(

input [3:0]a,b,

output c,d,

input clk,

input rst

);

//-------set input reg IOB -------

(* IOB = "true" *)    reg [3:0]   reg_a;

reg [3:0]   reg_b;

always@(posedge clk)

begin

if(rst)

begin

reg_a   <= 4'd0;

reg_b   <= 4'd0;

end

else

begin

reg_a   <= a;

reg_b   <= b;

end

end

reg reg_c = 1'd0;

reg reg_d = 1'd0;

always@(posedge clk)

begin

if(rst)

begin

reg_c <= 1'd0;

reg_d <= 1'd0;

end

else

begin

if ( reg_a == 4'd1 && reg_b == 4'd2 )

begin

reg_c <= reg_c +  1'd1;

reg_d <= reg_d +  1'd1;

end

else

;

end

end

//-------set output reg IOB -------

(* IOB = "true" *)  reg reg_c1 = 1'd0;

reg reg_d1 = 1'd0;

always@(posedge clk)

begin

reg_c1 <= reg_c;

reg_d1<= reg_d;

end

assign c = reg_c1;

assign d = reg_d1;

endmodule

FPGA基础资源之IOB的应用相关推荐

  1. 【FPGA基础篇】底层结构组成

    文章目录 前言 CPU和DSP.FPGA.ASIC对比 FPGA和CPLD比较 FPGA基础 IOB--输入输出单元 CLB--可编程逻辑模块 LUT--查找表 MUX--选择器(复用器) Carry ...

  2. FPGA学习笔面试记录(二)——FPGA基础

    这里我罗列了一个学习思维导图,笔面试过程中遇到的问题,大都涵盖在内,可以参考.基础知识记录如下: 目录 FPGA部分 1.典型FPGA的开发流程 2.FPGA内部资源包括哪些及作用? 3.查找表LUT ...

  3. 1.1 FPGA基础及电路设计

    FPGA基础及电路设计 前言 1 FPGA概述 2 FPGA基础及7系列FPGA基本原理 3 FPGA基本逻辑结构 4 补充:FPGA基本结构 4.1 可配置逻辑单元(Configurable Log ...

  4. 秋招知识点总结-FPGA基础知识

    1.典型FPGA的开发流程 (1)电路设计 (2)设计输出 (3)功能仿真 (4)综合优化 (5)综合后仿真 (6)布局布线 (7)时序仿真 (8)板级调试 (9)芯片编程与调试 2.FPGA内部资源 ...

  5. FPGA基础知识|芯片设计基础知识

    FPGA 基础知识 可查看原文:FPGA基础知识 1.查找表 LUT 和编程方式第一部分: 查找表 LUT FPGA 是在 PAL.GAL.EPLD.CPLD 等可编程器件的基础上进一步发展的产物.它 ...

  6. (78)FPGA内部资源与FPGA开发流程-面试必问(二)(第16天)

    (78)FPGA内部资源与FPGA开发流程-面试必问(二)(第16天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA内部资源与FPGA开发流程-面试必问 ...

  7. (05)FPGA内部资源

    (05)FPGA内部资源 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA内部资源 5)结语 1.2 FPGA简介 FPGA(Field Programmable ...

  8. FPGA时钟资源PLL与DLL区别

    1.1 FPGA时钟资源PLL与DLL区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA时钟资源PLL与DLL区别: 5)结束语. 1.1.2 本节引言 &q ...

  9. FPGA时钟资源使用

    1.1 FPGA时钟资源使用 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA时钟资源使用: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至千里 ...

最新文章

  1. INDEX FULL SCAN和INDEX FAST FULL SCAN的区别
  2. 关于对js属性的测试
  3. TCP 之 RST 原因分析
  4. ai对话机器人实现方案_显然地引入了AI —无代码机器学习解决方案
  5. “家乡好物直播”走进“水果第一县”,人大教授变身“好物推荐官”
  6. git 9个小命令(三年修仙五年摸鱼也有喔) 一条龙服务
  7. 记风雨兼程的2020年,2021年,我来了!
  8. 超级简易的加法计算器
  9. 宁夏诗词学会红寺堡采风专辑
  10. 计算机主板设置中的英语,技嘉主板bios设置教程,技嘉主板bios中英文对照表
  11. 计算机中的信息计量单位字,计算机中信息的计量单位.pdf
  12. 阿里巴巴编码规范认证考试总结
  13. PS如何查看所选图层的实际像素?
  14. 生物信息学算法之Python实现|Rosalind刷题笔记:010 DNA一致性序列计算
  15. 从零开始的Nginx详解(3)【Nginx-Https服务配置详解】
  16. 前端面试官会问的问题
  17. Linux系统安装教程图文详解
  18. 产品设计体会(1013)日志分析的商业价值
  19. 专用打印机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 【UE4】【笔记】5、UE4学习笔记 LOD与合并静态网格体

热门文章

  1. 如何查看自己的淘宝号使用多久了,淘龄怎么查?
  2. 机器人鸣人是哪一集_火影:你知道火影里出现了几次机器人吗?只有十年火迷才知道...
  3. 阿里云数据库再获学术顶会认可,一文全览VLDB最新亮点
  4. Python打开电脑文件夹
  5. matlab外推法确定搜索区间的程序,《机械优化设计》复习题
  6. php微信公众号支付实例教程,PHP微信公众号支付教程(含图文)
  7. Linux之——添加VIP
  8. 如何用java画一颗圣诞树
  9. 如何快速批量删除Excel单元格中的“换行符”
  10. 基于海康sdk回放下载