您编写的代码是不是虽然在仿真器中表现正常,但是在现场却断断续续出错?要不然就是有可能在您使用更高版本的工具链进行编译时,它开始出错。您检查自己的测试平台,并确认测试已经做到100%的完全覆盖,而且所有测试均未出现任何差错,但是问题仍然顽疾难除。
虽然设计人员极其重视编码和仿真,但是他们对芯片在FGPA中的内部操作却知之甚少,这是情有可原的。因此,不正确的逻辑综合和时序问题(而非逻辑错误)成为大多数逻辑故障的根源。
但是,只要设计人员措施得当,就能轻松编写出能够创建可预测、可靠逻辑的FPGA代码。
在FPGA设计过程中,需要在编译阶段进行逻辑综合与相关时序收敛。而包括I/O单元结构、异步逻辑和时序约束等众多方面,都会对编译进程产生巨大影响,致使其每一轮都会在工具链中产生不同的结果。为了更好、更快地完成时序收敛,我们来进一步探讨如何消除这些差异。
I/O 单元结构
所有FPGA都具有可实现高度定制的I/O引脚。定制会影响到时序、驱动强度、终端以及许多其它方面。如果您未
明确定义I/O单元结构,则您的工具链往往会采用您预期或者不希望采用的默认结构。
在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序的约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从寄存器到寄存器,从寄存器到输出,从输入到输出的纯组合逻辑。通常,需要对这几种路径分别进行约束,以便使设计工具能够得到最优化的结果。下面对这几种路径分别进行讨论。
一般来讲,添加约束的原则为先附加全局约束,再补充局部约束,而且局部约束比较宽松。其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE 布局布线时间。典型的全局约束包括周期约束和偏移约束。
在添加全局时序约束时,需要根据时钟频率划分不同的时钟域,添加各自的周期约束;然后对输入输出端口信号添加偏移约束,对片内逻辑添加附加约束。
请问专家有没有办法在时序约束时约束到达某一模块的总线输入信号到达时间差不多。
如某一模块的有地址输入信号ADDRESS[7:0],希望约束ADDRESS[0],ADDRESS[1],...
ADDRESS[7]到达模块的时间差不多。
高速FPGA设计在时序约束方面的总结
FPGA中高频率运行的单元,如Serdes,这些单元的时序约束要经过仔细设计。
最近阅读了Xilinx 应用笔记:xapp485和xapp485,受到不少启发。
之前在做时序约束的时候有几个因素都是没有考虑到的。
Timespec should be set to period plus an amount for jitter。
For example : primary clock of 90 MHz => high speed clock of 315 MHz (3175 pS).
From spreadsheet : jitter is 464 pS
1/(3175 - (0.5*464)) => 340 MHz
这一点毋庸置疑,我们大家都知道。
但我要指出的是我们很多设计师都没有考虑 DCM引入的Jitter.这种jitter和timing uncertainty
是由于DFS生成倍频时钟引起的。 该参数称为Tj35.
现在总结起来,我们在处理高速时钟问题时要考虑的内容有。Tj35、Incoming Clock jitter、Tsamp等几个因素。
2)偏移约束
偏移约束规定了外部时钟和数据输入输出引脚之间的时序关系,只用于与PAD相连的信号,不能用于内部信号。
使用该约束可以为综合实现工具指出输入数据到达的时刻,或者输出数据稳定的时刻,从而在综合实现中调整布局布线过程,
使正在开发的FPGA/CPLD的输入建立时间以及下一级电路的输入建立时间满足要求。
基本语法如下:
OFFSET = {IN|OUT} “offset_time” [units] {BEFORE|AFTER} “clk_name” [TIMEGRP “group_name”];
其中{IN|OUT}说明约束的是输入还是输出,offset_time为FPGA引脚数据变化与有效时钟沿之间的时间差,BEFORE|AFTER说明该时间差在有效时钟沿的前面还是后面,TIMEGRP “group_name”定义了约束的触发器组,缺省时约束该时钟驱动的所有触发器。
OFFSET根据芯片外围电路的时序特性约束了内部延时。
OFFSET_IN 约束输入信号
OFFSET_IN_AFTER:输入信号(in)在时钟后(after)多长时间进入芯片。
OFFSET_IN_BEFORE:输入信号(in)在时钟前(before)多长时间进入芯片。
前一段时间调试了xilinx的板子上跑代码,自己加IP核,看了它的约束文件,在网上找了一些讲语法的资料,自己整理了一下,我感觉在你了解了语法之后,确实得好好看一下它自己给出的约束,有些我自己没用到,我就没整理了。
1.约束文件的概念
FPGA设计中的约束文件有3类:用户设计文件(.UCF文件)、网表约束文件(.NCF文件)以及物理约束文件(.PCF文件),
可以完成时序约束、管脚约束以及区域约束。3类约束文件的关系为:
用户在设计输入阶段编写UCF文件,然后UCF文件和设计综合后生成NCF文件,最后再经过实现后生成PCF 文件。
本节主要介绍UCF文件的使用方法。
UCF文件是ASC 2码文件,描述了逻辑设计的约束,可以用文本编辑器和Xilinx约束文件编辑器进行编辑。
NCF约束文件的语法和UCF文件相同,二者的区别在于: UCF文件由用户输入,NCF文件由综合工具自动生成,
当二者发生冲突时,以UCF文件为准,这是因为UCF的优先级最高。PCF文件可以分为两个部分:
一部分是映射产生的物理约束,另一部分是用户输入的约束,同样用户约束输入的优先级最高。
一般情况下,用户约束都应在UCF文件中完成,不建议直接修改 NCF文件和PCF文件。
2.UCF文件的语法说明
UCF文件的语法为:
目前,使用ISE11.4对XC6SLX150进行开发,在时序上遇到一些困难和挑战。痛定思痛,立即进行问题记录,希望能与各位共同进行探讨和分析。
1. 我在使用ISE11.4进行时序约束时,在UCF中添加CONFIG STEPPING 约束选项,对时序分析结果有影响。这个问题,可以参考Xilinx的相关文档,因为这个约束,对改善和优化时序没有太多的影响,只是令时序分析软件对FPGA的时序模型更精确而已。我们要保持良好的习惯,在UCF中增加该选择,以求FPGA设计在时序上更Robust.
2. 大家可能遇到过,如下时序约束的问题:目前的设计进行时序分析时,Timingscore 的值很高;为了优化时序我们通常会在ISE的MAP 或PAR选项中设置“高”优化选项,以期能达到时序优化。但有时我们发现这条路是行不通的,而且造成开发时间剧烈增加,而没有任何进展。歪打正着,我降低了MAP 或“高”优化选项,后,反而使时序收敛啦。这其中的原因,不得而知。总而言之一句话,当时序不收敛时,如果发现紧约束不奏效的话,可以在痛苦和迷茫过后 放松一下约束。给它松松绑嘛!
使用约束文件添加时序约束2010-01-16 13:07一般来讲,添加约束的原则为先附加全局约束,再补充局部约束,而且局部约束比较宽松。其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE 布局布线时间。典型的全局约束包括周期约束和偏移约束。
最新评论
2 天 5 小时之前
2 天 5 小时之前
2 天 5 小时之前
2 天 9 小时之前
3 天 5 小时之前
5 天 4 小时之前
5 天 10 小时之前
6 天 25 分钟之前
6 天 6 小时之前
6 天 9 小时之前