- 博客(25)
- 问答 (1)
- 收藏
- 关注
原创 数据结构与算法学习(一)
快慢指针(数组去重)fast < n;fast++) {if (满足条件) {slow++;// 新长度对撞指针(有序数组)if (条件满足) {// 处理结果left++;right--;} else if (条件1) {left++;滑动窗口(子串问题)// 扩大窗口right++;while (窗口需要收缩) {// 收缩窗口left++;
2025-12-31 15:49:55
1099
原创 使用vscode和Makefie搭建一个代码调试环境
这个简化配置提供了核心的构建和调试功能,足够满足日常开发需求。两个基础插件已经包含了代码高亮、智能感知、调试器等核心功能。这个 Makefile 可以根据项目需求轻松扩展,支持静态库、动态库、单元测试等高级功能。即使只有这两个基础插件,也能配置出很好的调试环境。如果智能感知不工作,可以手动创建。
2025-11-04 20:58:18
998
原创 AXI总线与Burst突发传输简介
摘要: AXI总线是ARM提出的AMBA规范中的高性能片内通信标准,其核心特点包括通道分离、突发传输和乱序事务。通过5个独立通道(写地址、写数据、写响应、读地址、读数据),AXI实现高带宽与低延迟传输。突发传输通过单地址多数据机制提升效率,支持递增、环绕和固定三种类型。AXI协议演进至AXI4版本,并衍生出简化版AXI4-Lite和流式传输AXI4-Stream,适用于不同场景。突发传输通过减少地址开销显著提升总线利用率,是现代SoC设计的核心技术。
2025-10-27 15:15:49
798
原创 桥接模式的聚合关系及用虚析构函数的必要性
在软件设计中,我们经常遇到这样的情况:一个类有两个相互独立的维度(或称为变化维度)需要变化。例如:如果不使用桥接模式,通常会导致:桥接模式通过引入一个抽象层(即“桥”)来连接这两个维度,从而解决了类爆炸和紧密耦合的问题。桥接模式通常由以下四个核心角色组成:假设我们要绘制不同的形状(抽象维度)到不同的图形库(实现维度)。维度二:抽象 (Abstraction) - 形状客户端代码客户端可以在运行时轻松切换形状的实现方式,而无需更改形状的类定义。4. C++ 中桥接模式的关键实现细节在 C++ 中实
2025-10-22 17:19:45
689
原创 复制构造函数移动构造函数的三五法则
摘要: C++ 的复制构造函数用于通过同类型对象初始化新对象,其标准形式为 MyClass(const MyClass& other)。调用场景包括对象初始化、函数传值、返回值处理及容器操作。默认浅拷贝仅复制指针值,导致多个对象共享同一资源,可能引发双重释放或数据污染。需自定义复制构造函数实现深拷贝(独立分配内存),并遵循三/五法则(同时定义析构函数、复制/移动操作符)以确保资源安全管理。
2025-10-22 16:44:41
852
原创 001 Configuration结构体构造
DRAMSys配置系统采用模块化设计,通过主配置文件嵌套引用子配置文件的方式实现灵活配置。核心功能在DRAMSysConfiguration.cpp的from_path函数中实现,利用nlohmann/json库的解析回调机制,在解析JSON文件时动态加载子配置文件。当遇到特定键(如"MemSpec")时,系统会识别配置类型,并将值(子配置文件路径)替换为实际解析后的JSON内容。这种设计支持递归加载,允许子配置文件继续引用其他配置文件,实现了配置的高度可扩展性和可维护性。整个配置加载过
2025-07-29 19:07:50
941
原创 SOC中transaction的延迟和AT model实现方法
我们来详细分解在一个 SoC 中,硬件 Master 通过 NoC (Network-on-Chip) 到达 Target 需要经过的 latency,以及在 TLM-2.0 AT (Approximately Timed) 建模中这些 latency 通常对应哪些阶段的。是 AT 建模的关键特征,它允许在较高的抽象层次上进行精确的时序分析,同时保持了模型的松散耦合。是一个累计的、可修改的参数,在事务的不同阶段和模块间传递时,它会被不断更新和累加。,即从当前时间点算起,事务的下一个阶段预计何时发生。
2025-06-11 10:36:51
448
原创 VDK中接收memcpy传递结构体时,interface被访问多次问题
问题现象:在VDK软件中,SDMA接受从SCP/AP侧发来的命令帧后自动解析命令帧,然后执行相应操作,但是在使用SCP 给 SDMA发送命令帧时,发现SDMA的回调调用了多次,因此查看反汇编出来的代码,是否给SDMA的interface发送了多次的transaction,造成了回调调用多次。猜测:memcpy时,是多次transaction需要调试的sdma代码如下最关键的部分来了。
2025-05-21 17:22:47
865
原创 AI芯片中得训练任务和推理任务在底层得差异
大模型在训练和**推理(推断)**阶段使用 AI 芯片时,虽然整体流程类似,但目标、资源使用、底层算子实现上都有显著差异。下面我给你分点详细讲一下它们的区别
2025-04-23 16:14:41
1697
原创 NPU的编程模型和数据流驱动使用方法
NPU的编程模型从顶层到底层分为Dataflow programming model、High-Level Programming model、Low-level programming model、CT Kernel programming
2025-04-17 15:04:39
1381
原创 芯片算力的计算方式
算力=操作数×主频×并行单元=1×109×16,384=16.384 TOPS算力 = 操作数 \times 主频 \times 并行单元 = 1 \times 10^9 \times 16,384 = 16.384 \, \text{TOPS}算力的计算与芯片的硬件架构、数据类型支持、以及工作频率密切相关。算力=2×1.41 GHz×6912=19.5 TFLOPS算力 = 2 \times 1.41 \, \text{GHz} \times 6912 = 19.5 \, \text{TFLOPS}
2025-01-21 20:28:40
2603
原创 SystemC使用使用sc_spawn创建同一函数的不同名THREAD
在SPE的设计中,需要在一个SC_MODULE中有同一逻辑的多个不同SC_THREAD,直接使用for循环+SC_THREAD()去创建,在运行时会报警告,有同名函数,为此使用sc_spawn创建同一函数的不同名THREAD。
2025-01-12 14:28:59
336
原创 TLM2.0基础
TLM(Transaction-Level Modeling) 是 SystemC 的高级建模方法,用于描述系统的通信行为,特别是在硬件设计和验证中。TLM 是 SystemC 的一部分,用于提高仿真的效率和抽象性。以下是 TLM 的核心知识以及关键概念。通过学习以上内容,你可以掌握 TLM 的基本用法并应用于模块间的高级通信。若需更深入了解,可以逐步研究 TLM-2.0 的非阻塞传输和时序建模。TLM 定义了一种通过事务(Transaction)交换信息的通信方式,事务通常是对数据块的抽象。
2024-12-27 21:00:26
2731
原创 SystemC-Event
2. event可以在elaboration或者simulation期间通知,但在elaboration期间或从以下回调之一创建即时通知将导致错误。3. 即时通知(immeiate)被认为早于增量通知(delta)发生,增量通知早于定时(timed)通知。b).non zero time: 在给定时间创建定时通知,相对于调用函数通知时的模拟时间表示。1. 如果为已有待处理通知的事件调用函数通知,则只有计划在最早时间发生的通知才会保留。流程实例可以在事件发生时(即,当通知事件时)触发或恢复。
2024-12-27 20:59:01
582
原创 优化Swtich case结构为双层表查询+Lamda表达式
最近在工作中遇到了这样一段代码,是三层switch嵌套的结构,第一次swtich有4个case,第二层switch有上百个case,第二层switch下有的case下会有第三层swtich结构。多次调用这段代码时,如果第二个switch结构中多次访问的是靠后的几个case,由于处理器设计的原因,会逐case去刷新缓存,这会让代码执行效率变得很差。那有什么办法可以去优化这个结构呢?
2024-09-21 23:45:17
1717
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅