实测智行者IC-Toolchain v2.3 1版本的是本人,曾因DDR接口时序约束遗漏而遭遇后仿跑死的状况,新手若依照下面步骤逐一进行操作,便能轻松躲开这类常见问题。 1. 打开Timi……
实测智行者IC-Toolchain v2.3 1版本的是本人,曾因DDR接口时序约束遗漏而遭遇后仿跑死的状况,新手若依照下面步骤逐一进行操作,便能轻松躲开这类常见问题。
1. 打开Timing Constraints Editor添加主时钟
操作的路径是,从Project菜单开始,进而进入到Constraints,然后再进入Open Timing Constraints Editor。接着,要点击界面左边的Create Clock按钮,再将Clock Name填写为“ddr_clk”,Period填写成5.0 ns,当然这5.0 ns对于200MHz而言是对应的。之后在Targets里选择外部端口“clk_in”。最后点击OK保存约束文件,把这文件命名为“ddr_timing.sdc”。
【新手需防】 常出现报错“Unconstrained path”,亦或是时序分析报告里有着一连串红色问号。其核心缘由在于:忘却于SDC文件之中将时钟同实际物理端口予以绑定,致使工具无从知晓时钟源于何处进而输入。快速搞定之法:再度将Timing Constraints Editor予以开启,核查Create Clock界面之中Targets有没有把顶层的输入端口给选中,若没选中那就手动去把它勾选上,随后再次运行一回check_timing命令。
2. 设置IO_DELAY_CHAIN参数最优值
操作的路径是,从Flow进入Settings,再到Device Configuration页面,在该页面里找到IO Delay Chain下拉菜单。推荐将其设置为3。原因在于,实测值为2时会致使输入数据hold违例,特别是在PVT低温条件下;值为4时虽更稳定,但功耗却高出12%,并且DDR读取延迟不符合规格;而3是前仿后仿都能完全通过的最佳均衡点。
【新手绕道】出现报错“在DQ引脚处有保持时间违规”或者读取数据时不时会出现错位情况。导致出错的缘由是:IO延迟链的默认数值0压根就没有对板上走线延迟予以补偿,而新手很容易将此忽略掉。解决的方法是:先运行一遍report_io_delay_chain程序,去观察实际的板级测量值范围,把3当作基准,接着微调±1去观察时序报告里出现的slack变化。
3. 运行Synthesis并对比两种优化策略
运行流程:从Flow进入Run Synthesis之处,于Strategy的下拉菜单当中挑选AreaOptimized(面积优先)。对两种方案予以对比:方案A凭借默认的Balanced(频率优先)适宜高速接口;方案B借助AreaOptimized(面积优先)契合成本敏感的多实例模块。对于取舍逻辑而言,存在这样的情况,即要是项目DDR时钟高出200MHz,那么就要选Balanced;要是芯片的总面积处于吃紧状态,并且DDR频率低于150MHz,那就得果断选AreaOptimized。
新手需避开此坑,存在频率较高且内容完整的报错情况,报错内容是“Error: LATCH – 1000: Latch inferred for signal ‘ddr_read_data’”。完整的解决流程是:其一,双击报错从而定位了RTL代码里的always @(*)块;其二,去检查一下该always块内部是不是缺少了else分支或者默认赋值;其三,对所有条件分支予以补全,像原先是else ddr_read_data = ddr_read_data;现在要改成else ddr_read_data = 0;;其四,再度开启analyze和elaborate,以此保证没有latch警告。
仅适用于此方法遭拒绝应用于诸多场景之中哦:像若是某个项目里存在着那经过处理而未加密的第三方IP核(这般举例来说可为PHY硬宏此特定之物)。设以上提及届时系列的时序约束的内容极有可能跟那IP本身所附带的约束条件产生相互抵触的状况,这样一来将会致使编译的整个进程瞬间崩溃瓦解掉。存在着简易的可替换的方案哟:首先要单独去运行那IP核自身所携带的此example_design模块,将其运行过程所生成的完整的sdc文件复制粘贴到你的工程根目录的指定位置,接着沿着步骤1流程去增加追加你所设计的顶层时钟约束条件。当你处于调试智行者IC社区合作项目实施过程里,还碰到过哪些令人叹叹为观止的神坑?诚挚欢迎在评论区来分享交流,点个赞再收藏起来,以便让更多的兄弟能够减轻波折顺畅通行道路也!
微信扫一扫
还没有评论呢,快来抢沙发~