当前位置: 首页 > article >正文

quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘

因为只负责一个子模块,所以需要单独对该子模块进行综合和过OOC,这时候已经有一些加虚拟pin文件,敲命令让子模块能过OOC的方法。但这个方法的前提是先过综合,然后再敲命令让虚拟管脚命令成功,最终可以过OOC。

今天负责的这个模块的一个输入时钟是某个IP核的输入,所以这个IP核对这个输入时钟有要求限制。要求必须是PLL IP的输出时钟才可以。所以这个项目总工程能综合通过,但子模块却卡在了综合这里,一直过不了。我呢,太懒,不想改代码。琢磨了一天也没想出来咋办。

 

最后领导建议了。

方法一:自己在这个子模块基础上加个top,然后加上PLL IP,然后把这个时钟输出在作为输入接入子模块。这方案当然不是我想要的,哈哈。就不想写代码。

方法二:直接把整个工程跑综合,过了就算通过了。等于不再单独对这个子模块进行OOC检查了。

 

OOC:概念,out of context 的缩写

上下文无关综合。

这种概念我是来这家公司才知道的,因为之前公司整个项目都是自己做,不涉及子模块问题,但现在公司很系统很细节很螺丝钉,只负责子模块,就有OOC的环节,之前我一直以为就是整个项目跑实现implementation的意思。原来这个OOC是模拟这个过程,在不分配管脚的情况下。

官方解释:FPGA设计通常由多个模块组成,传统综合是将整个设计作为一个整体进行处理。而OOC综合允许独立地对设计中的各个模块进行综合,每个模块的综合过程不依赖于整个设计的上下文信息。

我可是够懒的了,做了好几年了,才理解这个词啥意思……

作用:

提高综合速度:当FPGA设计规模庞大,结构复杂时,整体综合会消耗大量的时间和系统资源。采用OOC综合,不同模块可以并行处理,(也就是不同模块负责人各干各的不用互相等),大大缩短了综合的总时间。例如,一个包含多个复杂IP核和自定义逻辑模块的大型FPGA设计,对各个模块分别进行OOC综合能显著提高效率。很显然小项目可能用不上,大项目甚至是芯片设计的那种可能会用上这种精细的工作。

优化模块性能:在独立综合每个模块时,可以针对该模块的特点进行更精细的优化设置。比如对于一个对时序要求极高的模块,可以单独为其设置更严格的时序约束和优化策略,而不受其他模块的影响,从而提升该模块的性能。

便于模块复用:通过OOC综合得到的模块具有更好的独立性和可移植性。在不同的设计项目中,如果需要复用某个模块,只需将该模块及其相关的OOC综合结果导入即可,无需重新对整个设计进行综合。

使用方式:

模块标记:在设计代码中,需要明确标记哪些模块要进行OOC综合。不同的FPGA开发工具标记方式可能有所不同。例如,在vivado中,可以通过设置属性来指定某个模块为OOC模块。

就我的经验而言,vivado开发这个过程比较容易,在设置中综合设置里面加上命令-mode out_of_context

具体是tools-settings-synthesis more options中输入

-mode out_of_context,然后implementation通过就等于过了OOC单独模块的无上下文综合。

而intel的quartus需要一些脚本操作来完成,相对复杂了一点。需要linux人来配合写个脚本啥的

2025.02.07

 

好啦!这次经验写到这里。说点题外话,这几年我一直没来写,原因是我进了一家外企,安全管理过于严格,电脑随时被监控,我不敢登录这里。最近打算离职了,突然试了一下,电脑上登录了,结果给我发邮件说我在韩国登录了该博客,吓死我。赶紧退出。所以现在是用手机登录来写的,比较麻烦。

这几年也学到了很多,其实如果电脑不被监控,我也会留下很多经验给大家分享,我是个记忆力极差的人,做完就忘。导致我一直有记录的习惯,下次再遇到就来翻一翻。可是这两年多的经验就失传了,遇到很多问题,但无法写下来,也带不出去公司,电脑u盘都不让带,我又记不住,面试的时候把我问的一愣一愣的,好像我是个骗子,都是编的经历一样,其实真的是做过但忘记了,所以人记性差真的吃亏啊。

面试也是给我说我技术深度不够……目前自卑的很。

简单的看到大家给我的评价,很高兴能帮助到大家,大家问我的问题可能也是很久了有些细节我自己也忘了,就不回复了。如果新工作保密要求不高我会再来分享经验的

 

 


http://www.kler.cn/a/537291.html

相关文章:

  • 电商平台的设计与实现(代码+数据库+LW)
  • 数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
  • MySQL 递归查询:with recursive
  • 记一次golang环境的变化
  • Linux TCP 编程详解与实例
  • DeepSeek本地部署保姆级教程
  • 运行时数据区概述及线程
  • ubuntu的terminator设置自动补全
  • 【论文精读】《Towards Deep Learning Models Resistant to Adversarial Attacks》
  • [论文阅读] Knowledge Fusion of Large Language Models
  • 【GeeRPC】Day1:服务端与消息编码
  • C++服务端开发注意事项总结
  • 苹果公司宣布正式开源 Xcode 引擎 Swift Build145
  • 清影2.0(AI视频生成)技术浅析(一)
  • 嵌入式面试题 C/C++常见面试题整理_7
  • UE5.1蓝图节点禁用编译
  • 基于RLS的自适应滤波器设计与Matlab实现
  • Win10 部署llama Factory 推荐教程和遇到的问题
  • 【2】Cisco SD-WAN 组件介绍
  • idea中git版本回退
  • JVM 中的四类引用:强、软、弱、虚
  • 24、深入理解与使用 Netty:Java 高性能网络编程的利器
  • (2024|ICLR,LLM 幻觉,事实性,知识层次)DoLa:通过对比层解码可提高大型语言模型的事实性
  • 2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血
  • 【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)
  • Maven概述与安装