第1章 绪论 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统的发展简介 1
1.1.2 嵌入式系统的概念与组成 2
1.1.3 嵌入式系统的特点 3
1.1.4 嵌入式系统的应用模式与发展趋势 5
1.2 SOPC技术简介 6
1.2.1 SOPC技术的主要特点 7
1.2.2 SOPC技术实现方式 8
1.2.3 SOPC系统开发流程 9
第2章 Altera可编程逻辑器件简介 10
2.1 MAX Ⅱ器件 10
2.1.1 成本优化的架构 10
2.1.2 低功耗 11
2.1.3 高性能 11
2.1.4 用户Flash存储器 12
2.1.5 实时系统可编程能力(ISP) 13
2.1.6 灵活的多电压Multivolt内核 13
2.1.7 JTAG翻译器 14
2.1.8 I/O能力 15
2.2 Cyclone器件 16
2.2.1 新型可编程架构 16
2.2.2 嵌入式存储资源 17
2.2.3 专用外部存储接口电路 18
2.2.4 支持的接口及协议 20
2.2.5 锁相环的实现 21
2.2.6 I/O特性 22
2.2.7 NiosⅡ嵌入式处理器 23
2.2.8 配置方案 24
2.3 Cyclone Ⅱ器件 24
2.3.1 主要特性 24
2.3.2 数字信号处理应用 25
2.3.3 专用外部存储器接口 26
2.3.4 嵌入式锁相环 27
2.3.5 单端I/O特性 28
2.3.6 差分I/O特性 29
2.3.8 NiosⅡ嵌入式处理器 30
2.4 Stratix器件 30
2.3.7 自动CRC检测 30
2.4.1 高性能架构加快模块化设计 31
2.4.2 TriMatrix存储器 32
2.4.3 DSP块 33
2.4.4 高带宽I/O标准和高速接口 34
2.4.5 用于系统时钟管理的PLL 36
2.4.6 器件配置和远程系统升级 37
2.5 Stratix Ⅱ器件 38
2.5.1 新型逻辑结构 38
2.5.2 高速I/O信号和接口 40
2.5.3 外部存储器接口 41
2.5.4 针对Stratix Ⅱ器件优化的IP 43
2.5.5 设计安全性 43
2.5.6 TriMatrix存储器 43
2.5.7 数字信号处理块 44
2.5.8 时钟管理电路 46
2.5.9 片内匹配 47
2.5.10 远程系统升级 48
2.6 Stratix GX器件 48
3.1 图形用户界面设计流程 51
第3章 QuartusⅡ软件应用 51
3.2 命令行设计流程 53
3.3 交通灯设计实例 54
3.3.1 设计原理 55
3.3.2 设计输入 56
3.3.3 创建工程 57
3.3.4 编译前设置 61
3.3.5 编译 63
3.3.6 仿真 64
3.3.7 应用RTL电路图观察器 67
3.4.1 引脚锁定 68
3.4 引脚锁定和下载验证 68
3.4.2 下载验证 70
3.4.3 对配置器件编程 71
3.5 使用嵌入式逻辑分析仪进行实时测试 72
3.5.1 SignalTap Ⅱ逻辑分析仪使用流程 72
3.5.2 编译特定逻辑条件触发信号 76
3.6 使用在系统嵌入式存储器 77
3.6.1 正弦信号发生器的设计 78
3.6.2 定制ROM初始化数据文件 79
3.6.3 定制ROM元件 80
3.6.4 使用在系统嵌入式存储器数据编辑器 83
3.7 嵌入式锁相环altPLL宏功能模块调用 84
思考题 87
第4章 基于FPGA的DSP算法实现 88
4.1 CORDIC算法的FPGA实现 88
4.1.1 CORDIC原理 88
4.1.2 CORDIC处理器的预处理与后处理 90
4.1.3 CORDIC算法的FPGA实现 91
4.1.4 迭代结构CORDIC算法的VHDL实现 93
4.1.5 流水线结构CORDIC算法的VHDL实现 96
4.2 CRC码的FPGA实现 102
4.2.1 CRC校验的原理 102
4.2.2 CRC码的Verilog编程实现 104
4.2.3 CRC码的仿真验证和逻辑综合 108
4.3 Viterbi译码器的FPGA实现 109
4.3.1 Viterbi译码器的系统结构划分 109
4.3.2 Viterbi译码器的Verilog编程实现 112
4.4 DES算法的可编程硬件实现 132
4.4.1 DES算法的数据置换 134
4.4.2 DES算法的密钥置换 135
4.4.4 DES的Verilog编程实现及其逻辑综合 137
4.4.3 DES的解密过程 137
4.5 SHA-1算法的可编程硬件实现 144
4.5.1 SHA-1算法描述 144
4.5.2 SHA-1的Verilog编程实现及其仿真测试 145
4.6 ECCDSA算法的可编程硬件实现 156
4.6.1 ECCDSA算法描述 156
4.6.2 ECCDSA算法的Verilog编程实现 158
4.6.3 ECCDSA算法的仿真验证和逻辑综合 190
5.1 概述 191
第5章 Nios Ⅱ处理器结构 191
5.2 NiosⅡ系统的特性 192
5.3 NiosⅡ处理器构架简介 193
5.3.1 寄存器文件 193
5.3.2 ALU 193
5.3.3 异常控制器和中断控制器 194
5.3.4 存储器和I/O组织 194
5.4 编程模型 198
5.4.1 通用寄存器 198
5.4.2 控制寄存器 199
5.4.3 操作模式 200
5.4.4 异常处理 201
5.4.5 跳出处理 204
5.4.6 访问存储器和外设 205
5.4.7 处理器复位时的状态 205
5.4.8 NiosⅡ处理器的指令集 206
思考题 209
6.1 概述 210
6.1.1 Avalon总线的特点 210
第6章 Avalon总线规范 210
6.1.2 术语和概念 211
6.2 Avalon总线信号 213
6.2.1 Avalon信号类型详细列表 213
6.2.2 Avalon信号时序说明 216
6.2.3 总线传输特性 217
6.3 Avalon从端口传输 217
6.3.1 从端口信号分析 217
6.3.2 基本从端口读传输 219
6.3.3 具有固定等待周期的从端口读传输 220
6.3.4 具有可变等待周期的从端口读传输 221
6.3.5 具有建立时间的从端口读传输 222
6.3.6 基本从端口写传输 223
6.3.7 具有固定等待周期的从端口写传输 224
6.3.8 具有可变等待周期的从端口写传输 224
6.3.9 具有建立时间和保持时间的从端口写传输 225
6.4 Avalon主端口传输 226
6.4.1 主端口信号分析 226
6.4.2 基本主端口读传输 228
6.4.3 基本主端口写传输 229
6.5 流水线传输 230
6.5.1 带固定延迟的流水线从端口读传输 231
6.5.2 带可变延迟的流水线从端口读传输 232
6.5.3 流水线主端口读传输 234
6.6 流传输模式 235
6.6.1 流传输模式信号分析 235
6.6.2 流传输模式从端口读传输 236
6.6.3 流传输模式从端口写传输 237
6.6.4 流传输模式主端口传输 238
6.7.1 三态从端口传输介绍 240
6.7 三态传输 240
6.7.2 三态从端口传输实例 243
6.7.3 三态主端口传输 245
6.8 突发传输 246
6.8.1 主端口突发写传输 247
6.8.2 主端口突发读传输 248
6.8.3 从端口突发写传输 250
6.8.4 从端口突发读传输 251
6.9 非传输相关信号 252
6.10.1 本地地址对齐 253
6.10 地址对齐 253
6.10.2 动态地址对齐 254
思考题 255
第7章 基于SOPC的Nios Ⅱ处理器设计 256
7.1 SOPC Builder功能 256
7.2 SOPC Builder组成 258
7.2.1 系统内容页面 259
7.2.2 Board设置页面 260
7.2.3 CPU设置页面 260
7.2.4 SDRAM设置页面 261
7.2.5 系统生成页面 262
7.3.1 库搜索路径 263
7.3.2 class.ptf文件 263
7.3 SOPC Builder组件 263
7.3.3 cb_generator.pl文件 264
7.3.4 系统PTF文件 264
7.4 SOPC Builder应用实例 265
7.4.1 使用SOPC Builder创建Nios系统 265
7.4.2 将Nios处理器加入Quartus Ⅱ项目 270
7.4.3 在Nios Ⅱ IDE下运行Hello world程序 276
7.5.1 组件编辑器 279
7.5 自定义逻辑 279
7.5.2 组件开发流程 280
7.5.3 自定义PWM组件实例 282
7.5.4 小结 290
7.6 定制目标板程序 291
7.6.1 目标板程序 291
7.6.2 使用mk_target_board 291
7.6.3 在SOPC Builder中指定目标板 295
7.6.4 使用Flash Programmer 296
7.6.5 小结 298
思考题 299
第8章 Nios Ⅱ外设及其编程 300
8.1 并行输入输出(PIO) 300
8.1.1 功能描述 300
8.1.2 寄存器映射 301
8.1.3 软件编程 303
8.1.4 PIO实例分析 304
8.2 通用异步收发器(UART) 306
8.2.1 功能描述 306
8.2.2 在SOPC Builder中添加UART 308
8.2.3 软件编程模型 309
8.3 定时器 310
8.3.1 功能描述 310
8.3.2 在SOPC Builder中添加定时器 311
8.3.3 软件编程模型 313
8.4 JTAG UART 315
8.4.1 功能描述 315
8.4.2 在SOPC Builder中添加JTAG UART 317
8.4.3 软件编程模型 318
8.5.1 功能描述 320
8.5 SPI 320
8.5.2 在SOPC Builder中添加JTAG UART 323
8.5.3 软件编程模型 324
8.6 系统ID 327
8.6.1 功能描述 327
8.6.2 在SOPC Builder中添加系统ID 327
8.6.3 软件编程模型 327
8.7.3 软件编程模型 328
8.7.2 在SOPC Builder中添加LCD控制器 328
8.7.1 功能描述 328
8.7 字符LCD控制器 328
8.8 数据选择器 329
8.8.1 功能描述 329
8.8.2 在SOPC Builder中添加JTAG UART 330
8.8.3 软件编程模型 330
8.9 邮箱 331
8.9.1 功能描述 331
8.9.2 在SOPC Builder中添加邮箱 331
8.10 SDRAM控制器 332
8.9.3 软件编程模型 332
8.10.1 功能描述 333
8.10.2 在SOPC Builder中添加SDRAM控制器 335
8.10.3 硬件仿真 336
8.10.4 SDRAM控制器配置实例 337
8.10.5 软件编程模型 338
8.10.6 SDRAM编程实例 338
8.11.1 功能描述 340
8.11.2 在SOPC Builder中添加CFI控制器 340
8.11 CFI控制器 340
8.11.3 软件编程模型 341
8.11.4 Flash器件编程实例 341
8.12 EPCS器件控制器 342
8.12.1 功能描述 343
8.12.2 在SOPC Builder中添加EPCS控制器 344
8.12.3 软件编程模型 344
第9章 嵌入式处理器应用实例 345
9.1 基于DM9000A的ARP协议实现 345
9.1.1 ARP协议的工作原理 345
9.1.2 DM9000A工作原理 347
9.1.3 SOPC Builder下DM9000A的自定义逻辑 349
9.1.4 ARP协议的实现 351
9.1.5 小结 359
9.2 基于HD61202的128×64液晶显示模块的应用 360
9.2.1 ATM12864的性能特点 360
9.2.2 HD61202的性能特点 360
9.2.3 SOPC Builder下HD61202的自定义逻辑 363
9.2.4 LCD汉显的实现 365
9.3 MC8051 IP核的应用开发 369
9.3.1 MC8051 IP核的结构分析 371
9.3.2 MC8051 IP核的逻辑综合 380
9.3.3 MC8051 IP核的功能仿真 381
9.4 PicoBlaze IP核在ALTERA公司FPGA上的性能测试 388
9.4.1 CPLD型PicoBlaze处理器基本结构 388
9.4.2 PicoBlaze处理器的指令系统 390
9.4.3 PicoBlaze处理器的应用测试 394
附录A VHDL基本语法 400
A.1 程序结构 400
A.1.1 实体 400
A.1.2 ARCHTTECTURE结构体 401
A.1.4 PACKAGE程序包 402
A.1.3 LIBRARY库 402
A.1.5 CONFIGURATION配置 403
A.2 语言要素 403
A.2.1 VHDL文字规则 403
A.2.2 数据对象 405
A.2.3 数据类型 405
A.2.4 操作符 406
A.3.2 流程控制语句 408
A.3 顺序语句 408
A.3.1 赋值语句 408
A.3.3 子程序调用语句 410
A.4 并行语句 411
A.4.1 进程语句 411
A.4.2 块语句 412
A.4.3 元件例化语句 412
B.1.3 数字声明 414
B.1.2 操作符 414
B.1.1 空白符和注释符 414
附录B Verilog HDL基本语法 414
B.1 词法约定 414
B.1.4 字符串 415
B.1.5 标识符和关键字 415
B.2 数据类型 415
B.2.1 物理数据类型 415
B.2.2 抽象数据类型 416
B.3 运算符 416
B.3.1 运算符的类型 416
B.4.1 模块的组成 418
B.3.2 运算符的优先级 418
B.4 模块和端口 418
B.4.2 模块的端口定义 419
B.4.3 模块的调用 420
B.5 行为描述 421
B.5.1 过程语句 421
B.5.2 过程赋值语句 422
B.5.3 分支语句 422
B.5.4 循环语句 423