第1章 现代数字系统设计简介 1
1.1 现代数字系统设计流程 1
1.2 FPGA/CPLD原理 2
1.2.1 乘积项技术原理 2
1.2.2 CPLD原理 2
1.2.3 查找表技术原理 4
1.2.4 FPGA原理 5
1.2.5 FPGA与CPLD简要比较 7
1.3 商用FPGA/CPLD器件简介 7
第2章 Verilog标准与基本语法 9
2.1 Verilog HDL发展历史 9
2.2 Verilog IEEE Standard 1364-1995标准基本语法 10
2.2.1 标识符 10
2.2.2 注释 11
2.2.3 四值逻辑 12
2.2.4 数字表达 12
2.2.5 字符串 12
2.2.6 数据类型 13
2.2.7 内建基本门 14
2.2.8 连续赋值assign语句 14
2.2.9 过程赋值initial和always语句 14
2.2.10 运算 15
2.2.11 if语句 19
2.2.12 case、casex和easez语句 19
2.2.13 循环控制语句 20
2.2.14 编译指示语句 21
2.2.15 时延 22
2.2.16 系统任务 22
2.2.17 function与task 25
2.2.18 参数 31
2.3 Verilog IEEE Standard 1364更新标准重要特性简介 32
2.3.1 敏感列表 32
2.3.2 多维数组 32
2.4 Verilog建模 33
2.4.1 可综合与不可综合语法 34
2.4.2 层次化和模块化设计方法 35
2.5 Verilog代码书写 36
2.5.1 Verilog代码编写推荐工具 36
2.5.2 Verilog模块基本结构 37
2.5.3 实例化方法 37
2.5.4 层次命名 38
2.6 简单Testbench设计 38
2.6.1 组合电路Testbench基本结构 39
2.6.2 时序电路Testbench基本结构 39
2.6.3 文本界面的Testbench 39
2.7 Verilog实例 40
2.7.1 Lab1:门级电路设计与仿真 40
2.7.2 Lab2:简单时序电路设计与仿真 43
2.7.3 Lab3:文本界面的Testbench 44
2.7.4 Lab4:3-8译码器 47
2.7.5 Lab5:全加器 47
2.7.6 Lab6:计数器 48
2.8 Verilog常见问题 49
2.8.1 数字仿真器基本原理 49
2.8.2 阻塞赋值与非阻塞赋值 50
2.8.3 $display、$strobe和$monitor比较 53
2.8.4 #0延时 54
2.8.5 竞争条件 55
2.8.6 仿真与综合对部分语法的不同理解 57
2.8.7 双向端口的仿真 59
2.8.8 组合逻辑回环 60
2.8.9 timescale问题 60
第3章 Modelsim仿真 62
3.1 仿真简介 62
3.2 Modelsim简介 63
3.3 Modelsim使用方式 63
3.3.1 命令行方式 64
3.3.2 脚本方式 64
3.3.3 qverilog单步执行方式 66
3.4 系统任务 66
3.5 VCD输出 66
3.6 SDF标注 67
3.7 测试覆盖率 68
第4章 Verdi使用 73
4.1 Verdi简介 73
4.2 Modelsim与Verdi联合调试流程 73
4.3 FSDB格式波形导出 74
4.4 Verdi使用实例 74
第5章 QuartusⅡ使用 76
5.1 QuartusⅡ简介 76
5.2 FPGA开发流程 76
5.2.1 流程简介 77
5.2.2 创建项目 81
5.2.3 设置约束 82
5.2.4 综合适配 83
5.2.5 下载验证 83
5.3 功能仿真与时序仿真 84
第6章 TimeQuest时序分析 87
6.1 时序简介 87
6.2 动态时序分析与静态时序分析 87
6.3 基本时序分析模型 87
6.4 SDC简介 89
6.5 时序约束与时序分析技术 90
6.5.1 时钟约束 90
6.5.2 输入延时 92
6.5.3 输出延时 92
6.5.4 组合逻辑延时 92
6.6 TimeQuest工具简介 92
6.7 TimeQuest使用 93
6.7.1 TimeQuest使用流程 93
6.7.2 TimeQuest使用举例 94
6.8 时序例外的约束与分析 98
6.8.1 false path 98
6.8.2 multicycle path多周期路径 98
6.8.3 set_max_delay和set_min_delay 101
第7章 Synplify Pro使用 102
7.1 Synplify工具简介 102
7.2 QuartusⅡ与Synplify Pro联合使用流程 103
7.2.1 Synplify Pro与Qua rtusⅡ独立运行 103
7.2.2 QuartusⅡ中调用Synplify Pro 106
7.2.3 Synplify Pro中调用QuartusⅡ 107
第8章 Verilog高级设计 110
8.1 编码风格 110
8.1.1 避免生成多余latch 110
8.1.2 资源共享 111
8.1.3 避免同时使用时钟双沿 113
8.2 编码风格检查 113
8.3 自检测Testbench设计 115
8.4 FSM设计 118
8.4.1 FSM分类 118
8.4.2 两段式FSM设计 119
8.4.3 三段式FSM设计 120
8.4.4 FSM状态编码 121
8.5 多时钟域设计 122
8.5.1 亚稳态 122
8.5.2 2DFF同步器 123
8.5.3 Open-Loop与Closed-Loop同步器 124
8.5.4 多个控制信号的同步电路设计 126
8.5.5 数据信号的同步电路设计 129
8.6 复位信号处理 132
8.7 PLI/VPI编程 132
8.7.1 仿真器扩展接口发展历史 132
8.7.2 VPI简介 133
8.7.3 注册systf 133
8.7.4 VPI实例1:系统任务hello 134
8.7.5 回调callbacks 135
8.7.6 VPI实例2:系统函数random 136
8.7.7 object存取方法 140
8.7.8 VPI实例3:显示所有nets 141
第9章 低功耗设计 145
9.1 功耗来源 145
9.2 基于FPGA的功耗估算 145
9.3 低功耗设计方法 146
9.3.1 门控时钟 147
9.3.2 操作数隔离 147
9.4 工具选项 148
第10章 SOPC系统 150
10.1 SOPC概念 150
10.2 SOPC Builder简介 150
10.3 Avalon总线 151
10.4 NiosⅡ处理器简介 151
10.5 SOPC开发流程 153
10.6 SOPC最小系统硬件开发 153
10.7 NiosⅡ软件开发 155
10.7.1 NiosⅡ软件开发简介 155
10.7.2 NiosⅡIDE使用流程:LED实例 155
10.8 基于NiosⅡ的SOPC系统上μCLinux移植 159
10.8.1 硬件设计 159
10.8.2 软件开发环境 161
10.8.3 NiosⅡ交叉开发工具链的构建 162
10.8.4 硬件信息传递 163
10.8.5 内核与应用程序配置 164
10.8.6 系统测试 166
10.8.7 网络应用 168
10.9 Avalon总线IP核的开发 168
10.9.1 Avalon总线功能模型 168
10.9.2 Avalon总线IP核开发基本框架 170
10.9.3 Avalon总线IP核仿真 170
10.9.4 Avalon总线IP核集成 171
10.9.5 Avalon总线IP核测试 173
10.10 u-boot移植与使用 174
10.10.1 u-boot移植 174
10.10.2 u-boot使用 176
第11章 综合设计:基于OR1200的SoC系统构建 182
11.1 Wishbone总线 182
11.2 构建基于OR1200的最小SoC系统 185
11.2.1 系统硬件框图 185
11.2.2 部件简介 186
11.2.3 系统构建 189
11.2.4 or32交叉开发工具链 195
11.2.5 软件开发 197
11.2.6 系统软硬件联合仿真 201
11.3 基于Wishbone总线的IP核开发 201
11.3.1 Wishbone总线功能模型 201
11.3.2 Wishbone总线IP核开发基本框架 202
11.3.3 Wishbone总线IP核仿真 203
11.3.4 Wishbone总线IP核集成 204
11.3.5 Wishbone总线IP核测试 204
11.4 构建基于OR1200的实用SoC系统 205
11.4.1 系统硬件框图 205
11.4.2 uart16550 206
11.4.3 flash控制器 207
11.4.4 sdram控制器 207
11.4.5 u-boot移植 207
11.4.6 dm9000a网络接口 207
11.4.7 Linux移植 208
附录 rtl_to_gate工具 210
参考文献 211