第1部分 VHDL代码编写 3
第1章 绪言 3
1.1 传统设计方法——原理图输入 3
1.2 硬件描述语言 3
1.3 VHDL设计的结构 4
1.4 VHDL设计内的元件实例化 7
1.5 结构式、行为式与可综合VHDL设计 10
1.5.1 结构式VHDL描述 10
1.5.2 行为式VHDL描述 12
1.5.3 RTL级代码 14
1.6 在VHDL设计中使用库声明 16
第2章 VHDL仿真与综合流程 18
第3章 基本逻辑元件的可综合代码 20
3.1 与逻辑 20
3.2 或逻辑 21
3.3 非逻辑 22
3.4 与非逻辑 23
3.5 或非逻辑 24
3.6 三态缓冲器逻辑 26
3.7 复杂逻辑门 27
3.8 锁存器 28
3.8.1 避免代码中出现锁存器 29
3.9 触发器 33
3.10 译码器 34
3.11 编码器 36
3.12 多路选择器 37
3.13 优先级编码器 39
3.14 存储器单元 41
3.15 加法器 42
3.16 元件推定 44
第4章 信号与变量 46
4.1 变量 46
4.2 信号 47
4.3 采用信号和变量的时机 51
4.4 反馈信号的用法 53
第5章 复杂示例的可综合代码 56
5.1 移位器 56
5.2 计数器 66
5.3 存储器模块 73
5.4 汽车行驶控制器 80
第6章 设计可综合的流水式微控制器 87
6.1 定义指令集 87
6.2 定义体系结构 88
6.3 定义流水线 90
6.4 定义流水式微控制器的微结构 91
6.4.1 预译码功能块 93
6.4.2 译码功能块 104
6.4.3 寄存器堆功能块 112
6.4.4 执行功能块 121
6.4.5 整个微控制器芯片 131
第2部分 基于SYNOPSYS工具的逻辑综合 147
第7章 设计中的时序因素 147
7.1 建立时间违规 147
7.2 保持时间违规 148
7.3 逻辑综合中的建立时间和保持时间因素 148
7.4 改进微结构以消除建立时间违规 149
7.4.1 通过逻辑复制生成独立路径 150
7.4.2 在利用滞后到达信号作选择之前进行逻辑复制 150
7.4.3 在触发器间进行逻辑均衡 151
7.4.4 优先级译码与多路译码 152
7.5 改进微结构以消除保持时间违规 153
7.6 异步路径与无效路径 153
7.7 多周期路径 153
第8章 基于时序约束的VHDL综合 155
8.1 Design Compiler简介 155
8.2 使用Design Compiler进行综合 156
8.3 性能改进 159
8.3.1 采用-map_effort high选项编译 159
8.3.2 将关键路径聚合成组并设定权重因子 164
8.3.3 对设计对象进行逻辑展平 170
8.3.4 表征子模块 174
8.3.5 寄存器均衡 175
8.3.6 采用FSM Compiler优化有限状态机 181
8.3.7 对高级功能模块选择高速实现电路 186
8.3.8 对重负载逻辑树进行均衡 187
8.4 通过综合改进实现面积优化 190
8.4.1 组合逻辑不单独作为功能块使用 190
8.4.2 模块间不使用胶黏逻辑 191
8.4.3 使用set_max_area属性 192
8.5 使用Synopsys工具消除保持时间违规 193
8.6 其他常用的综合命令 193
8.7 自顶而下与自底而上编译 224
第9章 实例化GTECH库单元 227
第10章 DesignWare库 229
10.1 建立自己的DesignWare库 233
第11章 综合中的可测试性问题 240
11.1 复用触发器扫描方式 241
11.2 使用Synopsys的Test Compiler实现扫描插入 243
第12章 FPGA综合 250
第13章 综合与版图工序之间的联系 260
13.1 前向标注 260
13.2 连线负载模型 261
13.3 版面规划 262
13.4 版图工序之后的优化 263
第14章 实现有效综合应遵循的设计指导原则 264
附录A STD_LOGIC_1164库 266
附录B 移位器综合结果 302
附录C 计数器综合结果 308
附录D 流水式微控制器综合结果 312
附录E 第6章微控制器示例综合出的EDIF文件 330
附录F 第6章微控制器示例综合出的SDF文件 359
词汇表 392
参考文献 394
图1 只有一个结构体的设计 5
图2 具有多个结构体的设计 5
图3 层次化的设计对象 7
图4 实例化出3个与门元件的设计 7
图5 “某一模块”的原理图 10
图6 HDL仿真与综合的常规流程 18
图7 VHDL设计对象及其测试平台 19
图8 综合出的与逻辑 21
图9 综合出的或逻辑 22
图10 综合出的非逻辑 23
图11 综合出的与非逻辑门 24
图12 综合出的或非逻辑门 25
图13 综合出的三态缓冲器 27
图14 综合出的复杂逻辑门 28
图15 综合出的锁存器 29
图16 综合出的触发器 33
图17 综合出的译码器 35
图18 综合出的编码器 37
图19 综合出的多路选择器逻辑 38
图20 综合出的优先级编码器 41
图21 具有滞后到达信号E的逻辑元件 41
图22 综合出的采用触发器的存储器单元 42
图23 综合出的加法器方块图 43
图24 由逻辑门构造出的加法器的原理图 44
图25 例27(采用变量)的仿真结果时序图 51
图26 例28(采用信号)的仿真结果时序图 51
图27 反馈信号 53
图28 4位移位器设计的引脚示意图 57
图29 移位器设计的流程图 58
图30 左移时序图 65
图31 右移时序图 65
图32 桶式右移时序图 65
图33 桶式左移时序图 66
图34 4位计数器设计引脚示意图 67
图35 计数器设计的递增计数时序图 72
图36 计数器设计的递减计数时序图 72
图37 存储器模块引脚示意图 73
图38 存储器模块读操作/写操作流程图 74
图39 存储器模块写操作时序波形图 79
图40 存储器模块读操作时序波形图 79
图41 汽车行驶控制器模块状态图 81
图42 汽车行驶控制器的仿真结果时序图 86
图43 微控制器接口示意图 88
图44 微控制器的流水阶段 90
图45 流水线中的指令执行过程 91
图46 整个微控制器芯片的微结构定义 92
图47 预译码功能块接口信号示意图 95
图48 预译码功能块测试平台时序波形图 103
图49 译码功能块接口信号示意图 105
图50 译码功能块测试平台时序波形图 111
图51 寄存器堆功能块接口信号示意图 113
图52 寄存器堆测试平台仿真结果时序波形图 120
图53 执行功能块接口信号示意图 122
图54 执行功能块接口信号示意图 127
图55 执行功能块测试平台时序波形图 130
图56 微控制器测试平台时序波形图 144
图57 以组合逻辑驱动触发器的输入信号A的电路示意图 148
图58 信号A的建立时间时序图 148
图59 信号A的保持时间时序图 148
图60 对综合出的电路作静态时序分析 149
图61 某个组合逻辑电路示意图 150
图62 某个作了逻辑复制的组合逻辑电路示意图 150
图63 某逻辑电路示意图 151
图64 通过逻辑复制对稍早到达的信号提前译码的逻辑电路示意图 151
图65 采用多级译码的设计示意图 151
图66 某个采用多级译码而作了逻辑均衡的设计示意图 152
图67 采用优先级译码的设计 152
图68 采用多路译码的设计 152
图69 保持时间违规的设计 153
图70 消除了保持时间违规的设计对象示意图 153
图71 具有多周期路径的设计对象示意图 154
图72 以虚拟时钟为参照的输入延迟和输出延迟时序图 160
图73 顶层TOP模块和其多个子模块的示意图 174
图74 流水式设计对象的示意图 175
图75 未作划分的设计对象 182
图76 划分得体的零散逻辑和状态机 182
图77 由balance_buf_ent综合出的电路 188
图78 对balance_buf_ent作了balance_buffer处理而综合出的电路 190
图79 独立的组合逻辑功能块 191
图80 将组合逻辑X、Y和Z组合起来 191
图81 模块A和C之间的胶黏逻辑 192
图82 RESET是无效路径 193
图83 多周期路径 194
图84 推导出的四个与门 213
图85 两个与门聚成一组形成b1ock1 213
图86 将与门聚组形成block1和b1ock2 214
图87 使用LOOP和NEXT语句的VHDL代码的综合结果 217
图88 具有5个子模块的顶层设计对象示意图 224
图89 顶层模块的时间预算示意图 226
图90 从GTECH库中的XNOR4映射出四输入XNOR逻辑单元 228
图91 从GTECH库中的XNOR4映射出两输入XNOR逻辑单元和两输入XOR逻辑单元 228
图92 含测试插入的综合/版图设计流程图 241
图93 用作等价扫描单元的复用触发器 241
图94 扫描模式和正常工作模式下复用触发器的用法 242
图95 设计对象中的扫描链 242
图96 将设计对象综合到FPGA中的步骤流程图 250
图97 从综合到版图工序间的信息前向标注图 260
图98 RC信息的反向标注 262
表1 “某一模块”的真值表 12
表2 “某一模块”的卡诺图 15
表3 与逻辑功能的真值表 20
表4 或逻辑功能的真值表 21
表5 与非逻辑功能的真值表 23
表6 或非逻辑功能的真值表 25
表7 三态缓冲器逻辑功能的真值表 26
表8 复杂逻辑门功能的真值表 27
表9 译码逻辑功能的真值表 34
表10 8输入编码器的真值表 36
表11 多路选择器逻辑功能的真值表 37
表12 逐位选择式优先级编码器的真值表 39
表13 加法器逻辑功能的真值表 43
表14 用于逻辑元件推导的算符和关键字 45
表15 各种移位模式的移位过程 56
表16 移位器的引脚和功能描述 57
表17 计数器设计的引脚描述 66
表18 存储器模块的引脚描述 73
表19 汽车行驶控制器模块的引脚描述 80
表20 微控制器指令集描述 87
表21 微控制器接口信号的描述 89
表22 微控制器16个内部寄存器的表示法 89
表23 预译码功能块接口信号的描述 93
表24 译码功能块接口信号的描述 105
表25 寄存器堆功能块接口信号的描述 112
表26 执行功能块接口信号的描述 121
表27 加法器的不同实现方案 187
例1 具有多种结构体的VHDL代码 6
例2 实例化出3个与门元件设计的VHDL代码 7
例3 “某一模块”的结构式VHDL描述 10
例4 “某一模块”的行为式代码 12
例5 “某一模块”的描述式VHDL代码 14
例6 编写可综合VHDL代码时使用类型转换函数 17
例7 与逻辑的可综合代码 20
例8 或逻辑的可综合代码 21
例9 非逻辑的可综合代码 22
例10 与非逻辑的可综合代码 24
例11 或非逻辑的可综合代码 25
例12 三态缓冲器逻辑的可综合代码 26
例13 复杂逻辑门的可综合代码 27
例14 锁存器的可综合代码 29
例15 产生锁存器的IF语句代码 30
例16 不会产生锁存器的IF语句代码 30
例17 产生锁存器的CASE语句代码 31
例18 不会产生锁存器的CASE语句代码 32
例19 触发器的可综合代码 33
例20 译码器的可综合代码 34
例21 编码器的可综合代码 36
例22 多路选择器逻辑的可综合代码 38
例23 优先级编码器的可综合代码 40
例24 存储器单元的可综合代码 41
例25 加法器的可综合代码 43
例26 推导出与门的VHDL代码 45
例27 体现变量用法的VHDL代码 46
例28 体现信号用法的VHDL代码 47
例29 仿真信号和变量用法的测试平台 48
例30 声明使用一个BUFFER端口和一个OUT端口的VHDL代码 53
例31 使用信号实现反馈 54
例32 4位移位器的可综合VHDL代码 57
例33 4位移位器设计的测试平台 59
例34 4位计数器设计的可综合VHDL代码 66
例35 4位计数器设计的测试平台 68
例36 1KB容量存储器模块的可综合代码 74
例37 存储器模块的VHDL测试平台 76
例38 汽车行驶控制器模块的可综合VHDL代码 81
例39 汽车行驶控制器模块的测试平台 83
例40 预译码功能块的可综合VHDL代码 95
例41 用于核对功能正确性的测试平台的VHDL代码 99
例42 译码功能块的可综合VHDL代码 105
例43 译码功能块的测试平台 108
例44 寄存器堆功能块的可综合VHDL代码 113
例45 寄存器堆功能块测试平台的可综合VHDL代码 117
例46 执行功能块的可综合VHDL代码 122
例47 用于检查执行功能块功能正确性的测试平台 127
例48 整个微控制器芯片的可综合代码 131
例49 微控制器的测试平台 137
例50 32位加法器的可综合VHDL代码 159
例51 16位减法器 165
例52 4位乘法器 170
例53 具有2条流水线的设计对象的VHDL代码 176
例54 反相器的VHDL代码 187
例55 32位比较器的可综合VHDL代码 199
例56 采用BLOCK语句的四个与门的VHDL代码 211
例57 采用LOOP语法结构的VHDL代码 214
例58 采用GENERATE语法结构的VHDL代码 215
例59 使用LOOP和NEXT的VHDL代码 216
例60 含有组合反馈环路的设计对象的VHDL代码 218
例61 实例化GTECH库中的XNOR单元 227
例62 实例化DesignWare元件的VHDL代码 229
例63 对DesignWare DWO3库中的SRAM模块作实例化的VHDL代码 231
例64 N位移位器的VHDL代码 233
例65 实例化MY_DW_SHIFTER的VHDL代码 237
例66 连线负载模型 261