- 博客(273)
- 收藏
- 关注
原创 SIMON 32/64加密电路的实现(System Verilog)
SIMON加密算法的分组长度、密钥长度以及必要的参数配置如下图:本次需要实现的是SIMON 32/64,即分组长度2n=32,密钥长度mn=64,需要进行32轮加密。
2024-02-26 23:23:07
3805
1
原创 C 语言 restrict 关键字深度解析:从“独占访问”承诺到编译器激进优化
restrict的承诺是强制性的。一旦你违反了这个承诺(例如,把指向同一块内存的两个指针,都标记为restrict传给同一个函数),程序的行为就变成了未定义行为(Undefined Behavior, UB)。这意味着编译器无需为此负责,程序可能崩溃、产生错误结果,或者在高优化等级下出现难以调试的“玄学”bug。所以,使用restrict的前提是:你 100% 确定指针所指的内存没有重叠。对于像memmove这种明确允许内存重叠的函数,绝对不能对其参数使用restrict。restrict是一个用于。
2026-10-24 23:19:03
162
原创 线程同步完整教程:从互斥锁到信号量的 C 语言实战指南
本文系统讲解线程同步的核心概念与实践,涵盖竞态条件、数据竞争与临界区等关键术语。通过 counter++ 的典型错误示例揭示共享资源访问问题,引出互斥锁(Mutex)与条件变量(Condition Variable)两大核心机制。详细演示了互斥锁的加锁/解锁、递归锁、错误检查锁的使用,并强调临界区最小化原则;通过生产者-消费者模型完整展示条件变量的原子唤醒机制与配合互斥锁的正确用法。内容包含可运行代码、常见陷阱及最佳实践,是掌握POSIX线程同步的完整指南。
2026-10-22 14:33:10
328
原创 pthread 六大生命周期函数详解:从创建到回收的完整实践
该代码演示了pthread线程创建与管理的全过程:通过pthread_create创建三个线程,分别使用pthread_join等待主线程结束、pthread_detach分离线程以自动回收资源、pthread_cancel请求取消线程。但存在多个严重问题:pthread_exit(&t)返回局部变量地址导致悬空指针;pthread_join获取的返回值无效;pthread_cancel因无取消点而失效;主线程用pthread_exit(NULL)退出,未终止进程,可能导致资源泄漏。此外,多线程共享全局变量
2026-10-22 14:32:18
301
原创 多线程还是多进程?一文读懂并发选型的关键决策
任务是 CPU 密集型吗?→ 是 →多进程(Python)或线程池(Java/Go等)。任务是 I/O 密集型吗?→ 是 →多线程(或协程/异步 I/O)。稳定性是否压倒一切?→ 是 → 考虑多进程,利用其故障隔离性。需要频繁创建/切换,或数据共享极度频繁?→ 是 → 倾向于多线程(注意同步)。混合型任务,不想过度设计?→ 从线程池开始,观察瓶颈后再决定是否拆分。最终的选择往往是在性能收益与工程复杂度之间取得平衡。
2026-10-19 14:28:03
524
原创 UVM 序列(Sequence)组织详解
UVM Sequence 机制实现激励生成与驱动解耦,核心由 sequence(产生事务)、sequencer(仲裁调度)和 item(事务数据)构成。支持顺序、循环、并行与条件组织,通过分层设计实现复用性。虚拟序列(Virtual Sequence)协调多agent激励,依托虚拟 sequencer 管理多个物理 sequencer,提升平台可扩展性。序列启动依赖 start() 及 uvm_do 宏,支持优先级与约束控制,仲裁默认 FIFO,可自定义策略。掌握其组织逻辑是构建高效验证平台的关键。
2026-10-19 14:14:05
475
原创 UVM 中 raise_objection 与 drop_objection 的作用与重要性详解
raise_objection 和 drop_objection 是 UVM 中控制 phase 结束的关键机制。raise_objection 通知 UVM 当前任务尚未完成,阻止 phase 提前结束;drop_objection 表示任务已完成,允许 phase 结束。若缺少它们,run_phase 将在时间 0 结束,导致 sequence 无法执行。二者确保仿真时间正确推进,是 UVM 验证流程中不可或缺的核心机制。
2026-10-16 15:30:52
284
原创 UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
概念含义常见做法REQ请求事务类型,sequence 发给 driver扩展RSP响应事务类型,driver 返回给 sequence通常与REQ相同参数化 driver默认RSP = REQ结束当前 item,可选返回 rspdriver 处理完后调用单独发送 response一个 req 多个 rsp 时使用sequence 获取 response之后调用REQ 是“请求”,RSP 是“响应”。
2026-10-16 15:30:31
342
原创 UVM Sequencer 深度解析:FIFO 深度、req/rsp 应答模型与高频面试坑
UVM sequencer内置两个FIFO:req_fifo(默认深度1)缓存待处理请求,rsp_fifo存储返回响应。可通过set_depth()统一设置深度,或用set_rsp_depth()单独调整。工作模式分NO_RSP与WITH_RSP,后者需通过item_done(rsp)或put_response(rsp)回传响应,sequence使用get_response()同步获取,依赖transaction_id配对。注意避免重复发送rsp、手动赋值ID及在无应答模式调用get_response。支持
2026-10-15 10:33:58
317
原创 UVM Sequence 机制深度解析:握手时序、仲裁与锁机制(附面试速记)
摘要(148字): UVM中,start_item与finish_item实现2步握手,finish_item阻塞直至item_done。sequencer通过仲裁机制管理多sequence并发请求,支持FIFO、随机、优先级等5种算法。try_get_next_item非阻塞取item,适用于需并行处理的driver。lock/grab可使sequence独占sequencer,连续发送多个item,避免被抢占,其中grab具更高优先级。合理使用可保障突发传输完整性,提升测试效率。
2026-10-15 10:33:43
161
原创 UVM sequence-driver 通信模型(详细讲解)
UVM中sequence-driver采用pull模型,通过uvm_seq_item_pull_port/export实现2步握手通信:driver调用get_next_item()主动拉取item,处理完成后调用item_done()通知sequencer。sequence在body()中生成事务并调用start_item()/finish_item(),确保激励按序传递。该机制保证了时序同步与数据完整性,是UVM验证平台的标准通信模式。
2026-10-14 15:41:27
197
原创 UVM 面试高频:uvm_test_top 与 uvm_config_db 路径机制全解析
该代码演示UVM配置数据库(uvm_config_db)的使用机制:在test1中通过set向全局数据库注入参数,子组件comp1在build_phase中通过get获取这些参数并覆盖默认值。核心原理是自上而下构建阶段,父组件先set,子组件后get。日志中路径显示为uvm_test_top.c1,因run_test("test1")创建的顶层实例名固定为uvm_test_top,而非类名test1。若需在路径中出现test1,可将test1作为子组件嵌套于uvm_test_top之下,形成uvm_test
2026-10-14 15:41:03
196
原创 UVM 组件层次结构详解:从 `::` 到 `this` 的完整解析
该代码展示了UVM层次化组件结构:test1(继承uvm_test)在build_phase中创建topcomp实例,后者又创建两个subcomp子组件。通过type_id::create实现工厂模式创建,形成父子关系树。::用于访问类的静态成员(如type_id),确保组件注册与实例化。整体遵循UVM生命周期流程,构建出完整的测试环境。
2026-10-13 10:07:03
264
原创 UVM工厂模式
在UVM中,new是直接调用构造函数创建对象,绕过工厂,无法被覆盖;而create通过type_id::create调用UVM factory,允许在运行时动态替换为子类(如通过set_type_override),实现灵活的组件替换与扩展。因此,c2和o2使用create是为了支持工厂模式,便于测试配置和重用,而c1和o1使用new则仅用于简单、固定实例创建。
2026-10-13 10:06:08
136
原创 异步FIFO为什么用打两拍的格雷码?
异步FIFO中,采用格雷码与两级同步器确保指针跨时钟域采样安全,避免多位跳变导致误判;满判断在写时钟域进行,使写侧能第一时间获知“可能满”状态,提前停止写操作,防止溢出。尽管信号存在2~3拍滞后,但为保守设计,宁可早停不可溢出,保障数据安全。
2026-10-12 16:21:10
330
原创 STA 与 CDC
本文系统梳理了数字IC设计中的STA(静态时序分析)与CDC(跨时钟域)核心概念。STA通过分析时序路径的建立/保持时间余量(slack),确保同步电路时序正确,关键指标包括WNS、TNS等;需结合SDC约束与多模式多角(PVT)场景进行验证。CDC则解决异步时钟间的数据安全问题,防止亚稳态、数据丢失与错乱,常用方案包括两级触发器同步、握手协议、异步FIFO及格雷码编码。两者互补:STA保障同步时序,CDC确保异步交互安全,共同构成芯片时序可靠性基石。
2026-10-12 16:05:38
1897
原创 C++未销毁实例重复关联的问题与解决方案
战斗场景代码中实例化了一个shop类,该类能够生成阳光,我在重置该战斗场景时没有delete这个类,然后运行时发现,当我多次进入场景并退出重进时,发现阳光生成的速度变快了,这是为什么?
2025-07-27 01:48:09
531
原创 通过修改类的静态变量能够实现对已经实例化类的立即控制
C++中已经实例化的并执行类,如果在其他函数中修改了该类声明中的变量值,该变量会不会在执行过程中立即反映出修改后变量的效果?
2025-07-27 01:47:42
679
原创 告别束缚:这款“隐形心电监测仪”让心脏健康管理更自由
原文DOI:https://doi.org/10.1038/s41467-025-58390-5。
2025-07-24 17:08:44
1270
原创 贴在皮肤上的 “健康预警神器”—— 无芯片可穿戴设备来了!
原文DOI: https://doi.org/10.1038/s41467-025-60854-7。
2025-07-24 16:31:56
1441
原创 QT解析文本框数据——详解
该函数实现了基本的数据解析功能,但在错误处理、数据验证和用户反馈方面有改进空间。通过增强正则表达式、添加详细的错误日志、优化数据处理逻辑,可以提高代码的健壮性和可维护性。建议根据实际业务需求扩展功能,如支持更多输入格式、增加配置选项和完善测试用例。
2025-07-10 21:01:53
902
原创 QT解析文本框数据——概述
这段代码是Qt框架下的C++函数,用于解析界面输入的业务数据和权重数据。清空之前的业务数据和权重数据从界面获取业务数据文本并解析从界面获取权重数据文本并解析验证数据有效性为没有设置权重的业务设置默认权重。
2025-07-10 21:00:18
663
原创 Qt自定义控件(9)——径向渐变QRadialGradient、圆锥渐变QConicalGradient
是 Qt 框架中用于创建径向渐变的类,它能实现从中心点向外辐射的圆形渐变效果。径向渐变常用于模拟光源、创建立体感或设计现代 UI 元素。径向渐变以和定义,颜色从焦点向圆周边缘平滑过渡。centerradiusfocalPointcolor焦点决定了颜色的起始位置,常用于模拟光源偏移效果。通过,你可以轻松创建出具有深度感和立体感的视觉效果,为应用界面增添专业度和现代感。
2025-07-09 17:28:42
1035
原创 通信网理论基础作业:GPS和WFQ调度的实现
信息科学技术学院 24信息与通信工程学硕这段时间学了点Qt,正好用这个作业练练手,我把所有工作过程都写了上来,所以可能全文比较长。本文将同步更新在CSDN,相关调度的程序将作为附件放在网上,欢迎下载试用!上图演示的是教学PPT上的例子,权重为1:1,该程序理论上能支持最多10个业务的调度,但由于时间有限,没有做具体的测试。声明:本部分由AI(豆包)生成,仅供算法实现前的学习使用,提示词如下:GPS(Generalized Processor Sharing)是一种理想的调度模型,其核心思想是根据每个流
2025-07-09 00:15:24
12318
原创 Qt自定义控件(8)——渐变QLinearGradient类与QBrush
是 Qt 框架中用于创建线性渐变填充的核心类,广泛应用于界面设计、数据可视化和图形渲染。用于创建线性渐变,即颜色沿直线方向平滑过渡。它定义了渐变的起点、终点和颜色分布。的灵活组合,你可以创建出丰富多样的视觉效果,提升应用的美观度和专业性。结合使用,将渐变应用到图形中。用于定义填充图案,可与。
2025-07-08 11:00:51
815
原创 Qt自定义控件(6)—— QPainter画家:绘制形状drawPie
是 Qt 框架中用于绘制扇形的核心方法,属于QPainter类的形状绘制函数。扇形是由圆弧和两条半径组成的闭合图形,常用于饼图、进度指示器等场景。
2025-07-07 23:44:46
828
原创 Qt自定义控件(5)——QPainter画家:绘制形状drawEllipse、drawArc
在Qt中,QPainter的函数用于绘制椭圆或圆形,是绘图中常用的基础操作。以下是关于若需绘制椭圆的一部分(圆弧),可使用drawArc()drawArc()通过结合QPen和QBrush的属性设置,可以实现各种椭圆和圆形的绘制需求,包括空心、实心、带图案填充等效果。
2025-07-07 23:44:37
1988
原创 Qt自定义控件(4)——QPainter画家:绘制形状drawLine、drawRect
在Qt中,QPainter的drawLine()函数用于绘制直线段,是绘图中最基础的操作之一。以下是关于drawLine()(x1, y1)(x2, y2)p1p2若需绘制多条不连续的线,可使用drawLine()通过结合QPen的属性设置,drawLine()可以满足各种线条绘制需求。
2025-07-05 15:30:11
2023
原创 Qt自定义控件(3)——QPainter画家:绘制文字drawtext
在Qt框架里,QPainter类的drawText()函数功能丰富,可满足多种文字绘制需求。
2025-07-05 15:30:01
2073
原创 Qt自定义控件(2)——QPainter画家
在或其他合适的地方创建QPainter对象通过QPen设置线条属性,通过QBrush设置填充属性使用绘图函数绘制各种图形(线条、矩形、椭圆等)利用变换、抗锯齿等高级特性增强绘制效果绘制完成后QPainter对象自动销毁注意事项QPainter必须在有效绘制设备上使用避免在中执行耗时操作合理使用缓存机制(如QPixmap)提高性能掌握QPainter的使用是开发精美Qt界面的基础,结合QPen和QBrush的灵活配置,可以实现从简单UI到复杂图表的各种绘制需求。
2025-07-04 13:35:42
690
原创 C++面向对象9——模板、函数模板与类模板
函数模板:用于创建通用函数,减少代码重复,提高可维护性。类模板:用于创建通用类,如容器、算法、智能指针等,是STL的核心。模板的本质:将类型参数化,实现代码复用和泛型编程。注意事项:模板定义通常放在头文件中,因为编译器需要看到完整定义才能实例化。
2025-07-03 10:27:58
846
原创 QT记事本5——根据光标位置变化配置label显示、label显示问题
此代码基本实现了根据光标位置更新标签显示的功能,不过在国际化支持和线程安全方面还有一定的提升空间。在简单应用场景中可以直接使用,但在复杂应用中建议按照上述建议进行优化。
2025-07-03 10:27:30
537
原创 QT记事本4——下拉框修改值后解决乱码问题
该代码通过动态切换编码重新解析文件内容的思路是正确的,但需要注意编码映射的准确性、文件指针的重置以及错误处理。优化后的代码增强了鲁棒性,避免了潜在的乱码问题和性能瓶颈。
2025-07-02 15:09:59
594
原创 QT记事本3——下拉框comboBox、下拉框编码值传给QTextStream类
这段代码实现了基于编码映射的文件读取功能,但在健壮性和兼容性上有提升空间。通过添加错误处理、优化编码映射机制和完善资源管理,可以使代码更加稳定可靠。同时,针对Qt 6的特性,应使用推荐的。
2025-07-02 15:09:45
3021
原创 QT记事本2——文本打开、呈现、保存
这段代码实现了基本的文件打开功能,但缺乏健壮性和用户友好性。通过添加错误处理、优化文件读取方式和改进用户交互,可以提升程序的稳定性和可用性。
2025-07-01 13:17:58
916
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅