热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ise时钟约束_ISE时钟约束

本文使用 Zhihu On VSCode 创作并发布ISE 时钟约束记录一下项目中用到的知识,之前从来没用过ISE,由于目前公司原型验证的平台采用了较老的Vitex-6系列芯片,不得不学习下ISE的u

6e5f1526ba11c17435ca469b18ea683f.png

本文使用 Zhihu On VSCode 创作并发布

ISE 时钟约束

记录一下项目中用到的知识,之前从来没用过ISE,由于目前公司原型验证的平台采用了较老的Vitex-6系列芯片,不得不学习下ISE的ucf约束,如有错误望指正~
系统架构如图所示:

b9c914ff8582e83c26b4294f60a14d47.png
Image


系统的输入时钟有两个,一个板级的晶振为FPGA提供40M的时钟,另外射频SOC为FPGA提供一个16M的时钟,该时钟和送入FPGA的IQ ADC数据是同步的,因此在ISE中首先要对这两个时钟进行约束:

NET "Board_clk_40M" LOC PIN1;
NET "Board_clk_40M" TNM_NET = Board_clk_40M;
TIMESPEC TS_Board_clk_40M = PERIOD "Board_clk_40M" 25 ns HIGH 50%;

TNM/TNM_NET 在ISE的UCF约束文件中的语法表示分组约束,语法为{NET|INST|PIN}"ob_name" TNM_NET =“ New_group";其中NET表示从该ob_name的NET相连的所有时钟元素放入组New_group中,是比较常用的时钟约束,INST表示例化该模块上的时钟元素放在改组中,PIN就表示能够从该PIN访问的所有时钟元素放入组中。TNM_NET和TNM的区别大致就在于TNM_NET是可以穿过IBUF进行约束的,TNM则不行。TIMESPEC表示时序规范。
这里外部的40M时钟和16M时钟衍生了后面需要一系列时钟,UG612中推荐对每个使用的时钟进行周期约束,如下图所示:

d2e0bc544aed3439f6ab6c3cde88046e.png
Image


因此,最保险的时钟周期约束可以写为:

NET "Board_clk_40M" LOC PIN1;
NET "Board_clk_40M" TNM_NET = Board_clk_40M;
TIMESPEC TS_Board_clk_40M = PERIOD "Board_clk_40M" 25 ns HIGH 50%;
NET "CLK_480M" TNM_NET = CLK_480M;
TIMESPEC TS_CLK_480M = PERIOD "CLK_480M" 2 ns HIGH 50%;
NET "CLK_32M" TNM_NET = CLK_32M;
TIMESPEC TS_CLK_32M = PERIOD "CLK_32M" 31.25 ns HIGH 50%;
NET "CLK_64M" TNM_NET = CLK_64M;
TIMESPEC TS_CLK_64M = PERIOD "CLK_64M" 15.625 ns HIGH 50%;
NET "CLK_32k" TNM_NET = CLK_32k;
TIMESPEC TS_CLK_32k = PERIOD "CLK_32k" 31250 ns HIGH 50%;
NET "Top/System/lat_sys_clock" TNM_NET = Top/System/lat_sys_clock;
TIMESPEC TS_Top_System_lat_sys_clock = PERIOD "Top/System/lat_sys_clock" 25 ns HIGH 50%;
NET "Top/RF_module/reg_CLK_16M" TNM_NET = Top/RF_module/reg_CLK_16M;
TIMESPEC TS_Top_RF_module_reg_CLK_16M = PERIOD "Top/RF_module/reg_CLK_16M" 62.5 ns HIGH 50%;
NET "Top/RF_module/reg_CLK_16M_rx" TNM_NET = Top/RF_module/reg_CLK_16M_rx;
TIMESPEC TS_Top_RF_module_reg_CLK_16M_rx = PERIOD "Top/RF_module/reg_CLK_16M_rx" 62.5 ns HIGH 50%;
NET "Top/RF_module/CLK_32M_sync" TNM_NET = Top/RF_module/CLK_32M_sync;
TIMESPEC TS_Top_RF_module_CLK_32M_sync = PERIOD "Top/RF_module/CLK_32M_sync" 31.25 ns HIGH 50%;

在Vivado的时钟约束中有一个衍生时钟的概念,不需要像ISE中的UCF约束写的这么乱。
在XDC或者SDC约束中,STA工具会对每条时序路径进行分析,无论异步路径还是同步路径,但是这里很多的时序路径我们已经在内部做了同步或者使其满足setup/hold的处理,所以为了加快布局布线的时间,有些同步路径也可以忽略掉,当然异步路径是一定要去忽略的。语法如下:

7139a36e9fb76415c2c70de986360e7f.png
Image


这里我选择需要忽略时序检查的路径:

TIMESPEC TS_TIG1 = FROM "Top/System/lat_sys_clock" TO "Board_clk_40M" TIG;
TIMESPEC TS_TIG2 = FROM "Board_clk_40M" TO "Top/System/lat_sys_clock" TIG; # 注意反向路径也要约束
TIMESPEC TS_TIG3 = FROM "Top/System/lat_sys_clock" TO "CLK_480M" TIG;
TIMESPEC TS_TIG4 = FROM "CLK_480M" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG5 = FROM "Top/System/lat_sys_clock" TO "CLK_32M" TIG;
TIMESPEC TS_TIG6 = FROM "CLK_32M" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG7 = FROM "Top/System/lat_sys_clock" TO "CLK_64M" TIG;
TIMESPEC TS_TIG8 = FROM "CLK_64M" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG9 = FROM "Top/System/lat_sys_clock" TO "CLK_32k" TIG;
TIMESPEC TS_TIG10 = FROM "CLK_32k" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG11 = FROM "Top/System/lat_sys_clock" TO "Top/RF_module/reg_CLK_16M_rx" TIG;
TIMESPEC TS_TIG12 = FROM "Top/RF_module/reg_CLK_16M_rx" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG13 = FROM "Top/System/lat_sys_clock" TO "Top/RF_module/reg_CLK_16M" TIG;
TIMESPEC TS_TIG14 = FROM "Top/RF_module/reg_CLK_16M" TO "Top/System/lat_sys_clock" TIG;
TIMESPEC TS_TIG13 = FROM "Top/System/lat_sys_clock" TO "Top/RF_module/CLK_32M_sync" TIG;
TIMESPEC TS_TIG14 = FROM "Top/RF_module/CLK_32M_sync" TO "Top/System/lat_sys_clock" TIG;

这里的16M的RF时钟源是由这个CLK_480M来分频得到的,因此属于同步电路,需要让STA对其进行分析,而后面的Top/System/lat_sys_clock时钟和RF_module有着一些数据的交互,但这两个时钟源属于异步路径,所以需要对其忽略。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
author-avatar
zh1234之歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有