第1章 逻辑设计发展现状及开发流程 1
1.1 硬件描述语言HDL(Hardware Description Language) 1
1.1.1 硬件描述语言简介 1
1.1.2 Verilog语言简介 2
1.2 可编程逻辑器件 3
1.2.1 专用ASIC芯片VS.可编程逻辑器件 3
1.2.2 FPGA VS.CPLD 4
1.2.3 主流FPGA厂商介绍 4
1.2.4 在选择FPGA器件时需要考虑的问题 5
1.3.2 典型的FPGA设计流程 6
1.3.1 设计方法 6
1.3 基于Verilog的FPGA设计方法及流程 6
1.4 SOC与IP复用 8
1.4.1 SOC简介 8
1.4.2 IP CORE简介 9
1.4.3 设计方法学的进展 9
第2章 常用FPGA开发工具的使用 11
2.1 仿真工具Modelsim 11
2.1.1 Modelsim简介 11
2.1.2 用Modelsim6.0做功能仿真 12
2.1.3 用Modelsim做时序仿真 16
2.1.4 Modelsim其他一些应用技巧 18
2.2 综合工具Synplify Pro 21
2.2.1 Synplify Pro简介 22
2.2.2 用Synplify Pro进行设计综合流程 23
2.3 集成开发环境QuartusⅡ 27
2.3.1 QuartusⅡ简介 27
2.3.2 设计输入 29
2.3.3 约束输入 34
2.3.4 综合 37
2.3.5 布局布线 42
2.3.6 仿真 45
2.3.7 时序分析 50
2.3.8 编程和配置 54
第3章 RTL级建模 56
3.1 硬件意识 56
3.2 RTL级语法 58
3.2.1 Verilog模块基本结构 58
3.2.2 端口定义 59
3.2.3 对带三态输出端口的建模 59
3.2.4 对双向口的建模 60
3.2.5 数据类型 60
3.2.8 always块 62
3.2.7 敏感信号列表 62
3.2.6 连续赋值语句 62
3.2.9 条件语句 63
3.2.10 多路分支语句 65
3.2.11 if...else语句与case语句综合结果的比较 71
3.2.12 再谈锁存器 72
3.2.13 循环语句 73
3.2.14 阻塞与非阻塞赋值 74
3.2.15 模块例化 74
3.3.1 D触发器 76
3.3.2 多路复用器 76
3.3常 用电路的设计 76
3.3.3 多路解复用器 77
3.3.4 计数器与分频器 78
3.3.5 移位寄存器 84
3.3.6 时钟使能电路 85
3.3.7 边沿检测电路 87
3.4 有限状态机的设计 89
3.4.1 概述 89
3.4.2 moore型状态机 90
3.4.3 mealy型状态机 91
3.4.4 moore型状态机与mealy型状态机的选用 93
3.4.5 状态机的代码风格 94
3.4.6 状态编码 97
3.5 FPGA结构 105
3.5.1 FPGA的整体结构 106
3.5.2 IO管脚 107
3.5.3 LE 107
3.5.4 LAB 109
3.5.5 片内存储单元 110
3.5.6 锁相环与全局时钟网络 111
3.5.7 DSP模块 112
3.6.2 亚稳态 113
3.6.1 tSU与tH 113
3.6 时序分析的基本概念 113
3.6.3 tCO 114
3.6.4 FMAX 114
3.6.5 Clock skew 115
3.6.6 Multicycle path 116
3.7 同步设计 117
3.7.1 什么是同步设计 117
3.7.2 同步设计的优点 117
3.7.3 同步设计准则 118
3.8.2 在synplify中添加约束 120
3.8 约束 120
3.8.1 约束对综合工具/布局布线工具的影响 120
3.8.3 在Quartus中添加约束 127
3.8.4 静态时序分析报告 133
3.9 如何提高电路的工作频率 135
3.9.1 影响电路工作频率的因素 135
3.9.2 减少走线时延 135
3.9.3 减少组合逻辑的时延 137
3.10 多时钟域处理 138
3.10.1 单个信号跨时钟域 139
3.10.2 一组信号跨时钟域 140
3.11 设计时序 142
3.12 RTL级设计的其他注意事项 143
3.12.1 命名规范 143
3.12.2 保持良好的代码风格 143
3.12.3 参数化设计 144
3.12.4 输出应尽可能采用寄存器输出 144
3.12.5 将相关逻辑放在同一模块 144
3.12.6 尽量在“叶子”中做逻辑,顶层只做例化 144
4.1 功能验证 145
4.1.1 收敛模型 145
第4章 Testbench 145
4.1.2 验证方法 146
4.1.3 覆盖率检查 147
4.2 Testbench概述 147
4.2.1 什么是Testbench 147
4.2.2 为什么要写Testbench 148
4.2.3 Testbench模型 148
4.2.4 一个简单的Testbench 149
4.3 行为级的Verilog语言 152
4.3.1 RTL建模VS.行为级建模 152
4.3.2 行为级的Verilog语法 154
4.3.3 再谈阻塞与非阻塞赋值 163
4.3.4 信号竞争问题 166
4.4 激励和响应 167
4.4.1 激励 167
4.4.2 响应 172
4.4.3 自动比较响应 173
4.5 总线功能模型 175
4.5.1 总线功能模型的地位 175
4.5.2 总线功能模型的要求 175
4.5.3 总线功能模型的设计 179
4.6.2 Testbench的重用性 182
4.6.1 Testbench的层次 182
4.6 Testbench的结构 182
第5章 RS232通信程序的设计 189
5.1 RS232基础 189
5.2 设计需求 190
5.3 模块划分 191
5.3.1 RTL级划分 191
5.3.2 Testbench的结构划分 191
5.4 RTL级代码 192
5.4.1 top_module模块 192
5.4.2 config_registers模块 194
5.4.3 frame_deal模块 198
5.4.4 tx_frame模块 200
5.4.5 rx_frame模块 204
5.4.6 rs232模块 209
5.4.7 txmit模块 211
5.4.8 rxvr模块 213
5.4.9 clken_gen模块 216
5.5 Testbench 218
5.5.1 testcase模块 218
5.5.2 bm_frame_deal模块 221
5.5.3 harness模块 222
5.5.4 bfm_uart模块 224
5.5.5 osc_rst模块 226
5.6 仿真结果 227
第6章 数字信号处理的Verilog设计 228
6.1 数字信号处理FPGA实现简介 228
6.2 数字信号处理基本模块的实现 230
6.2.1 加法器 230
6.2.2 乘法器 239
6.2.3 积分器 245
6.2.5 抽取和内插 246
6.2.4 微分器 246
6.2.6 用CORDIC算法实现信号处理的常用模块 249
6.3 FIR滤波器的实现 261
6.3.1 FIR滤波器简介 261
6.3.2 FIR滤波器的串行实现 262
6.3.3 FIR滤波器的并行实现 266
6.3.4 FIR滤波器的分布式实现 272
6.3.5 三种滤波方案的比较和选用 284
6.4 数字信号处理程序的仿真验证 285
附录A 相关资源介绍 288
参考文献 289