Verilog HDL 学习笔记(十四)| 第14章 使用Verilog HDL进行逻辑综合

发布时间:2026/11/4 19:23:44

Verilog HDL 学习笔记(十四)| 第14章 使用Verilog HDL进行逻辑综合 14.1 什么是逻辑综合一、逻辑综合的正式定义逻辑综合Logic Synthesis是在标准单元库工艺库和特定的设计约束时序、面积、功耗等的基础上把数字设计的高层次描述Verilog/VHDL代码自动转换为优化的门级网表的过程。一句话理解逻辑综合就是把你写的assign out a b;变成实际电路中一个真实的与门把你写的always (posedge clk) q d;变成一个真实的D触发器。二、为什么需要逻辑综合在逻辑综合工具出现之前设计者需要手工将高层次设计转换为门级电路——画逻辑图、选择门、连线不仅耗时而且容易出错。逻辑综合带来的革命性变化传统方式逻辑综合方式设计者在纸上画逻辑图设计者用Verilog写RTL代码手动选择逻辑门综合工具自动选择最优门手动优化电路综合工具自动优化耗时数周甚至数月数小时内完成逻辑综合把硬件描述语言推到了数字设计技术的最前沿。设计者可以把精力集中在体系结构设计和高层次描述上而把繁琐的门级实现交给工具。三、逻辑综合的输入与输出┌─────────────────────────────────────────────────────────────────────────────┐ │ 逻辑综合的输入与输出 │ │ │ │ ┌─────────────┐ │ │ │ Verilog RTL │──────────────────────────────────────────┐ │ │ │ 代码 │ │ │ │ └─────────────┘ │ │ │ ▼ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ 设计约束 │──▶│ 逻辑综合工具 │──▶│ 优化的门级 │ │ 综合报告 │ │ │ │(时序/面积/ │ │ (Design │ │ 网表 │ │ (面积/时序/ │ │ │ │ 功耗) │ │ Compiler等) │ │ │ │ 功耗报告) │ │ │ └─────────────┘ └──────────────┘ └──────────────┘ └─────────────┘ │ │ │ │ │ ┌─────────────┐ │ │ │ │ 标准单元库 │─────────────────────────────────────────┘ │ │ │ (工艺库) │ │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘输入说明Verilog RTL代码设计者编写的、可综合的RTL级描述标准单元库工艺库目标工艺厂提供的基本单元集合与门、或门、触发器、加法器等设计约束时序要求时钟频率、面积限制、功耗限制等输出说明优化的门级网表由标准单元库中的单元组成的电路连接描述综合报告面积报告、时序报告、功耗报告等14.2 逻辑综合的完整流程逻辑综合通常分为四个主要步骤第一步RTL描述设计者用Verilog在寄存器传输级RTL描述电路的功能。RTL是逻辑综合的标准输入格式。术语RTL表示一种HDL风格它结合了数据流和行为结构。第6章数据流建模和第7章行为级建模的知识在这里汇合。第二步翻译Translation综合工具将RTL描述转换成一个未经优化的内部中间表示。这个过程不考虑面积、时序、功耗等设计约束仅完成简单的内部资源分配中间表示的数据格式由综合工具内部定义用户无需了解第三步逻辑优化Logic Optimization综合工具对中间表示进行布尔逻辑优化删除冗余逻辑。删除重复的逻辑合并相同的子表达式简化布尔函数产生优化后的内部表示第四步工艺映射和优化Technology Mapping and Optimization这是最关键的一步。综合工具使用目标工艺库标准单元库中提供的逻辑单元将优化后的内部表示映射到具体的工艺单元必须满足时序、面积和功耗等设计约束如果不能满足约束需要返回修改RTL描述或调整约束什么是标准单元库标准单元库是目标工艺厂提供的基本构件模块集合包含与门、或门、非门、触发器、锁存器、加法器、多路选择器等单元。每个单元都包含功能描述、版图面积、时序信息、功耗信息。不同工艺厂、不同工艺节点的库各不相同。14.3 可综合与不可综合的Verilog结构这是本章最重要的内容不是所有Verilog语法都能被综合工具接受。许多语法仅用于仿真不能被转换成硬件电路。一、可综合的Verilog结构类别可综合的结构说明数据类型wire、reg、integer部分、parameter基本数据类型模块实例化模块实例引用、门级原语实例引用and、or、not等连续赋值assign组合逻辑描述过程块always (posedge/negedge ...)时序逻辑always (*)或always (敏感列表)组合逻辑条件语句if-else、case、casez选择逻辑循环语句for有明确边界重复结构操作符算术、逻辑、关系、按位、拼接等各种运算always (*)是组合逻辑的最佳实践敏感列表自动包含所有输入信号避免因遗漏信号导致仿真与综合不匹配。二、不可综合的Verilog结构类别不可综合的结构原因/替代方案延迟控制#delay延迟是仿真概念硬件中没有等待初始化块initial硬件没有只执行一次的概念用复位信号替代无限循环while、forever无时钟控制可能导致组合反馈事件控制(event)、命名事件、wait事件是仿真概念系统任务$display、$monitor、$finish等仅用于仿真调试并行块fork-join仅用于仿真部分工具支持有限综合过程连续赋值assign/deassign、force/release不可综合UDP用户自定义原语部分工具不支持三、⚠️ 特别注意事项高频错误1.initial块不可综合// ❌ 不可综合initial块不能转换成硬件 initial begin q 1b0; end // ✅ 可综合用复位信号替代 always (posedge clk or posedge reset) begin if (reset) q 1b0; else q d; end2.#delay会被综合工具忽略// ❌ #10 在综合时被忽略 assign #10 out a b; // ✅ 无延迟的综合描述 assign out a b;3. 循环语句必须有明确的循环边界// ❌ 不可综合循环次数不确定 while (i 16) begin // ... end // ✅ 可综合for循环有明确边界 for (i 0; i 16; i i 1) begin // ... endfor循环在综合时会展开——循环16次就会生成16份相同的硬件电路。循环次数越大生成的电路面积越大。4. 必须显式指定位宽// ⚠️ 不推荐未指定位宽可能生成庞大电路 reg a; // ✅ 推荐显式指定位宽 reg [7:0] a;定义未指定宽度的变量可能产生庞大的门级网表因为综合工具可能根据变量定义生成不必要的逻辑。14.4 可综合的编码风格黄金法则法则一时序逻辑用always (posedge clk) 非阻塞赋值// ✅ 正确的时序逻辑写法 always (posedge clk or posedge reset) begin if (reset) q 1b0; // 非阻塞赋值 else q d; // 非阻塞赋值 end法则二组合逻辑用always (*) 阻塞赋值// ✅ 正确的组合逻辑写法 always (*) begin if (sel) y a; // 阻塞赋值 else y b; end法则三不要在同一个always块中混用阻塞和非阻塞赋值// ❌ 错误混用阻塞和非阻塞 always (posedge clk) begin a b; // 阻塞 c d; // 非阻塞混用 end // ✅ 正确时序逻辑全部用非阻塞 always (posedge clk) begin a b; c d; end法则四所有reg类型变量都要有明确的复位值// ❌ 错误没有复位值上电状态未知 always (posedge clk) begin q d; end // ✅ 正确有复位值 always (posedge clk or posedge reset) begin if (reset) q 1b0; else q d; end法则五避免生成锁存器Latch锁存器是组合逻辑的陷阱——当case或if-else没有覆盖所有分支时综合工具会推断出锁存器。// ❌ 错误缺少else分支 → 推断出锁存器 always (*) begin if (sel) y a; // 缺少elsesel0时y保持原值 → 锁存器 end // ✅ 正确所有分支都有赋值 always (*) begin if (sel) y a; else y b; end // ✅ 正确case有default always (*) begin case (sel) 2b00: y a; 2b01: y b; 2b10: y c; default: y 1b0; // 覆盖所有情况 endcase end14.5 设计约束Design Constraints设计约束是综合工具的指导方针告诉工具你想要的电路是什么样的。一、三大核心约束约束类型说明权衡关系时序约束时钟频率、建立/保持时间要求优化时序 → 面积增大、功耗增加面积约束芯片面积限制优化面积 → 速度下降功耗约束功耗限制优化功耗 → 可能影响时序三者之间存在制约关系为了优化时序可能需要增加硬件资源 → 面积增大、功耗增加为了减小面积又必须在速度上妥协。设计者需要综合权衡。二、常见的时序约束约束说明示例时钟周期规定电路的最高工作频率create_clock -period 10 [get_ports clk]输入延迟输入信号相对于时钟的到达时间set_input_delay -clock clk 2 [get_ports din]输出延迟输出信号相对于时钟的稳定时间set_output_delay -clock clk 3 [get_ports dout]虚假路径不需要时序检查的路径set_false_path -from [get_pins u1/Q]多周期路径需要多个时钟周期的路径set_multicycle_path -setup 2 -from [get_pins u1/Q]14.6 门级网表的验证综合完成后生成的门级网表必须经过验证才能进入下一步布局布线。一、功能验证Functional Verification目的验证门级网表的逻辑功能是否与RTL描述一致。方法对门级网表运行与RTL相同的测试向量比较两者的输出是否一致可以使用形式化验证Formal Verification工具进行数学证明二、时序验证Timing Verification目的验证门级网表是否满足时序约束时钟频率、建立/保持时间等。方法静态时序分析STA穷举所有路径计算最大延迟时序仿真使用时序信息含延迟的门级仿真静态时序分析STA比时序仿真更高效STA可以穷举所有路径而时序仿真只能覆盖部分测试向量。
延伸阅读

更多相关文章

2026/11/4 19:23:44

Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南

Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南 Hermes Agent是一款功能强大的开源AI代理工具,能够自主执行各类任务并不断学习成长。本文将详细介绍如何将Hermes Agent与主流自动驾驶仿真平台CARLA和LGSVL Simulator进行集成&…

2026/11/4 19:23:44

Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析

Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析 在区块链开发领域,智能合约的安全性与可靠性至关重要。Hermes Agent作为一款强大的AI驱动开发工具,能够与主流智能合约测试框架无缝集成,显著提升开发效率与代码质…

2026/11/4 19:23:44

优化Hermes Agent的网络连接:TCP优化与连接复用实用指南

优化Hermes Agent的网络连接:TCP优化与连接复用实用指南 Hermes Agent作为一款强大的AI代理工具,其网络通信效率直接影响整体性能。本文将详细介绍如何通过TCP优化和连接复用技术提升Hermes Agent的网络连接稳定性与响应速度,帮助用户获得更…

2026/11/4 19:23:44

Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略

Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略 Hermes Agent 是一款功能强大的开源智能代理框架,支持多平台集成与自动化任务处理。本文将详细介绍如何为 Hermes Agent 配置性能监控告警系统,实现 Slack 实时通知、Email 详细…

2026/11/4 19:23:44

优化Hermes Agent的存储性能:RAID级别与存储协议选择

优化Hermes Agent的存储性能:RAID级别与存储协议选择 在处理大规模数据和高并发任务时,Hermes Agent的存储性能直接影响整体运行效率。本文将详细介绍如何通过选择合适的RAID级别和存储协议,显著提升Hermes Agent的存储吞吐量、数据可靠性和响…

2026/11/4 19:18:43

Hermes Agent与脑机接口康复系统集成:运动功能恢复辅助终极指南

Hermes Agent与脑机接口康复系统集成:运动功能恢复辅助终极指南 Hermes Agent作为一款强大的AI代理框架,正通过创新方式与脑机接口(BCI)康复系统集成,为运动功能障碍患者提供个性化的恢复辅助方案。本文将详细介绍这一…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑