技巧1、XST 主要参考资料:XST User Guide (ISE 安装目录doc 中的xst.pdf)
技巧2、 辅助参考资料:WP231 - HDL Coding Practices to Accelerate Design Performance
技巧3、特别注意之一:请给XST 加时序约束。

通常我们会为工程添加UCF 约束指定时序要求和管脚约束。但是UCF 约束是给MAP,PAR 等实现使用的,综合工具XST 并不能感知系统的时序要求。而为XST 添加XCF 约束却是使实现结果拥有最高频率的关键。其原因是显而易见的:实现工具只能在综合网表的基础上布局布线,而综合工具却可以根据要求调整综合网表,使实现工具更容易满足时序要求。如果不将时序目标告知综合器,将导致我们对性能的要求得不到体现。

XCF约束语法与UCF 类似并且在XST User Guide 中有详细描述。其实常用的Period、Offest等约束和UCF的语法是一模一样的,可以直接使用在XCF中。

给设计添加XCF 约束的方法是Synthesize - XST --> 右键 --> Synthesis Constraint File = 指定路径

技巧4、特别注意之二:仔细察看综合报告中的Warning。切记要仔细查看综合报告中的所有Warning并确认是否是可以安全忽略的。综合器产生Error会使工具停止工作,但是Warning 经常会被用户忽略。其实Waning可以提示很多潜在的逻辑问题,比如某些信号声明了,被使用了,却没有被赋值,或者综合器发现了Latch但却不是期望的结果等等。

技巧5、 常用选项之一:keep_hierarchy - 保持层次。在初始设计/debug 的时候很有用。XST根据层次来综合,不打破层次优化,所有的寄存器名字都以名字排列,UCF 约束可以很方便得找到需要约束的对象。如果选择soft,则在综合时保持层次,而在map 时工具会打破层次来优化,但是instance 的名字还是保留的。

技巧6、常用选项之二:register_duplication + max_fanout + equivalent_register_removal + resource_sharing - 允许自动复制寄存器,设置最大扇出,禁止资源共享。当Timing不满足时使用复制寄存器的方法通常能改善一些瓶颈。综合器为了节省面积而做出的某些优化可能导致对时序不利,因此关闭equivalent_register_removal 和resource_sharing可能可以改善时序。

技巧7、常用选项之三:Add IO Buffers - 自动插入缓冲器。当我们的设计作为顶层使用时,通常让工具自动插入IO buffer ;当需要将设计作为模块插入别的设计中时,就需要禁止自动插入IO Buffer。

技巧8、常用选项之四: Number of Clock Buffers 和 buffer_type 约束: 当综合结果中的BUFG 不是像想象中一样时,我们可以通过下面两种方法来解决:

- 用buffer_type 约束对该信号所使用的Buffer类型定义。具体使用方法在XST User Guide
- 手动插入BUFG,然后设置允许使用BUFG的数量,那么手动插入的将拥有高优先级而先占用了BUFG,工具就不会再自动插BUFG 了。

技巧9、 BlackBox :调用其它已经综合好的网表需要使用BlackBox。BlackBox说白了就是只有端口说明的HDL文件。更多的BlackBox Tip请参考我的博客( 注:为RickySu 的博客)。

技巧10、XST的命令行模式:XST支持使用命令行模式进行批量操作。

命令行的XST 支持两种模式:

Shell 方式 - 在cmd下输入xst,然后在xst的shell 环境中一条一条打命令;
Script 方式 - 在cmd下用xst -ifn script.scr运行script.scr 内的命令,或者在xst shell 中用script命令调用script.scr中的内容。在此之前,会需要先准备好compile_list.prj。EDK 其实就使用这种方法调用XST。更详细的语法参考XST User Guide。

技巧11、要查看综合后的网表,除了XST自带的RTL Schematic工具和Technology Schematic工具,还可以使用PlanAhead。他的显示/ 查找能力更为强大,而且他会先合并所有的综合网表,不会因为某个模块式预先综合好的而不能察看内部状况。

5.4 大规模设计带来的综合和布线问题

FPGA 设计的时序性能是由物理器件、用户代码设计以及 EDA 软件共同决定的,忽略了任何一方面的因素,都会对时序性能有很大的影响。本节主要给出大规模设计中,赛灵思物理器件和 EDA 软件的最优使用方案。

1)IO 约束技巧

优秀设计必须要考虑 IO 约束的技巧。对于赛灵思器件来讲,进位链是垂直分布的、逻辑排列块之间也有水平方向上三态缓冲线的直接连接、且硬核单元基本都是按列分布 ( 在水平方向就具备最短路径 ),因此最优的方案为 :将用于控制信号的 I/O 置于器件的顶部或底部,且垂直布置 ;数据总线的 I/O 置于器件的左部和右部,且水平布置,如图 5-16 所示。

图5-16 赛灵思器件的最佳IO布局示意图

这种IO 分配方式充分利用了Xilinx FPGA 芯片架构的特点,如进位链排列方式以及块RAM、硬核乘法器位置。进位链的结构如图 5-17 所示。能解决多位宽加法、乘法从最低位向最高位的进位延时问题 ;块 RAM 和硬核乘法器可节约大量的逻辑资源且保证时序,二者在 FPGA 芯片中都是自上而下成条状分布,因此数据流水平、控制流垂直可最大限度地利用芯片底层架构。当然,在实际系统设计中,可能无法完全做到上述要求,但还是应该尽可能地将高速率、多位宽的信号布置在芯片左右两侧。

图5-17 赛灵思器件的进位链结构示意图

2)ISE 的实现工具

ISE 中集成的实现工具具备不同的努力程度 (Effort Level),当然使用最高级别的,可以提高时序性能,而不必采取其它措施 ( 如施加更高级的时序约束,使用高级工具或者更改代码等 ),但需要花费很长的计算时间。为此,赛灵思推荐的最佳流程如图 5-18 所示。

图5-18 赛灵思实现工具的最佳使用策略

在第一遍实现时,使用全局时序约束和缺省的实现参数选项,如果不能满足时序要求,则可尝试以下方法:

(1) 尝试修改代码,如使用合适的代码风格,增加流水线等 ;

(2) 修改综合参数选项,如 Optimization Effort,Use Synthesis Constraints File,Keep Hierarchy,Register Duplication,Register Balancing 等 ;

(3) 增加实现工具的努力程度 ;

(4) 在综合和实现时采用指定路径时序约束的方法。

实现工具分为映射 (MAP) 和布局布线 (PAR) 两部分,和 PAR 一样,也可使用 Map-timing 参数选项针对关键路径进行约束。如 :参数“Timing-Driven Packing and Placement”给关键路径以优先时序约束的权利 ;用户约束通过翻译 (Translate) 过程从 User Constraints File (UCF ) 中传递到设计中。

技巧1、XST 主要参考资料:XST User Guide (ISE 安装目录doc 中的xst.pdf)
技巧2、 辅助参考资料:WP231 - HDL Coding Practices to Accelerate Design Performance
技巧3、特别注意之一:请给XST 加时序约束。

通常我们会为工程添加UCF 约束指定时序要求和管脚约束。但是UCF 约束是给MAP,PAR 等实现使用的,综合工具XST 并不能感知系统的时序要求。而为XST 添加XCF 约束却是使实现结果拥有最高频率的关键。其原因是显而易见的:实现工具只能在综合网表的基础上布局布线,而综合工具却可以根据要求调整综合网表,使实现工具更容易满足时序要求。如果不将时序目标告知综合器,将导致我们对性能的要求得不到体现。

XCF约束语法与UCF 类似并且在XST User Guide 中有详细描述。其实常用的Period、Offest等约束和UCF的语法是一模一样的,可以直接使用在XCF中。

给设计添加XCF 约束的方法是Synthesize - XST --> 右键 --> Synthesis Constraint File = 指定路径

技巧4、特别注意之二:仔细察看综合报告中的Warning。切记要仔细查看综合报告中的所有Warning并确认是否是可以安全忽略的。综合器产生Error会使工具停止工作,但是Warning 经常会被用户忽略。其实Waning可以提示很多潜在的逻辑问题,比如某些信号声明了,被使用了,却没有被赋值,或者综合器发现了Latch但却不是期望的结果等等。

技巧5、 常用选项之一:keep_hierarchy - 保持层次。在初始设计/debug 的时候很有用。XST根据层次来综合,不打破层次优化,所有的寄存器名字都以名字排列,UCF 约束可以很方便得找到需要约束的对象。如果选择soft,则在综合时保持层次,而在map 时工具会打破层次来优化,但是instance 的名字还是保留的。

技巧6、常用选项之二:register_duplication + max_fanout + equivalent_register_removal + resource_sharing - 允许自动复制寄存器,设置最大扇出,禁止资源共享。当Timing不满足时使用复制寄存器的方法通常能改善一些瓶颈。综合器为了节省面积而做出的某些优化可能导致对时序不利,因此关闭equivalent_register_removal 和resource_sharing可能可以改善时序。

技巧7、常用选项之三:Add IO Buffers - 自动插入缓冲器。当我们的设计作为顶层使用时,通常让工具自动插入IO buffer ;当需要将设计作为模块插入别的设计中时,就需要禁止自动插入IO Buffer。

技巧8、常用选项之四: Number of Clock Buffers 和 buffer_type 约束: 当综合结果中的BUFG 不是像想象中一样时,我们可以通过下面两种方法来解决:

- 用buffer_type 约束对该信号所使用的Buffer类型定义。具体使用方法在XST User Guide
- 手动插入BUFG,然后设置允许使用BUFG的数量,那么手动插入的将拥有高优先级而先占用了BUFG,工具就不会再自动插BUFG 了。

技巧9、 BlackBox :调用其它已经综合好的网表需要使用BlackBox。BlackBox说白了就是只有端口说明的HDL文件。更多的BlackBox Tip请参考我的博客( 注:为RickySu 的博客)。

技巧10、XST的命令行模式:XST支持使用命令行模式进行批量操作。

命令行的XST 支持两种模式:

Shell 方式 - 在cmd下输入xst,然后在xst的shell 环境中一条一条打命令;
Script 方式 - 在cmd下用xst -ifn script.scr运行script.scr 内的命令,或者在xst shell 中用script命令调用script.scr中的内容。在此之前,会需要先准备好compile_list.prj。EDK 其实就使用这种方法调用XST。更详细的语法参考XST User Guide。

技巧11、要查看综合后的网表,除了XST自带的RTL Schematic工具和Technology Schematic工具,还可以使用PlanAhead。他的显示/ 查找能力更为强大,而且他会先合并所有的综合网表,不会因为某个模块式预先综合好的而不能察看内部状况。

5.4 大规模设计带来的综合和布线问题

FPGA 设计的时序性能是由物理器件、用户代码设计以及 EDA 软件共同决定的,忽略了任何一方面的因素,都会对时序性能有很大的影响。本节主要给出大规模设计中,赛灵思物理器件和 EDA 软件的最优使用方案。

1)IO 约束技巧

优秀设计必须要考虑 IO 约束的技巧。对于赛灵思器件来讲,进位链是垂直分布的、逻辑排列块之间也有水平方向上三态缓冲线的直接连接、且硬核单元基本都是按列分布 ( 在水平方向就具备最短路径 ),因此最优的方案为 :将用于控制信号的 I/O 置于器件的顶部或底部,且垂直布置 ;数据总线的 I/O 置于器件的左部和右部,且水平布置,如图 5-16 所示。

图5-16 赛灵思器件的最佳IO布局示意图

这种IO 分配方式充分利用了Xilinx FPGA 芯片架构的特点,如进位链排列方式以及块RAM、硬核乘法器位置。进位链的结构如图 5-17 所示。能解决多位宽加法、乘法从最低位向最高位的进位延时问题 ;块 RAM 和硬核乘法器可节约大量的逻辑资源且保证时序,二者在 FPGA 芯片中都是自上而下成条状分布,因此数据流水平、控制流垂直可最大限度地利用芯片底层架构。当然,在实际系统设计中,可能无法完全做到上述要求,但还是应该尽可能地将高速率、多位宽的信号布置在芯片左右两侧。

图5-17 赛灵思器件的进位链结构示意图

2)ISE 的实现工具

ISE 中集成的实现工具具备不同的努力程度 (Effort Level),当然使用最高级别的,可以提高时序性能,而不必采取其它措施 ( 如施加更高级的时序约束,使用高级工具或者更改代码等 ),但需要花费很长的计算时间。为此,赛灵思推荐的最佳流程如图 5-18 所示。

图5-18 赛灵思实现工具的最佳使用策略

在第一遍实现时,使用全局时序约束和缺省的实现参数选项,如果不能满足时序要求,则可尝试以下方法:

(1) 尝试修改代码,如使用合适的代码风格,增加流水线等 ;

(2) 修改综合参数选项,如 Optimization Effort,Use Synthesis Constraints File,Keep Hierarchy,Register Duplication,Register Balancing 等 ;

(3) 增加实现工具的努力程度 ;

(4) 在综合和实现时采用指定路径时序约束的方法。

实现工具分为映射 (MAP) 和布局布线 (PAR) 两部分,和 PAR 一样,也可使用 Map-timing 参数选项针对关键路径进行约束。如 :参数“Timing-Driven Packing and Placement”给关键路径以优先时序约束的权利 ;用户约束通过翻译 (Translate) 过程从 User Constraints File (UCF ) 中传递到设计中。

FPGA开发综合技巧相关推荐

  1. 单片机•CPLD/FPGA开发综合实验装置

    ZN-DPJSY单片机•CPLD/FPGA开发综合实验装置 一.概述 ZN-DPJSY型 单片机•CPLD/FPGA开发综合实验装置由控制屏.实验挂箱.实验桌组成,通过本实验台可完成单片机的接口扩展. ...

  2. 单片机CPLD/FPGA开发综合实验,QY-DPJ05

    CPLD Complex Programmable Logic Device 复杂可编程逻辑器件 FPGA Field Programmable Gate Array 现场可编程逻辑门阵列 逻辑器件 ...

  3. FPGA的设计艺术(9)FPGA开发技巧与工程管理

    文章目录 前言 设计技巧和常见错误 PCB设计 数字设计 同步设计计数器示例:纹波计数器 减少编码时的不确定性. Verilog/VHDL编码 仿真 为什么仿真? 工程管理 管理工程师 前言 阅读一段 ...

  4. FPGA开发技巧备忘录——目录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--目录 前言 规划内容 前言 之所以要弄这么一个专题,是因为有些技巧工作中用的时候很熟悉,但隔了很久没有接触的 ...

  5. FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学

    FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学 FPGA快乐学习 以<FPGA边码边学 视频教程>"Lesson06 分频计数器设计"中的si ...

  6. FPGA开发技巧备忘录——Xilinx JTAG to AXI Master IP的使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--Xilinx JTAG to AXI Master IP的使用 前言 用法 Tcl指令 展望 前言 无意间发 ...

  7. FPGA开发技巧备忘录——Vivado 自动日期版本号

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--Vivado 自动日期版本号 前言 创建.v文件 设定tcl文件路径 tcl内容 总结 前言 我们在编译FP ...

  8. FPGA开发技巧备忘录——verilog系统函数做数学运算

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--verilog系统函数做数学运算 前言 $clog2 Real math functions $random ...

  9. FPGA开发技巧备忘录——大量相同类型IP核仿真时tcl简化写法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--大量相同类型IP核仿真时tcl简化写法 前言 通配符* 前言 之前在<modelsim独立仿真quar ...

最新文章

  1. Qt 第二章 创建对话框--纯代码实现改变形状的对话框(二)
  2. 计算机索引无法使用情况,电脑上出现索引,电脑卡的什么都打不开
  3. spring30: 事务
  4. servletConfig对象
  5. Prim和Dijkstra居然写起来一模一样
  6. 您可能不知道可以使用Chrome开发者控制台执行的操作
  7. angularJS之angular-datatable的方法
  8. php三年经验 多少工资_PHP2年以上经验,在深圳工资能拿多少?
  9. Python对命令提示符cmd以及操作系统的一些操作
  10. addcslashes与stripcslashes
  11. [GCN] 增加可视化+代码注释 of GitHub项目:Graph Convolutional Networks in PyTorch
  12. 将php分页类YII绑定框架,就需要改变风格的基础
  13. 证件OCR识别360度全面解析
  14. Flutter面试问题总结
  15. 慢慢的,就没有了,就像从未存在过
  16. 无限循环小数四则运算_无限循环小数的加减乘除及无限循环小数转换为分数形式-何长峻...
  17. 地图-导航(百度/高德)
  18. ktt算法 约化_矩阵特征与特征向量的计算
  19. 如何创建XS Job来完成定时任务
  20. 智慧化工厂安全风险生产预警系统软件

热门文章

  1. 查询三个月前的所有数据的sql语句
  2. python调用c#注意事项_python 调用c# 超级直接示例
  3. 商城模板网站html5手机端_网站建设中,pc端与手机移动端设计一样吗
  4. android 计算器显示不全,Android5.0 计算器计算结果不准确和结果末尾的多余的‘0’没有省略的解决方法...
  5. buildroot 简要记录
  6. i2c-tools dected -l
  7. arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境
  8. word中如何删除顽固的空白页?
  9. 【SRIO】2、RapidIO串行物理层的包与控制符号
  10. 函数声明(函数原型)的一些关键技巧