漫谈时序设计(3)走进时序约束的大门!

目录

前言

Intra-Clock&Inter-Clock Paths

时序约束

主时钟约束

衍生时钟约束

延迟约束

伪路径约束

多周期路径约束

写在最后


前言

为了秋招,对时序分析做了一些准备,但主要是时序路径,建立时间裕量、保持时间裕量等基础性的东西,没能有一个规范的约束指导,是很难运用到实际当中的。

今天这篇博文就给出一个时序约束的大体指导,参考自:时序分析以及 AN 545: Design Guidelines and Timing Closure Techniques for HardCopy ASICs

当然前几天也写了一篇博客,是在Vivado中对时序总结进行分析的一篇科普文。

Vivado 随笔(5) Timing Summary 相关讨论(一)

里面提到了TNS、WNS以及THS、WHS等概念,还有Intra-Clock path以及Inter-Clock path的概念。

这些概念在时序分析中是必不可少的,WNS提示了最差负时序裕量,从它的正负关系可以看出设计中的时序满足与否,如果不满足,可进一步查看那些具体的路径不满足,属于Intra-Clock还是Inter-Clock path,对于Inter-Clock path,我们可以不进行时序分析,直接约束为伪路径,对于Intra-Clock path中的时序违规问题,我们是要实打实的去解决的地方。

Vivado的约束文件是XDC文件,它包含的范围大于SDC,因此,当然可以用SDC的那一套命令来约束时序。


Intra-Clock&Inter-Clock Paths

在正式进行约束之前,还是先把这些概念提出来,作为预备知识。

当源时钟和目的时钟来自于同一个时钟信号,这个时钟信号可以是PLL或者MMCM产生的时钟,可以是I/O clock pins等。

总之,这种路径是不存在跨时钟域问题,如下图:

数据在这种路径下传输,属于Intra-Clock Transfer。

与之相对的是Inter-clock Paths,很好理解,源时钟和目的时钟来自于不同的时钟域,如下图:

在这种路径下的信号传输,属于跨时钟域传输,也叫Inter-Clock Transfer。

时序约束

主时钟约束

这里就正式进入时序约束的大门了,在FPGA时序约束中,我们可以在综合之后添加,也可以在实现之后添加。时钟是时序电路设计的心脏,因此时序约束中的第一步我们需要对我们设计中需要的时钟进行周期约束,对于时钟的约束又分为主时钟约束和再生时钟约束。

主时钟通常有两种情形:

一种是时钟由外部时钟源提供,通过时钟引脚进入FPGA,该时钟引脚绑定的时钟为主时钟:

另一种是高速收发器(GT)的时钟RXOUTCLK或TXOUTCLK。

对于7系列FPGA,需要对GT的这两个时钟手工约束;

对于UltraScale FPGA,只需对GT的输入时钟约束即可,Vivado会自动对这两个时钟约束。

可以通过如下两个Tcl命令来查看未约束的主时钟:

//确定主时钟
report_clock_networks -name mynetwork
//或者
check_timing -override_defaults no_clock

对于主时钟的约束,使用Tcl命令:

create_clock -name <name> -period <period> -waveform {<rise_time> <fall_time>} [get_ports <input_port>]
参数含义
-name时钟名称
-period时钟周期,单位为ns
-waveform波形参数,第一个参数为时钟的第一个上升沿时刻,第二个参数为时钟的第一个下降沿时刻
-add在同一时刻源上定义多个时钟时使用

例如:

create_clock -period 10 -name clka -waveform {5 10} [get_ports clka]

当然上面只是一个例子,它约束的主时钟波形图是这样的:

如果不加属性-waveform,默认高电平位于0时刻。

这条约束主时钟的Tcl命令可以写在XDC或者SDC约束文件中,也可以直接在Tcl console中(针对Vivado)输入,运行后,Vivado会自动把这条约束添加到XDC文件中。

衍生时钟约束

衍生时钟可以是PLL或者MMCM等时钟管理资源产生的时钟,也可以是经过逻辑分析得到,例如设计一个分频器得到的时钟等。

衍生时钟又分两种情况:

  1. Vivado自动推导的衍生时钟
  2. 用户自定义的衍生时钟

首先来看第一种,如果使用PLL或者MMCM,则Vivado会自动推导出一个约束。

也就是说,不需要我们对PLL产生的时钟进行约束了。

自动推导的好处在于当MMCM/PLL/BUFR的配置改变而影响到输出时钟的频率和相位时,用户无需改写约束,Vivado仍然可以自动推导出正确的频率/相位信息。劣势在于,用户并不清楚自动推导出的衍生钟的名字,当设计层次改变时,衍生钟的名字也有可能改变。但由于该衍生时钟的约束并非我们自定义的,因此可能会没有关注到它名字的改变,当我们使用者这些衍生时钟进行别的约束时,就会出现错误。

对衍生时钟进行约束的Tcl命令为:create_generated_clock

其格式为:

create_generated_clock -name <generated_clock_name> \
                       -source <master_clock_source_pin_or_port> \
                       -multiply_by <mult_factor> \
                       -divide_by <div_factor> \
                       -master_clock <master_clk> \
                       <pin_or_port>

参数 | 含义 :

-name | 时钟名称 -source | 产生该时钟的源时钟 -multiply_by | 源时钟的多少倍频 -divide_by | 源时钟的多少分频

从名字就能看出来,这个是约束我们在FPGA内部产生的衍生时钟, 所以参数在中有个-source,就是指定这个时钟是从哪里来的,这个时钟叫做master clock,是指上级时钟,区别于primary clock。 它可以是我们上面讲的primary clock,也可以是其他的衍生时钟。该命令不是设定周期或波形,而是描述时钟电路如何对上级时钟进行转换。这种转换可以是下面的关系:

  • 简单的频率分频
  • 简单的频率倍频
  • 频率倍频与分频的组合,获得一个非整数的比例,通常由MMCM或PLL完成
  • 相移或波形反相
  • 占空比改变
  • 上述所有关系的组合

延迟约束

对于这种约束使用的Tcl命令为:

set_input_delay

set_output_delay

这里暂时不做过多的说明,想要了解请看:

延迟约束

等理解深刻了在回来。

伪路径约束

这里简单说来,要对两种路径添加伪路径约束,一种是Inter-Clock Paths中的路径添加伪路径约束即可,另外还需要对异步复位添加伪路径约束。

具体说来:

异步复位呢?

set_false_path -from [get_ports rst_pin]

多周期路径约束

这里也不多说,见链接:

多周期路径约束


写在最后

在今年的秋招一开始,我就建立了一个微信群,在CSDN发布了一条博文,召集全国各地的同行朋友们共同加入,共同讨论秋招求职笔试,面试经验,目前已经有300多人加入,各位才华横溢,让我大开眼界。

到今天11月份,从西北地区最早结束到其他各地陆续结束,但是我们曾开玩笑说,本群继续召集下一届同行,作为先行者的我们也会对你们给予应有的帮助,欢迎加入,到你们晒工资的时候,会不会再次把我们倒挂呢?拭目以待。

由于人数较多,所以加我的时候务必备注:CSDN+地区或学校+职位(意向职位)+昵称。

我的微信号是:ljs521615
 

 

 

  • 15
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Java安全漫谈是一本关于Java安全的书籍,深入探讨了Java应用程序在网络环境中的安全性和相关的安全漏洞。该书内容涵盖了Java安全基础、Java虚拟机的安全机制、Java安全管理、Java安全开发等方面的知识。 首先,Java安全基础部分介绍了Java安全模型的原理和特点,包括Java类库的安全特性、权限管理和访问控制、安全策略配置等。这部分内容可帮助开发人员了解Java应用程序的安全需求,并提供相应的解决方案。 其次,Java虚拟机的安全机制是Java应用程序的基石。该书介绍了Java虚拟机的安全沙箱和类加载机制,并讨论了如何利用这些安全机制避免恶意代码的执行和隐患的防范。 此外,Java安全管理部分从用户角度出发,介绍了Java应用程序的安全管理工具和技术,如Java安全策略文件、权限管理和安全认证等。开发人员可以通过合理配置和使用这些工具来提高Java应用程序的安全性。 最后,该书还涉及了Java安全开发过程中的一些最佳实践和常见安全漏洞,如输入验证、跨站脚本攻击(XSS)、SQL注入、跨站请求伪造(CSRF)等。通过学习和掌握这些知识,开发人员可以编写出更加安全的Java应用程序。 总而言之,Java安全漫谈是一本全面讨论Java安全的书籍,内容涵盖了Java安全基础、Java虚拟机的安全机制、Java安全管理和Java安全开发等方面的知识。它对于开发人员和安全从业人员来说,都是一本重要的参考书,有助于提高Java应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李锐博恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值