第1章 可编程逻辑器件概述 1
1.1 可编程逻辑器件简介 1
1.1.1 可编程逻辑器件的基本结构 2
1.1.2 可编程逻辑器件的分类及特点 2
1.1.3 可编程逻辑器件的逻辑表示方法 4
1.2 CPLD/FPGA的结构与特性 5
1.2.1 基于乘积项的CPLD原理与结构 6
1.2.2 基于乘积项的CPLD逻辑实现方式 7
1.2.3 基于查找表的FPGA原理与结构 8
1.2.4 基于查找表的FPGA逻辑实现方式 9
1.2.5 CPLD与FPGA器件的差别 9
1.3 Altera公司的MAX7000系列CPLD特性介绍 12
1.3.1 逻辑阵列块(LAB) 14
1.3.2 宏单元 15
1.3.3 扩展乘积项 16
1.3.4 可编程连线阵列 17
1.3.5 I/O控制块 17
1.3.6 其他特性 18
第2章 可编程逻辑器件的设计流程及学习开发器材 20
2.1 可编程逻辑器件的设计流程 20
2.1.1 设计输入 20
2.1.2 综合 22
2.1.3 CPLD/FPGA器件适配 23
2.1.4 仿真 23
2.1.5 编程下载 24
2.2 CPLD/FPGA与单片机联合设计的学习器材介绍 24
2.2.1 Altera公司的集成开发软件MAX+plus Ⅱ及Quartus Ⅱ 24
2.2.2 Keil C51 Windows集成开发环境 25
2.2.3 MCU&CPLD DEMO综合试验板 26
2.2.4 ByteBlaster MV并口下载器 29
2.2.5 单片机USB程序下载器 30
2.2.6 9V高稳定专用稳压电源 30
第3章 开发软件的安装 32
3.1 Keil C51集成开发软件安装 32
3.2 MAX+plus Ⅱ集成开发软件安装 33
3.3 Quartus Ⅱ集成开发软件安装 38
3.4 USBasp下载器的安装与使用 49
3.4.1 USBasp下载器的安装 49
3.4.2 USBasp下载器的使用 51
3.5 Atmel并口下载软件atmelisp的安装 54
3.6 POF to JED转换软件Pof2jed的安装 55
第4章 第一个CPLD/FPGA入门实验程序 56
4.1 使用Max+plus Ⅱ集成开发软件进行入门实验 56
4.1.1 建立项目 56
4.1.2 设计输入(原理图或硬件描述语言) 56
4.1.3 选择器件并锁定引脚 59
4.1.4 编译器件 60
4.1.5 仿真 62
4.1.6 编程下载 67
4.1.7 应用 72
4.2 使用Quartus Ⅱ集成开发软件进行入门实验 72
4.2.1 建立项目 73
4.2.2 设计输入(原理图或硬件描述语言) 76
4.2.3 设计编译 79
4.2.4 仿真 79
4.2.5 引脚分配 91
4.2.6 编程下载 94
4.2.7 应用 94
第5章 Verilog HDL硬件描述语言 95
5.1 Verilog HDL模块的基本结构 95
5.1.1 模块声明 95
5.1.2 端口定义 96
5.1.3 信号类型说明 96
5.1.4 逻辑功能描述 96
5.1.5 实验程序1——缓冲器 98
5.1.6 实验程序2——反相器(非门) 98
5.2 Verilog HDL语法要素 99
5.2.1 标识符与关键字 99
5.2.2 常量、变量及数据类型 100
5.2.3 实验程序3——与门 102
5.2.4 实验程序4——与非门 103
5.2.5 实验程序5——LED的闪烁 103
5.2.6 运算符 104
5.2.7 运算符的优先级 108
5.2.8 实验程序6——或门 109
5.2.9 实验程序7——或非门 109
5.2.10 实验程序8——异或门 110
5.2.11 实验程序9——异或非门 111
5.2.12 实验程序10——三态门 111
5.3 Verilog HDL的行为语句 112
5.3.1 赋值语句 113
5.3.2 过程语句 113
5.3.3 块语句 115
5.3.4 条件语句 117
5.3.5 循环语句 118
5.3.6 编译预处理 119
5.3.7 任务和函数 121
5.4 Verilog HDL数字逻辑单元结构的设计 122
5.4.1 结构描述方式 122
5.4.2 实验程序——门级结构描述设计的基本门电路 125
5.4.3 数据流描述方式 127
5.4.4 行为描述方式 127
第6章 组合逻辑电路的设计实验 129
6.1 2选1数据选择器 129
6.1.1 2选1数据选择器简介 129
6.1.2 采用数据流描述方式的设计 130
6.1.3 采用行为描述方式的设计 131
6.2 4选1数据选择器 131
6.2.1 4选1数据选择器简介 131
6.2.2 采用数据流描述方式的设计 132
6.2.3 采用行为描述方式的设计 133
6.3 3位二进制优先编码器(8-3优先编码器) 134
6.3.1 3位二进制优先编码器简介 134
6.3.2 3位二进制优先编码器的设计 135
6.4 3位二进制译码器(3-8译码器) 136
6.4.1 3位二进制译码器简介 136
6.4.2 3位二进制译码器的设计 137
6.5 BCD-7段译码器 139
6.5.1 BCD-7段译码器简介 139
6.5.2 BCD-7段译码器的设计 139
6.6 半加器 141
6.6.1 半加器简介 141
6.6.2 采用门级描述方式的半加器设计 142
6.6.3 采用数据流描述方式的半加器设计 142
6.6.4 采用行为描述方式的半加器设计 143
6.7 全加器 144
6.7.1 全加器简介 144
6.7.2 全加器的设计 144
第7章 触发器的设计实验 146
7.1 RS触发器 146
7.1.1 RS触发器简介 146
7.1.2 RS触发器的设计 146
7.2 JK触发器 148
7.2.1 JK触发器简介 148
7.2.2 JK触发器的设计 148
7.3 带有复位的JK触发器 150
7.3.1 带有复位的JK触发器简介 150
7.3.2 带有复位的JK触发器的设计 150
7.4 D触发器 152
7.4.1 D触发器简介 152
7.4.2 D触发器的设计 153
7.5 带有复位的D触发器 154
7.5.1 带有复位的D触发器简介 154
7.5.2 带有复位的D触发器的设计 154
7.6 带有复位的异步T触发器 156
7.6.1 带有复位的异步T触发器简介 156
7.6.2 带有复位的异步T触发器的设计 156
7.7 带有复位的同步T触发器 158
7.7.1 带有复位的同步T触发器简介 158
7.7.2 带有复位的同步T触发器的设计 158
第8章 时序逻辑电路的设计实验 160
8.1 寄存器 160
8.1.1 寄存器简介 160
8.1.2 寄存器的设计 161
8.2 锁存器 162
8.2.1 锁存器简介 162
8.2.2 锁存器的设计 163
8.3 移位寄存器 164
8.3.1 移位寄存器简介 164
8.3.2 移位寄存器的设计 165
8.4 计数器 167
8.4.1 4位二进制异步加法计数器简介 167
8.4.2 4位二进制异步加法计数器的设计 168
8.4.3 十进制(任意进制)同步加法计数器简介 170
8.4.4 十进制同步加法计数器的设计 170
第9章 CPLD/FPGA的设计应用 172
9.1 跑马灯实验 172
9.1.1 实验要求 172
9.1.2 实现方法 172
9.1.3 程序设计 172
9.2 多位数码管的动态扫描显示 174
9.2.1 实验要求 174
9.2.2 实现方法 174
9.2.3 程序设计 174
9.3 蜂鸣器发声实验 177
9.3.1 实验要求 177
9.3.2 实现方法 177
9.3.3 程序设计 177
9.4 简易电子琴实验 178
9.4.1 实验要求 178
9.4.2 实现方法 178
9.4.3 程序设计 179
9.5 驱动字符型液晶显示器实验 180
9.5.1 实验要求 180
9.5.2 字符型液晶控制器的指令简介 180
9.5.3 字符型液晶控制器的工作时序 183
9.5.4 时序参数 184
9.5.5 实现方法 184
9.5.6 程序设计 184
9.6 串口接收实验 188
9.6.1 实验要求 188
9.6.2 实现方法 188
9.6.3 程序设计 188
9.7 串口发送实验 192
9.7.1 实验要求 192
9.7.2 实现方法 193
9.7.3 程序设计 193
9.8 RS232收发实验 197
9.8.1 实验要求 197
9.8.2 实现方法 197
9.8.3 程序设计 198
9.9 RS232收发不同内容的实验 204
9.9.1 实验要求 204
9.9.2 实现方法 205
9.9.3 程序设计 205
9.10 简易数字电子钟 212
9.10.1 实验要求 212
9.10.2 实现方法 212
9.10.3 程序设计 212
第10章 51单片机的基本知识 217
10.1 51单片机的基本结构 217
10.2 80C51基本特性及引脚定义 218
10.2.1 80C51的基本特征 218
10.2.2 80C51的引脚定义及功能 219
10.3 80C51的内部结构 220
10.4 80C51的存储器配置和寄存器 222
第11章 单片机C语言基础知识 225
11.1 C语言的标识符与关键字 225
11.2 数据类型 227
11.3 常量、变量及存储类型 227
11.4 数组 230
11.4.1 一维数组的定义 231
11.4.2 二维及多维数组的定义 231
11.4.3 字符数组 232
11.4.4 数组元素赋初值 232
11.4.5 数组作为函数的参数 233
11.5 C语言的运算 233
11.5.1 算术运算符 233
11.5.2 关系运算符 234
11.5.3 逻辑运算符 234
11.5.4 赋值运算符 235
11.5.5 自增和自减运算符 235
11.5.6 逗号运算符 236
11.5.7 条件运算符 236
11.5.8 位运算符 236
11.5.9 sizeof运算符 236
11.6 流程控制 237
11.6.1 条件语句与控制结构 237
11.6.2 循环语句 239
11.7 函数 241
11.7.1 函数定义的一般形式 241
11.7.2 函数的参数和函数返回值 242
11.7.3 函数调用的三种方式 242
11.8 指针 243
11.8.1 指针与地址 244
11.8.2 指针变量的定义 244
11.8.3 指针变量的引用 244
11.8.4 数组指针与指向数组的指针变量 245
11.8.5 指针变量的运算 246
11.8.6 指向多维数组的指针和指针变量 246
11.9 结构体 247
11.9.1 结构体的概念 247
11.9.2 结构体类型变量的定义 247
11.9.3 结构体类型需要注意的地方 249
11.9.4 结构体变量的引用 249
11.9.5 结构体变量的初始化 250
11.9.6 结构体数组 250
11.9.7 指向结构体类型数据的指针 250
11.9.8 用指向结构体变量的指针引用结构体成员 251
11.9.9 指向结构体数组的指针 251
11.9.10 将结构体变量和指向结构体的指针作函数参数 251
11.10 共用体 252
11.10.1 共用体类型变量的定义 252
11.10.2 共用体变量的引用 253
11.11 中断函数 253
11.11.1 什么是中断 253
11.11.2 中断响应及C51编程 254
11.11.3 51单片机的常用中断源和中断向量 255
11.11.4 编写51单片机中断函数时应严格遵循的规则 255
第12章 CPLD/FPGA与单片机的接口及数据传输 257
12.1 CPLD/FPGA与单片机AT89S51的接口连接及数据传输实验 257
12.1.1 实验要求 257
12.1.2 实现方法 257
12.1.3 CPLD/FPGA程序设计 258
12.1.4 单片机程序设计 260
12.2 单片机直接访问方式驱动液晶 267
12.2.1 实验要求 267
12.2.2 实现方法 267
12.2.3 CPLD/FPGA程序设计 268
12.2.4 单片机程序设计 269
12.3 单片机间接控制方式驱动液晶 273
12.3.1 实验要求 273
12.3.2 实现方法 273
12.3.3 CPLD/FPGA程序设计 274
12.3.4 单片机程序设计 274
第13章 CPLD/FPGA与单片机的联合设计实例——液晶显示频率计 279
13.1 设计要求 279
13.2 实现方法 279
13.2.1 CPLD/FPGA的功能设计 279
13.2.2 单片机的功能设计 280
13.3 CPLD/FPGA程序设计 280
13.4 单片机程序设计 286
参考文献 293