第1章 ASIC设计方法学 1
1.1 传统的设计流程 1
1.1.1 规范和RTL编码 3
1.1.2 动态仿真 4
1.1.3 约束、综合和扫描插入 5
1.1.4 形式验证 6
1.1.5 使用PrimeTime进行静态时序分析 7
1.1.6 布局、布线和验证 8
1.1.7 工程改变命令 9
1.2 Physical Compiler流程 10
1.2.1 物理综合 11
1.3 小结 12
第2章 入门指南静态时序分析与综合 13
2.1 设计示例 14
2.2 初始设置 14
2.3 传统流程 15
2.3.1 布图前的步骤 15
2.3.2 布图后步骤 27
2.4 Physical Compiler流程 32
2.5 小结 32
第3章 基本概念 33
3.1 Synopsys产品 33
3.2 综合环境 35
3.2.1 启动文件 35
3.2.2 系统库变量 36
3.3 对象、变量和属性 37
3.3.1 设计对象 38
3.3.2 变量 38
3.3.3 属性 39
3.4 找寻设计对象 40
3.5 Synopsys格式 40
3.6 数据组织 41
3.7 设计输入 41
3.8 编译指令 43
3.8.1 HDL编译器指令 43
3.8.2 VHDL编译器指令 44
3.9 小结 45
第4章 Synopsys工艺库 47
4.1 工艺库 47
4.1.1 逻辑库 47
4.1.2 物理库 48
4.2 逻辑库基础 48
4.2.1 库类 48
4.2.2 库级属性 49
4.2.3 环境描述 49
4.2.4 单元描述 53
4.3 延时计算 56
4.3.1 延时模型 56
4.3.2 延时计算问题 57
4.4 何谓好库? 58
4.5 小结 59
第5章 划分和编码风格 61
5.1 综合划分 61
5.2 何谓RTL? 63
5.2.1 软件与硬件 63
5.3 通用指导方针 63
5.3.1 工艺无关 64
5.3.2 时钟相关逻辑 64
5.3.3 顶层没有粘合逻辑 64
5.3.4 模块名与文件名一致 65
5.3.5 压焊块同核心逻辑相分离 65
5.3.6 最小化不必要的层次 65
5.3.7 寄存所有输出 65
5.3.8 FSM综合指导 66
5.4 逻辑推断 66
5.4.1 不完全敏感信号表 66
5.4.2 存储元件推断 67
5.4.3 多路选择器推断 71
5.4.4 三态推断 73
5.5 顺序相关 73
5.5.1 Verilog中阻塞与非阻塞赋值 74
5.5.2 VHDL中的信号与变量 74
5.6 小结 75
第6章 设计约束 77
6.1 环境与约束 77
6.1.1 设计环境 77
6.1.2 设计约束 81
6.2 高级约束 85
6.3 时钟问题 87
6.3.1 布图前 87
6.3.2 布图后 88
6.3.3 生成的时钟 89
6.4 综合实例 90
6.5 小结 92
第7章 优化设计 93
7.1 设计空间探索 93
7.2 总的负松弛 96
7.3 编译策略 97
7.3.1 自顶向下层次化编译 97
7.3.2 时间预算编译 98
7.3.3 Compile-Characterize-Write-Script-Recompile 99
7.3.4 设计预算 100
7.4 多个实例解析 101
7.5 优化技巧 102
7.5.1 编译设计 103
7.5.2 展平和构造 104
7.5.3 消除层次 106
7.5.4 优化时钟网络 107
7.5.5 面积优化 109
7.6 小结 109
第8章 可测性设计 111
8.1 DFT类型 111
8.1.1 存储器和逻辑BIST 111
8.1.2 边界扫描DFT 112
8.2 扫描插入 112
8.2.1 移位周期和捕获周期 113
8.2.2 RTL检查 115
8.2.3 使设计可扫描 116
8.2.4 现有扫描 118
8.2.5 扫描链排序 119
8.2.6 测试图案生成 121
8.2.7 综合实例 121
8.3 DFT指导方针 122
8.3.1 三态总线竞争 123
8.3.2 锁存器 123
8.3.3 门控复位或预置 123
8.3.4 门控时钟或生成时钟 123
8.3.5 使用单时钟沿 124
8.3.6 多时钟域 125
8.3.7 排序扫描链以最小化时钟扭斜 125
8.3.8 因存储单元而不可扫描的逻辑 125
8.4 小结 126
第9章 LINKS TO LAYOUT和布图后优化——包括时钟树插入 129
9.1 为布图生成网表 130
9.1.1 唯一化 131
9.1.2 为布图修改网表 132
9.1.3 移除未连接的端口 132
9.1.4 可见的端口名 133
9.1.5 Verilog特殊语句 133
9.1.6 无意的时钟或复位门控 134
9.1.7 未解析的引用 135
9.2 布图 135
9.2.1 布图规划 135
9.2.2 时钟插入 139
9.2.3 时钟树到Design Compiler的转移 141
9.2.4 布线 143
9.2.5 提取 143
9.3 布图后优化 147
9.3.1 反标注和自定义连线负载 147
9.3.2 在位优化 149
9.3.3 基于位置的优化 150
9.3.4 修正保持时间违例 151
9.4 小结 154
第10章 物理综合 155
10.1 初始化设置 155
10.1.1 重要变量 156
10.2 作业模式 156
10.2.1 RTL到布局后的门 157
10.2.2 门到布局后的门 158
10.3 其他PhyC命令 162
10.4 Physical Compiler问题 163
10.5 后端流程 164
10.6 小结 164
第11章 SDF生成——为动态时序仿真 167
11.1 SDF文件 167
11.2 SDF文件生成 169
11.2.1 生成布图前SDF文件 170
11.2.2 生成布图后SDF文件 171
11.2.3 时序检查相关问题 172
11.2.4 虚假延迟计算问题 173
11.2.5 组合 174
11.3 小结 176
第12章 PRIMETIME基础 177
12.1 导言 177
12.1.1 调用PT 178
12.1.2 PrimeTime环境 178
12.13 自动命令转换 179
12.2 Tcl基础 179
12.2.1 命令置换 180
12.2.2 列表 180
12.2.3 流控制和循环 181
12.3 PrimeTime命令 182
12.3.1 设计输入 182
12.3.2 时钟规范 182
12.3.3 时序分析命令 186
12.3.4 其他各种命令 190
12.4 小结 193
第13章 静态时序分析——使用PrimeTime 195
13.1 为何要进行静态时序分析? 195
13.1.1 分析什么? 196
13.2 时序例外 196
13.2.1 多周期路径 197
13.2.2 虚假路径 198
13.3 禁止时序弧 201
13.3.1 分别禁止时序弧 201
13.3.2 情况分析 202
13.4 环境与约束 203
13.4.1 工作条件——困难的选择 203
13.5 布图前 204
13.5.1 布图前时钟规范 204
13.5.2 时序分析 205
13.6 布图后 207
13.6.1 反标注什么 207
13.6.2 布图后时钟规范 208
13.6.3 时序分析 209
13.7 分析报告 212
13.7.1 布局前建立时间分析报告 212
13.7.2 布图前保持时间分析报告 214
13.7.3 布图后建立时间分析报告 216
13.7.4 布图后保持时间分析报告 218
13.8 高级分析 219
13.8.1 详细的时序报告 219
13.8.2 单元交换 222
13.8.3 瓶颈分析 223
13.8.4 门控时钟检查 225
13.9 小结 228
附录A 使用Physical Compiler的一个新的时序闭合方法 229
附录B Makefile实例 239