静态时序分析:时钟组间的逻辑独立、物理独立和异步的区别
相关阅读
静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html
当设计中存在多个时钟(同步或异步)时,该如何使用SDC命令约束设计呢?本文就将对此进行讨论。
逻辑独立
例1 多个时钟完全逻辑独立
图1 逻辑独立的时钟
以图1所示的待综合设计为例, 其中CLK1和CLK2是来自同一个晶振的分频时钟,频率分别是500MHz和750MHz,由于有确定的相位关系,它们是同步的。
可以注意到,在待综合设计中两个时钟域不会出现交互情况,但来自两个时钟域的信号通过多路复用器驱动输出端口OUT,而输出端口OUT在外部解复用并分别驱动各自时钟域的寄存器。
由于两个多路复用/解复用器的选择端是连接在一起的,因此当选择输出CLK1时钟域的信号时,输出端口OUT驱动外部的CLK1时钟域的寄存器;当选择输出CLK2时钟域的信号时,输出端口OUT驱动外部的CLK2时钟域的寄存器;
假设使用以下的SDC命令约束待综合设计,会发生什么?
create_clock -period 2.0 [get_ports CLK1]
create_clock -period [expr {1000/750.0}] [get_ports CLK2]
set_output_delay -max 0.15 -clock [get_clocks CLK1] [get_ports OUT1]
set_output_delay -max 0.52 -clock [get_clocks CLK2] -add_delay [get_ports OUT1] # 值得注意的是,为了在同一个端口定义两个输出延迟,需要在第二个set_output_delay命令时使用-add_delay选项,否则将会覆盖第一个输出延迟
在这种情况下,Design Compiler将会认为来自CLK1时钟域的信号可以被CLK2时钟域的寄存器捕获,而来自CLK2时钟域的信号可以被CLK1时钟域的寄存器捕获,从而在这几种情况中找出最严格的发射/捕获沿进行分析,这是过分约束的。实际上,我们希望Design Compiler忽略从CLK1时钟域到CLK2时钟域和CLK2时钟域到CLK1时钟域的时序分析。有两种方法可以完成该要求,使用set_false_path命令或set_clock_groups命令。
使用两条set_false_path命令,指定起点为时钟CLK1,终点为时钟CLK2的时序路径和起点为时钟CLK2,终点为时钟CLK1的时序路径为虚假路径;使用set_clock_groups命令创建两个逻辑独立的时钟组,分别包含CLK1和CLK2时钟。
create_clock -period 2.0 [get_ports CLK1]
create_clock -period [expr {1000/750.0}] [get_ports CLK2]
set_output_delay -max 0.15 -clock [get_clocks CLK1] [get_ports OUT1]
set_output_delay -max 0.52 -clock [get_clocks CLK2] -add_delay [get_ports OUT1]set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
# 两种方式均可
set_clock_groups -logically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
例2 多个时钟部分逻辑独立
图2 部分逻辑独立的时钟
图2所示的例2与例1相似,唯一的区别在于,在待综合设计中时钟域CLK1与时钟域CLK2之间存在时序路径(如图中的红线所示),如果还使用如下所示的SDC命令,会发生什么?
create_clock -period 2.0 [get_ports CLK1]
create_clock -period [expr {1000/750.0}] [get_ports CLK2]
set_output_delay -max 0.15 -clock [get_clocks CLK1] [get_ports OUT1]
set_output_delay -max 0.52 -clock [get_clocks CLK2] -add_delay [get_ports OUT1]set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
# 两种方式均可
set_clock_groups -logically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
这会导致待综合设计中时钟域CLK1与时钟域CLK2之间存在的时序路径也被忽略,这不是我们希望发生的,我们只希望忽略经过输出端口的不同时钟域间的时序路径。在这种情况下,只能使用set_false_path命令完成该要求,可以通过使用-through选项获得更加细粒度的控制,而不能使用set_clock_groups命令。
create_clock -period 2.0 [get_ports CLK1]
create_clock -period [expr {1000/750.0}] [get_ports CLK2]
set_output_delay -max 0.15 -clock [get_clocks CLK1] [get_ports OUT1]
set_output_delay -max 0.52 -clock [get_clocks CLK2] -add_delay [get_ports OUT1]set_false_path -from [get_clocks CLK1] \-through [get_ports OUT1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] \-through [get_ports OUT1] -to [get_clocks CLK1]
例3 多个时钟驱动同一个寄存器1
图3 多个时钟驱动同一个寄存器1
在图3所示的例3中,时钟CLK1和时钟CLK2首先经过输入端口SEL1控制的多路复用器,随后再连接到寄存器的时钟端,也就是说待综合设计中的寄存器要么被时钟CLK1驱动,要么被时钟CLK2驱动。但是默认情况下,Design Compiler不会考虑多路复用器的选择性并认为多个时钟能驱动一个寄存器(该行为可以通过timing_enable_multiple_clocks_per_reg变量改变),因此来自CLK1时钟域的信号可以被CLK2时钟域的寄存器捕获,而来自CLK2时钟域的信号可以被CLK1时钟域的寄存器捕获,Design Compiler将在这几种情况中找出最严格的发射/捕获沿进行分析,这是过分约束的。实际上,我们希望Design Compiler忽略从CLK1时钟域到CLK2时钟域和CLK2时钟域到CLK1时钟域的时序分析。有四种方法可以完成该要求,使用set_disable_timing命令、set_case_analysis命令、set_false_path命令或set_clock_groups命令。
使用set_disable_timing可以将某个时钟从多路复用器输入端到输出端的时序弧中断,从而忽略有关该时钟的分析;使用set_case_analysis命令可以指定输入端口SEL1的值,从而只允许某个时钟经过多路复用器,从而忽略其他时钟的分析。
create_clock -period ... [get_ports CLK1]
create_clock -period ... [get_ports CLK2]
set_disable_timing [get_cell MUX] -from A -to Y
# 两种方式均可
set_case_analysis 0 [get_port SEL1]
上面这两种该方法的缺点也很明显,即只能选择某一个时钟进行约束,综合时并不会考虑到其他时钟的影响,这依赖用户选择最严格的时钟进行约束,对于例3这种简单情况下尚可接受,但在例4所示的复杂情况下就会变得困难。
使用两条set_false_path命令,指定起点为时钟CLK1,终点为时钟CLK2的时序路径和起点为时钟CLK2,终点为时钟CLK1的时序路径为虚假路径;使用set_clock_groups命令创建两个逻辑独立的时钟组,分别包含CLK1和CLK2时钟。
create_clock -period ... [get_ports CLK1]
create_clock -period ... [get_ports CLK2]set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
# 两种方式均可
set_clock_groups -logically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
例4 多个时钟驱动同一个寄存器2
图4 多个时钟驱动同一个寄存器2
在图4所示的例4中,时钟CLK1和时钟CLK2首先经过输入端口SEL1控制的多路复用器,随后再连接到部分寄存器的时钟端;时钟CLK3和时钟CLK4首先经过输入端口SEL2控制的多路复用器,随后再连接到部分寄存器的时钟端。在这种情况下,我们希望Design Compiler忽略CLK1时钟域与CLK2时钟域和CLK3时钟域与CLK4时钟域之间的时序分析。与例3类似,有四种方法可以完成该要求,使用set_disable_timing命令、set_case_analysis命令、set_false_path命令或set_clock_groups命令。
使用set_disable_timing命令或使用set_case_analysis命令的缺点已经在例3中进行了说明,时序分析只能在时钟CLK1或时钟CLK2与时钟CLK3或时钟CLK4之间进行,这依赖用户选择最严格的时钟对进行约束。
使用四条set_false_path命令,指定起点为时钟CLK1,终点为时钟CLK2的时序路径、起点为时钟CLK2,终点为时钟CLK1、起点为时钟CLK3,终点为时钟CLK4的时序路径和起点为时钟CLK4,终点为时钟CLK3的时序路径的时序路径为虚假路径;使用两条set_clock_groups命令创建逻辑独立的时钟组,其中一对时钟组包含CLK1和CLK2时钟,另一对时钟组包含CLK3和CLK4时钟。
create_clock -period ... [get_ports CLK1]
create_clock -period ... [get_ports CLK2]
create_clock -period ... [get_ports CLK3]
create_clock -period ... [get_ports CLK4]set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
set_false_path -from [get_clocks CLK3] -to [get_clocks CLK4]
set_false_path -from [get_clocks CLK4] -to [get_clocks CLK3]
# 两种方式均可
set_clock_groups -logically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
set_clock_groups -logically_exclusive -group [get_clocks CLK3] -group [get_clocks CLK4]
例5 多个时钟驱动同一个寄存器3
图5 多个时钟驱动同一个寄存器3
图5所示的例5与例4相似,唯一的区别在于,两个多路复用器的选择端是连接在一起的,只能固定选择时钟CLK1与时钟CLK3或时钟CLK2与时钟CLK4。在这种情况下,我们希望Design Compiler忽略CLK1时钟域与CLK2时钟域、CLK3时钟域与CLK4时钟域、CLK1时钟域与CLK4时钟域和CLK2时钟域与CLK3时钟域之间的时序分析。
使用set_disable_timing命令或使用set_case_analysis命令的缺点已经在例3中进行了说明,时序分析只能在时钟CLK1与时钟CLK3之间或时钟CLK1与时钟CLK3之间进行,这依赖用户选择最严格的时钟对进行约束。
如果使用set_false_path命令,则需使用八条时序路径为虚假路径;而只需使用一条set_clock_groups命令创建两个逻辑独立的时钟组,分别包含CLK1、CLK3和CLK2、CLK4时钟。
create_clock -period ... [get_ports CLK1]
create_clock -period ... [get_ports CLK2]
create_clock -period ... [get_ports CLK3]
create_clock -period ... [get_ports CLK4]set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
set_false_path -from [get_clocks CLK3] -to [get_clocks CLK4]
set_false_path -from [get_clocks CLK4] -to [get_clocks CLK3]
set_false_path -from [get_clocks CLK1] -to [get_clocks CLK4]
set_false_path -from [get_clocks CLK4] -to [get_clocks CLK1]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK3]
set_false_path -from [get_clocks CLK3] -to [get_clocks CLK2]
# 两种方式均可
set_clock_groups -logically_exclusive -group "CLK1 CLK3" -group "CLK2 CLK4"
物理独立
例6 多个时钟物理独立
图6 物理独立的时钟
在例2、例3和例4中,在使用set_clock_groups命令时添加了-logically_exclusive选项,那么什么是逻辑独立呢?对于Design Compiler而言,逻辑独立的时钟组可以被简单理解为,不在这些时钟组之间进行时序分析,但对于IC Compiler或PrimeTime-SI而言,逻辑独立的时钟组之间会进行串扰分析,这是基于侵害者和受害者之间的时序重叠窗口进行的。
例6其实和例3几乎完全一样,唯一的区别在于,时钟CLK1和时钟CLK2是在待综合设计外部经过多路复用器然后从同一个输入端口Clk输入,在这种情况下会在输入端口Clk上定义两个时钟,但在使用set_clock_groups命令时还应该使用-logically_exclusive选项吗?
create_clock -period ... -name CLK1 [get_ports Clk]
create_clock -period ... -name CLK2 -add [get_ports Clk] # 值得注意的是,为了在同一个端口定义两个时钟,需要在第二个create_clock命令时使用-add选项,否则将会覆盖第一个时钟set_clock_groups -logically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
答案是否定的。由于逻辑独立的时钟组之间会进行串扰分析,IC Compiler或PrimeTime-SI在分析时会考虑到两个时钟之间的时序重叠窗口,这很显然是不合理(悲观)的,因为在物理上这两个时钟并不会同时进入设计,因此这是过分约束的。
使用-physically_exclusive选项而不是-logically_exclusive选项,能够获得更加准确的串扰分析,尽管对于Design Compiler而言,这两个选项没有任何区别。
create_clock -period ... -name CLK1 [get_ports Clk]
create_clock -period ... -name CLK2 -add [get_ports Clk]set_clock_groups -physically_exclusive -group [get_clocks CLK1] -group [get_clocks CLK2]
也许有人会问,既然-physically_exclusive选项比-logically_exclusive选项能够获得更加准确的串扰分析,那为什么不干脆全用-physically_exclusive选项?例1就应该使用-logically_exclusive选项而不是-physically_exclusive选项,因为两个时钟可以同时存在设计内并且相互之间出现串扰。
异步
例7 多个时钟异步
图7 异步时钟
例1到例6所展示的都是同步时钟,它们来自于同一个晶振,而例7中的两个来自不同晶振输出的异步时钟,它们之间的相位关系是不可预测的,因为每个晶振稳定之后的相位都是不确定。可以从图7中看出,为了避免在跨时钟域时出现亚稳态,在CLKB时钟域中有两级触发器用于同步。
我们希望Design Compiler忽略CLKA时钟域与CLKB时钟域之间的时序分析,但此时需要使用-asynchronous选项,该选项在Design Compiler中与-physically_exclusive选项、logically_exclusive选项没有任何区别,但是IC Compiler或PrimeTime-SI在分析时会认为两个时钟之间拥有无限宽的时序重叠窗口。
create_clock -period ... [get_ports CLKA]
create_clock -period ... [get_ports CLKB]set_clock_groups -asynchronous -group [get_clocks CLKA] -group [get_clocks CLKB]
时钟分组的建议
1、如果设计中能共存多个时钟,但通过多路复用器只能选择其中一个,则使用-logically_exclusive选项。
2、如果设计中不能共存多个时钟(这一般出现在一个时钟源对象上定义了多个时钟),则使用-physically_exclusive选项。
3、如果设计中能共存多个时钟,但它们没有固定的相位关系,则使用-asynchronous选项。
相关文章:
静态时序分析:时钟组间的逻辑独立、物理独立和异步的区别
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 当设计中存在多个时钟(同步或异步)时,该如何使用SDC命令约束设计呢?本文就将对此进行讨论。 逻辑独立 例1 多个时钟完全逻辑独立 图1 逻辑…...
深入HBase——数据结构与算法
引入 通过前面的文章,我们对HBase已经有了基本认识,下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇(Column Family)本质上就是一棵LSM树(Log-Structured Merge-Tree)。LSM树…...
学习Linux准备2
使用win10系统带的wsl配置ubuntu系统,通过wsl功能我们可以更简单更轻松的获得Linux系统环境。 首先开启Windows自带的wsl功能 打开控制面板,选中启用或关闭Windows功能 这里我们点击进入 将上图红√点击上,点击确定,然后重新启动…...
MATLAB图像处理:图像分割方法
图像分割将图像划分为具有特定意义的子区域,是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术,提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…...
什么是“可迭代”
在 Python 中,“可迭代”(Iterable)是一个非常重要的概念,它指的是任何可以被逐个访问其元素的对象。换句话说,如果一个对象支持迭代操作(比如可以通过 for 循环逐个访问其元素),那么…...
使用Ubuntu搭建Java部署环境
White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🐹今日诗词:小舟从此逝,江海寄余生🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小…...
Linux 文件的三个时间:Access、Modify 和 Change
目录 一、文件的三个时间戳 1. 访问时间(Access Time) 2. 修改时间(Modify Time) 3. 更改时间(Change Time) 二、如何查看文件的三个时间戳 三、文件时间戳的变化规则 1. 修改文件内容 2. 修改文件…...
移植live555 上的 rtsp
一、V4L2视频采集模块(完整示例) #include <linux/videodev2.h> #include <sys/ioctl.h> #include <fcntl.h>// 初始化V4L2摄像头 int init_v4l2_camera(const char* dev_path, int width, int height) {int fd open(dev_path, O_RD…...
基于SpringBoot的“宠物救助及领养平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“宠物救助及领养平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 系统注册页面…...
Gemini 2.0助力科学突破,AI联合科学家系统登场
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
electron提升软件运行权限,以管理员权限运行
大家有任何想法,都可以联系博主沟通。 本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...
Docker 容器调试技巧
在开发和运维过程中,调试 Docker 容器中的应用或服务是一个常见且重要的任务。由于容器是相互隔离的,容器内部的日志和错误信息可能不像传统的服务器那样直观,因此掌握 Docker 容器调试技巧对于快速定位和解决问题至关重要。 本文将介绍一些…...
TSMaster【第七篇:千机百变——面板设计艺术】
武侠场景导入:唐门暗器阁的启示 江湖传言,唐门暗器之所以独步天下,全凭其「千机匣」中七十二种机关变化。TSMaster面板设计恰似打造暗器机关——控件如同飞镖、机簧、毒针,组合方式不同则威力迥异。昔日某新势力车型因仪表盘刷新…...
ctfshow——robots后台泄露
题目提示:总有人把后台地址写入robots,帮黑阔大佬们引路 题目如上图所示 根据提示,我们可以在URL上查看是否存在robots文件 打开后发现其中的内容如上图所示,存在一个flagishere.txt文件,我们可以继续在URL上进行操作…...
普通人怎样用好Deepseek?
第一章:准备篇(30分钟上手) DeepSeek 是一款功能强大的数据处理和分析工具,广泛应用于数据挖掘、机器学习、商业智能等领域。 本文将通过图文结合的方式,详细介绍 DeepSeek 的安装、配置、基本使用、高级功能以及实用…...
负载均衡集群( LVS 相关原理与集群构建 )
目录 1、LVS 相关原理 1.1、LVS集群的体系结构以及特点 1.1.1 LVS简介 1.1.2 LVS体系结构 1.1.3 LVS相关术语 1.1.4 LVS工作模式 1.1.5 LVS调度算法 1.2 LVS-DR集群介绍 1.2.1 LVS-DR模式工作原理 1.2.2 LVS-DR模式应用特点 1.2.3 LVS-DR模式ARP抑制 1.3 LVS – NA…...
前端面试-JavaScript 数据类型检测全解
目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测(兼容旧浏览器) 五、常见面试陷阱 六、最佳实践指南 七、扩…...
百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
在私有云环境中成功部署 DeepSeek 满血版并实现性能调优,并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试,成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...
微软CEO-纳德拉访谈-AGI计划
在与知名科技播客主播 Dwarkesh Patel 的深度访谈中,微软 CEO 萨提亚・纳德拉围绕 AI、量子计算、微软发展等多方面分享深刻见解,下面是针对访谈内容的介绍,其中还是有很多值得我们学习的地方。 1 AI 领域见解 影响力评估:纳德拉直言行业所标榜的 AGI 里程碑是 “无意义的基…...
Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数
目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...
1.4 嵌入式系统的软件
嵌入式系统的开发流程中,硬件和固件设计完成后,嵌入式软件承担起实现功能、用户交互、系统集成和性能优化等任务;嵌入式系统软件分为设备驱动、操作系统和应用程序三个层面。 因此嵌入式系统软件开发工程师通常分为三类:嵌入式系统…...
深蓝学院自主泊车第3次作业-IPM
目录 1 题目介绍2 求解 1 题目介绍 已知鱼眼相机的参数, image_width,表示图像的宽度image_height,表示图像的高度 ξ \xi ξ,表示鱼眼相机参数 k 1 k_1 k1、 k 2 k_2 k2,表示径向相机参数 p 1 p_1 p1、 p 2 p…...
Confluence 8.5.18 - windows 安装部署详解
本文我们所讲述的是Confluence - 8.5.18 -windows版本版本的详细安装破解步骤,与Confluence - 8.0.0之前的版本不同的是,部分文件名称发生了变化,以前的破解方式已不适用。 1.首先我们先准备安装所需要的文件 atlassian-confluence-8.5.18-x64.exemysql-connector-java-8.0…...
深入解析过滤器模式:数据筛选与处理的高效工具
过滤器模式:数据筛选与处理的高效工具 在软件开发的复杂领域中,数据的筛选与处理是常见的任务。过滤器模式作为一种实用的设计模式,为解决这类问题提供了有效的解决方案。它允许开发者根据不同的标准对一组对象进行过滤操作,从而…...
linux常用基础命令_最新版
常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...
曝光铁三角
一、曝光铁三角的关系解析 光圈(Aperture) 作用:控制光线进入相机的孔径大小,同时影响景深(画面清晰范围)。 数值规则:光圈值(如F/1.8、F/8)越小,孔径越大&am…...
reacct hook useState
useState useState 是一个 React Hook,允许函数组件在内部管理状态。 使用方法 let [str,setStr] useState(‘three’) useState接受的参数为初始值;返回一个数组 第一个元素:当前的状态值;第二个元素:一个更新该状…...
政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 下载项目 创建虚拟环境 安装项目依赖 安装 Gradio(UI) 运…...
计算机毕业设计SpringBoot+Vue.js学生读书笔记共享(源码+LW文档+PPT+讲解+开题报告)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
QEMU源码全解析 —— 内存虚拟化(17)
接前一篇文章:QEMU源码全解析 —— 内存虚拟化(16) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《...
Maven 构建中的安全性与合规性检查
在现代软件开发中,确保应用程序的安全性和合规性至关重要。随着开源软件和第三方依赖的广泛使用,构建过程中对依赖的安全性和合规性检查变得尤为重要。通过 Maven 构建工具,我们可以集成多种安全性和合规性检查机制,帮助开发者检测…...
Deepseek R1 和其他的大模型 共同辅助决策交通出行方案
比一比各家大模型 问题描述一、Deepseek R1通勤方式评估报告(一)评分模型说明(二)各选项评分明细(三)加权总分计算(四)结论 二、文心一言通勤方式评估(一)时间…...
HTTPS 通信流程
HTTPS 通信流程时序图: #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…...
C++——list模拟实现
目录 前言 一、list的结构 二、默认成员函数 构造函数 析构函数 clear 拷贝构造 赋值重载 swap 三、容量相关 empty size 四、数据访问 front/back 五、普通迭代器 begin/end 六、const迭代器 begin/end 七、插入数据 insert push_back push_front 八、…...
开发指南103-jpa的find**/get**全解
平台使用jpa来访问数据库。在dao层可以通过定义find**/get**函数,通过名字直接绑定数据库字段。find**和get**有一定区别: 1.get**方法查询不到数据抛出异常,find**方法查询不到数据则返回null。 2.get**是延迟加载,在真正访问返…...
初学者如何设置以及使用富文本编辑器[eclipse版]
手把手教你设置富文本编辑器 参考来源:UEditor Docs 初学者按我的步骤来就可以啦 一、设置ueditor编辑器 1.提取文件[文章最底部有链接提取方式] 2.解压文件并放到自己项目中,在WebContent目录下: 3. 修改jar包位置路径 到--> 注意&a…...
Flutter 启动优化
Dart VM在Flutter中的作用是什么?它负责执行Dart代码,无论是JIT还是AOT模式都需要它。在JIT模式下,VM随应用一起运行,而在AOT模式下,代码已经被编译成机器码,VM可能不需要运行时存在?不过实际上…...
Java Idea配置问题
在 cmd 里手动切换: set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_192 set PATH%JAVA_HOME%\bin;%PATH%在Idea的终端查看: java -versionClass com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tre JDK 版本不匹配 …...
百度搜索,能否将DeepSeek变成“内功”?
最近,所有的云平台和主流APP都在努力接入DeepSeek。其中,搜索类APP与搜索引擎更是“战况激烈”。那么问题来了,接入DeepSeek已经变成了标准配置,到底应该如何做出差异化?接入DeepSeek这件事能不能实现11大于2的效果&am…...
【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)
前言 上一次发文章已经是在两个月前了hhh,期间也是忙忙碌碌做了不少事情也鸽了不少东西… 本文我们来讲讲博主最近在项目中频繁使用的,也就是广泛运用于C#或者Java的一个常用编程机制(思路)-----委托和事件。由于C在语言特性上没…...
【Java学习】抽象类与接口
面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量: 成员方法: 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法,只有在…...
体育电竞比分网开发流程
开发一个体育电竞比分网的流程可以分为以下几个主要步骤: 1. 需求分析 目标用户:确定网站的主要用户群体,如体育迷、电竞爱好者等。 功能需求:列出网站需要实现的功能,如实时比分更新、赛事日程、新闻资讯、用户评论…...
vue2和vue3的主要区别
Vue 2 和 Vue 3 之间有几个主要区别,涉及到性能、功能和架构上的改进。以下是一些核心的区别: Composition API(组合式 API): Vue 2 使用的是选项式 API(Options API),即通过 data, …...
粘贴到Word里的图片显示不全
粘贴到Word里的图片显示不全,可从Word设置、图片本身、软件与系统等方面着手解决,具体方法如下: Word软件设置 经实践发现,图片在word行距的行距出现问题,可以按照如下调整行距进行处理 修改段落行距: 选…...
直角三角堰计算公式
直角三角堰的计算公式通常用于确定流经直角三角形形状的堰的流量。河北瑾航科技遥测终端机 通过采集液位数据(模拟量、串口485/232),计算得到瞬时流量,然后通过积分进行累计算出累积量;直角三角堰的流量计算公式为: 直角三角堰 计…...
细说Java 引用(强、软、弱、虚)和 GC 流程(一)
一、引用概览 1.1 引用简介 JDK1.2中引入了 Reference 抽象类及其子类,来满足不同场景的 JVM 垃圾回收工作: SoftReference 内存不足,GC发生时,引用的对象(没有强引用时)会被清理;高速缓存使用…...
C++,设计模式,【工厂方法模式】
文章目录 如何用汽车生产线理解工厂方法模式?一、传统生产方式的困境二、工厂方法模式解决方案三、模式应用场景四、模式优势分析五、现实应用启示✅C++,设计模式,【目录篇】 如何用汽车生产线理解工厂方法模式? 某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉…...
分布式之分布式ID
目录 需求 1. 全局唯一性 2. 高性能 3. 高可用性 4. 可扩展性 5. 有序性 6. 时间相关 7. 长度适中 8. 安全性 9. 分布式一致性 10. 易于集成 常见解决方案 选择依据 数据库号段模式 核心概念 工作流程 优点 缺点 实现示例 优化策略 适用场景 Snowflake雪…...
Innovus中快速获取timing path逻辑深度的golden脚本
在实际项目中我们经常会遇到一条timing path级数特别多,可能是一两页都翻不完。此时,我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑,哪些是PR工具插入的buffer和inverter。 数字IC后端手把手培训教程 | Clock Gating相关clock …...
tortoiseGit的使用和上传拉取
tortoiseGit的使用和上传拉取 下载TortoiseGit 通过网盘分享的文件:tortoiseGit.zip 链接: https://pan.baidu.com/s/1EOT_UsM9_OysRqXa8gES4A?pwd1234 提取码: 1234 在电脑桌面新建文件夹并进入 右击鼠标 将网址复制上去 用户名和密码是在git注册的用户名和…...