智行者IC社区合作项目实测:三步避开编译坑

发布于 更新于
290
详情介绍
智行者IC社区持续更新技术干货、实操教程、案例分享与常见问题解答,为学习者提供实用的学习参考资料。

实测智行者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社区合作项目实施过程里,还碰到过哪些令人叹叹为观止的神坑?诚挚欢迎在评论区来分享交流,点个赞再收藏起来,以便让更多的兄弟能够减轻波折顺畅通行道路也!

常见问题(FAQ)

时序分析里出现 Unconstrained path 或者一串红色问号怎么办?
原因是没有把时钟和实际物理端口绑定,工具不知道时钟从哪里输入。重新打开时序约束编辑器,检查创建时钟界面里的目标选择有没有选中顶层输入端口,补上之后再运行 check_timing。
IO Delay Chain 参数设成多少比较合适?
推荐设成 3。实测值为 2 时在 PVT 低温条件下会引起输入数据 hold 违例,值为 4 更稳定但功耗高出 12% 且读取延迟不达标,3 是前仿后仿都能通过的均衡点。
综合时应该选面积优先还是频率优先?
项目 DDR 时钟高于 200MHz 就选默认的频率优先策略;芯片总面积吃紧、DDR 频率低于 150MHz 时果断选面积优先策略。
0 / 600
0 讨论
热门最新
总结
暂无总结