- 博客(110)
- 收藏
- 关注
原创 从加法器到乘法器:一文吃透计算机算术的秘密武器(下)
本文系统梳理了数字电路设计中常见的加法器结构及其实现特性。主要内容包括:1)Ripple Carry Adder的基本串行结构及其低功耗特性;2)Carry Lookahead Adder通过预计算提升速度的原理;3)Carry Select Adder的双路并行计算机制;4)Parallel Prefix Adders系列的高性能实现方案。文章强调实际设计中应通过综合工具约束和RTL编码引导工具自动选择最优结构,并建议通过时序报告分析关键路径,针对不同位宽和频率需求进行实验验证。核心观点是理解加法器结构的
2025-05-26 16:46:39
1687
原创 从加法器到乘法器:一文吃透计算机算术的秘密武器(上)
如果你想设计出高性能芯片,必须从“写出能综合的 HDL”升级到“写出能优化、能分析的 HDL”。理解数据表示、加法器、乘法器原理,不是为了考试,而是为了让你掌握综合器的“思维逻辑”。本期只是入门篇:下一期,我们将深度对比 8 种加法器结构,从面积、速度、综合后层级逐个图解,并用真实综合脚本分析路径瓶颈。📘 后续将包括:CSA 树、多操作数加法器、浮点数综合、CORDIC 算法硬件化、Design Compiler 脚本调优全解析。
2025-05-26 09:38:03
2052
原创 揭秘 AddSub Operator:Synopsys DC 中加减运算符的底层构建与优化
是 DC datapath synthesis 的核心算术运算单元,涵盖加/减两种模式。通过 HLO 调度与重写,将 ADD 和 SUB 节点统一成一个可切换模式的 datapath operator。在 Mapping 阶段,优先匹配可配置 ALU Macro,否则展开为门级网络。构建失败通常源于位宽不匹配、调度不同步或模式冲突,通过合理约束与 RTL 组织可以有效避免。
2025-05-22 10:14:22
3486
原创 揭秘综合器的MUX构建逻辑:Synopsys Design Compiler中HLO与Datapath如何打造高效选择器结构
本文深入探讨了MUX(多路选择器)在RTL设计中的核心作用及其构建过程。MUX不仅是条件控制中的常见结构,还直接影响datapath的结构树形成、资源共享、功耗和面积等关键指标。文章详细介绍了MUX表达式的识别与解析、构建的关键前提、优化路径、构建结构、常见失败原因及Debug方法,并提供了优化策略。通过理解MUX的构建流程和优化技巧,设计者可以更有效地实现资源共享和面积节省,提升综合器的智能化能力。
2025-05-15 09:15:00
9397
原创 深入 datapath optimization:从 expression 到结构映射的全过程解析
本文详细介绍了从RTL表达式到Datapath结构的转换过程,涵盖了表达式树生成、表达式调度、结构重写、Datapath节点构建、控制逻辑生成以及优化实例等关键步骤。通过具体示例,如assign result = (a+b)*(c-d);,展示了如何将RTL表达式转换为表达式树,并进一步调度和重写以优化结构。文章还探讨了如何将表达式映射为可复用的结构组件,如加法器、乘法器和MUX,并介绍了共享路径识别和多路复用等优化技术。此外,提供了使用Design Compiler的实际技巧和调试Datapath合成的常
2025-05-14 09:15:00
12001
原创 Non-Booth 乘法器的全解析:从 RTL 表达式到部分积压缩的完整路径
Booth 编码乘法器(优化符号扩展/部分积)非 Booth(Non-Booth)乘法器直接使用被乘数与乘数的位级与逻辑组合,不使用 Booth 的重编码。这篇文章聚焦后者,即最基本也是最通用的结构化乘法器,在很多 ASIC/FPGA 设计中仍广泛应用,尤其是位宽较小时。Non-Booth 乘法器是 datapath 构建中最基础也最通用的组件。它虽不如 Booth 在面积和性能上有压缩优势,但胜在结构清晰、调试容易、RTL 可控度高。
2025-05-08 10:39:10
11799
原创 终结乘法瓶颈!带你彻底掌握 Booth Encoding 的秘密与架构
Booth 编码是一种简洁高效的位级优化技术,尤其适合构建大位宽、signed 类型的乘法器。通过智能的重编码机制,它帮助 datapath 减少部分积、降低压缩器使用数量,提升乘法器性能。特性是否压缩部分积✅ 是适合位宽中/大(≥8)是否需要符号扩展✅ 是(signed)构建结构。
2025-05-08 10:38:23
5510
原创 Wallace Tree vs. Dadda Tree:部分积压缩背后的两大阵营对决
在 datapath 优化阶段,特别是乘法器构建过程中,部分积(Partial Products)压缩是影响面积和时序的关键步骤。无论是 Booth 还是 Non-Booth,最终都生成若干组部分积位,这些位需要在硬件中以极高效率加总为一个最终的积。Dadda Tree在 Synopsys Design Compiler 中,DC 的底层 datapath 构建器会根据目标路径、PPA 策略自动选择其中之一,或者根据 library 支持情况固定使用某一类型。那么这两种结构本质上是怎么工作的?
2025-05-07 09:15:00
7057
原创 Booth Encoding vs. Non-Booth Multipliers —— 穿透 DC 架构看乘法器的底层博弈
在 datapath 构建阶段,乘法器是最重要的资源单元之一。面积最大时序瓶颈集中能力决定系统吞吐而 Synopsys Design Compiler (DC) 在构建乘法器结构时,核心决策之一就是:❓是否采用 Booth Encoding?❓如果不采用,怎么构建标准 non-Booth 乘法器?这并不是一个简单选择,而是涉及多个维度的性能平衡。维度Non-Booth部分积数量n个面积较大延迟多级加法器符号位支持需要扩展和修复构建复杂度中等优点实现简单,易调试缺点。
2025-05-06 09:15:00
6183
原创 Datapath Optimization Failure Debugging —— 从失败到逆转的全过程
Datapath 优化是 Synopsys Design Compiler 最复杂的模块之一。它不像普通逻辑优化那样线性、局部,而是要全局建模、调度、资源分配、构建共享结构,任何一点出问题都可能导致整段 RTL fallback 到通用逻辑综合路径。DC 不会报错,只会静悄悄 fallback。如果你不了解底层机制,就永远不会知道:“为啥我的设计这么大、这么慢?DC 的 Datapath 引擎没能识别/构建目标运算网络,只好用 RTL原始结构照搬或分裂为通用逻辑门去处理。
2025-05-05 09:15:00
5364
原创 Multiplier Optimization(乘法器优化)—— DC_SHELL 如何极致提升乘法器性能?
乘法器优化是 datapath 最核心的一环,DC用了一套 Booth压缩+Wallace树/达达树+共享重用的体系,动态在面积、时序、功耗三者之间寻找极致平衡。
2025-05-04 10:28:15
5416
原创 究极底层揭秘:MUX Construction Failure —— 为什么 Datapath 构建失败?如何彻底搞懂和避免?
🔵 在 Datapath Optimization 中,是一个核心步骤。把 RTL 中大量 if-else、case语句、条件赋值,归纳整理成有规律、高效的 MUX网络(多路选择器树)。如果在优化过程中,无法成功推导或建立这种 MUX结构⚡️一旦发生:Datapath 无法成功建立。设计 fallback 到一般逻辑综合(slow and large)。timing QoR (Quality of Result) 直接暴跌。
2025-04-30 09:15:00
5399
原创 深入揭秘:Datapath Optimization —— 高阶数据通路优化与跨周期绑定的底层机制!
Datapath Optimization 是把表达式的优化推向极致,不仅做静态结构构建,还动态调度运算资源、跨周期规划执行,从而实现极致的时序、面积、吞吐平衡。MUX Construction Failure 为什么会发生、底层机制是什么、如何避免?这是很多复杂 datapath 失败综合时最头疼的点, 下一章节我们将会叙讲这个。😎🚀。
2025-04-29 09:14:40
5460
原创 [ 问题解决 ] sqlite3.ProgrammingError: SQLite objects created in a thread can ...
这句话的意思是:你在(比如 Flask 启动时的主线程)里创建了 SQLite 的连接或者 cursor(光标对象)。但你在(比如处理 POST 请求时 Flask 内部新开的线程)去用这个连接或者 cursor。SQLite 默认。SQLite 连接是,不同线程必须用自己的连接。
2025-04-28 17:27:23
5199
原创 深度揭秘:High-Level Optimization (HLO) —— 调度、重写与 Datapath 构建的底层机制!
深度揭秘:High-Level Optimization (HLO) —— 调度、重写与 Datapath 构建的底层机制!
2025-04-28 09:21:37
5351
原创 穿越源代码与硬件之间:Elaboration 揭秘,让你的设计具象成真!
—— 从抽象语法树到静态硬件网络,解锁 Design Compiler 的灵魂变换!
2025-04-27 16:13:31
5215
原创 深入解析:Sklansky Adder(斯克兰斯基加法器)原理、优缺点及实现细节
与传统的进位传播加法器(Carry Ripple Adder,RCA)相比,Sklansky Adder 通过采用更高级的进位生成和传播策略,显著提高了运算速度。通过本文的详细分析,你可以全面了解Sklansky Adder的工作原理,优缺点及其资源消耗。相比之下,Ripple Carry Adder的延迟为O(n),因此Sklansky Adder在大位宽的加法运算中具有明显的优势。在最理想的情况下,Sklansky Adder的进位生成电路和全加器的组合所需的逻辑门数量将随着位宽n的增加而成对数增长。
2024-12-06 17:56:52
5565
原创 深入解析:Carry Ripple Adder(进位传播加法器)的原理、优缺点及实现细节
同时,RCA的面积和功耗也会随着位宽的增加而线性增长,因此它适用于小规模加法运算,对于高性能系统需要采用更复杂的加法器结构。Carry Ripple Adder(RCA)是由多个全加器(Full Adder)串联构成的,每个全加器负责计算两个二进制位的和,并考虑进位输入和进位输出。"Ripple"指的是进位从低位传递到高位的过程,每个全加器的进位输出会作为下一个全加器的进位输入。最终,RCA的输出包括每个全加器的和(Sum0, Sum1, Sum2, Sum3)以及最后的进位输出(Cout3)。
2024-12-06 09:41:22
5868
原创 让你的C++代码变得更加高效和优雅的技巧(第一集)
本文介绍了更多的 C++ 编程技巧,包括使用constexpr、迭代器算法、智能指针和 RAII、 lambda 表达式、noexcept、模板元编程和 std::optional。但是,C++ 也是一门复杂的语言,需要程序员有一定的技巧才能写出高效和优雅的代码。使用 std::optional 可以避免使用指针或特殊值表示缺失的情况,提高程序的可读性和可维护性。使用模板元编程可以提高程序的性能和可维护性。将函数参数和变量声明为 const,可以避免不必要的拷贝和修改,提高程序的性能和可读性。
2023-05-04 21:00:00
12455
原创 Linux 的 grep 命令使用大全
grep是一个强大的文本搜索工具,在Linux和Unix系统中非常常用。本文介绍了一些grep命令的基本用法,包括查找单词、查找多个文件、递归搜索、
2023-04-21 13:47:16
11779
原创 collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit status
2023-01-05 09:00:00
12523
原创 static 关键字在定义成员函数的时候报错: Cannot declare member function ...to have static linkage“
static 关键字在定义成员函数的时候报错: Cannot declare member function ...to have static linkage“
2023-01-04 11:01:25
12411
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人