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

发布时间:2026/9/15 8:51:54

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/9/15 9:01:57

本地部署大模型+WorkBuddy办公提效实战指南

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

2026/9/15 9:01:57

别让错误的追高方式,毁了孩子的膝盖和身高

刷到一条 "孩子这样吃能长高",钙片立刻加购物车;听邻居说 "吊单杠管用",拉伸器当天下单;老人说 "骨头汤补钙",排骨一周炖三回。一顿操作猛如虎,钱花了不少,孩子身…

2026/9/15 9:01:57

单片机毕设项目|单片机毕业设计|基于52单片机的无线开关设计

第一章 绪论1.1 研究背景与意义近年来,物联网(Internet of Things,IoT)技术以蓬勃之势融入人们的生活,推动着传统家居向智能化方向快速转型。随着 5G 通信技术的普及、云计算与大数据分析能力的提升,智能家…

2026/9/15 8:56:55

STM32软件SPI驱动ST7735R显示屏实战指南

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

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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