【心得】Lattice Diamond 后端约束实战小结
IOB约束
参考《插入IO寄存器和位置约束---lattice&diamond》,推荐的方法是:
1、在strategy设置【Map Design-IO Registering】为Auto
2、修改代码接口描述,添加/* synthesis syn_useioff = 1*/语句(也可以不加,见第3条),如:
input VSRC_CLK /* synthesis syn_useioff = 1*/,//I1,
output wire VSRC_RESET /* synthesis syn_useioff = 1*/,//O1,
input VSRC_VS /* synthesis syn_useioff = 1*/,//I1,
input VSRC_DE /* synthesis syn_useioff = 1*/,//I1,
input [:] VSRC_D /* synthesis syn_useioff = 1*/,//I16,
3、确保输入信号不被优化,可使用/* synthesis syn_preserve=1 */,将输入打拍的信号保留住。(注:这个才是关键,工具有时不理解为何要将输入信号多打几拍,就擅自帮我们将信号给优化了,这些需要保留的信号,都要使用preserve进行保留。)
//----------------------------------------------------------------------------
// Register & Wire Definition
//----------------------------------------------------------------------------
reg [:] hdmi_vs_dy,hdmi_hs_dy,hdmi_de_dy;
reg [:] hdmi_dat_d0/* synthesis syn_preserve=1 */;
reg [:] hdmi_dat_d1/* synthesis syn_preserve=1 */;
reg [:] hdmi_dat_d2/* synthesis syn_preserve=1 */;

检查IOB是否符合预期
方法1、打开【Tools-Spreadsheet View】,点击“Cell Mapping”选项卡,查看对应输入输出管脚的PIO Register是否为True。
方法2、也可以使用Follrpaln和Physical View查看:
1、在Map之后,打开Floorplan View,使用Ctrl+f进行net的查找,可以按 video_input_top_16b_inst0/video_in_inst/hdmi_dat_d0 方式,从TOP层层下去找到第一级寄存器信号名。
2、找到net之后,右键,使用Physical View查看。

管脚VSRC_0_D[4]旁边的后缀为MGIOL的模块,就是PIO Register。若没放入IOB,则前缀IOL_的模块不是蓝色。

查看信号延时
在Physical View,查找某个PIN脚信号,比如VSRC_1_CLK(类型选择component),然后点击该模块下边的net,右键Pin Pair Delay可查看该信号延时。


关于时序收敛
参考官网的帮助文档,Timing Closure 3.10。

该文档102页,关于时序收敛的一些建议:
1、综合Syplify Pro设置:
- 打开Pipelining and retiming
- 关闭Resource Sharing
- 可以使用sdc文件
2、查看Synplify Pro的报告,关注时钟频率的估计值。
3、Map设置:检测未约束的连接和路径;设置full name;Report Style选择Error Timing Report,这样只显示error的路径,方便快速定位问题。
4、第36页给出优化时序的建议:

5、使用GSR资源。Syplify设置里建议关闭,在MAP设置里打开。
6、使用PAR_ADJ关键字,使得在PAR阶段按过约束的频率进行P&R,但在TRACE分析时按正常频率分析(第46页、71页)。
7、尝试将关键路径UGROUP(第82页),以及97页的Packing相关逻辑。


8、关注logic levels是否过多。
进一步的详细帮助信息,可下载13.8M的《Lattice_Diamond_3_10_3_Help.pdf》。

《Lattice_Diamond_3_10_3_Help.pdf》第496页,给出UGROUP的具体用法,参考该方法进行位置约束如下:


297M高速设计几点原则:
1、FIFO或RAM要设置输出寄存(Lattice默认打1拍,寄存后,相当于打2拍输出)
2、涉及大位宽比较时,使用减法器替代加法器,就只用和0进行比较。
3、后端约束使用位置约束(Lattice使用UGROUP)
4、计数器不能大于11bit,大于的就只能拆分。
5、一些相对固定的变量,比如分辨率res_mode,显示模式disp_mode,可以在后端约束里,用BLOCK将其进行时序忽略。
=======================
by NicoWei
2019-3-16 22:20:08
=======================
【心得】Lattice Diamond 后端约束实战小结的更多相关文章
- js中各种跨域问题实战小结(二)
这里接上篇:js中各种跨域问题实战小结(一) 后面继续学习的过程中,对上面第一篇有稍作休整.下面继续第二部分: -->5.利用iframe和location.hash -->6.windo ...
- js中各种跨域问题实战小结(一)
什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...
- Lattice Diamond 和 ispLEVER 的不同之处
Lattice Diamond 和 ispLEVER.有一些不同,尤其是如何管理工程的不同,包括以下几点: 1.ispLEVER 有多种工程类型,不同的程序文件类型需要不同的类型的工程:但是Diamo ...
- Lattice Diamond 学习之编译、检查和设置约束
在新建工程以及完成代码的输入之后.则就要进行编译,并检测错误. 一. Generate Hierarchy(产生层次结构). 1. 点击Generate Hierarchy 图标或者Design -- ...
- Elasticsearch全文检索实战小结
一.项目概述 这是一个被我称之为“没有枪.没有炮,硬着头皮自己造”的项目.项目是和其它公司合作的三个核心模块开发. 使用ES的目的是: 1).采集数据.网站数据清洗后存入ES: 2).对外提供精确检索 ...
- Lattice Diamond安装
1.下载:到Lattice官网 http://www.latticesemi.com/ 注册一个lattice的账号后就可以去下载Diamond,登陆后如下图,根据自己系统情况选择对应的版本,我用的是 ...
- lattice diamond 3.7安装破解
第一步安装:执行.EXE文件,一直下一步,最后license选择没有USB什么的那个(具体记不清了). 第二步破解:安装完成后在环境变量中将license路径指定到license文件即可(LM_LIC ...
- 使用Junit对Spring进行单元测试实战小结
Demo代码: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath*:/ ...
- iBatis + SQL Server 项目开发实战小结
几年前跟随项目经理做的一个ERP小项目,自己业余时间整理的开发手册,供参考. 开发环境配置:编程环境为Microsoft Visual Studio 2010,数据库是SQL Server 2008 ...
随机推荐
- NLP第八条
今日!我虽啥也没干,但我还是有着学习的心的~ 也许是“遵义会议”呢 那也说不定 留下这句话再说 哈哈哈哈哈哈 只能抄抄NLP第八条了 谁叫我选了个灰常有意义的通识课咧 八,每一 ...
- render与vue组件和注册
<template> <div class="about"> <h1>This is an about page</h1> < ...
- Python 爬虫——抖音App视频抓包
APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...
- oracle 一些常用的sql优化规则
1.高效使用groupby 提高GROUP BY语句的效率,可以通过将不需要的记录在GROUP BY之前过滤掉. 低效: SELECT JOB ,AVG(SAL) FROM EMP GROUP BY ...
- vs 2017 vs code
vs 2017 Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH ==== ...
- Java基础——集合(持续更新中)
集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj); 往该集合中添加元素,一次添加一个 boolea ...
- mac-os安装autojump
一 概念 autojump是一个命令行工具,它可以使用快捷命令,直接跳转到配置好的目录,而不用管现在身在何处,依赖zsh. 一 安装 安装zsh:sh -c "$(curl -fsSL ht ...
- 从一道面试题探究 Integer 的实现
记得有次面试,面试官问我: 如何写一个方法交换两个 Integer 类型的值? 当时心里一惊,这是把我当小白了呀!交换两个数的值还不容易么,最简单的直接搞一个中间变量,然后就可以交换了… … 面试官随 ...
- docker快速搭建几个常用的第三方服务
本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch: 本篇涉及内容深 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1
代码已上传Github+Gitee,文末有地址 书说上文<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之十 || AOP面向切面编程浅 ...