第1章 VHDL 语法概要 1
1.1 概述 2
1.2 语言特性 2
1.3 VHDL 语法规则 3
1.3.1 标识符 3
1.3.2 数据对象 3
1.3.3 数据类型 5
1.3.4 运算符 9
1.4 语句结构分类 12
1.4.1 库 12
1.5 并行语句 13
1.4.2 实体说明 13
1.4.3 结构定义 13
1.5.1 信号赋值 14
1.5.2 变量赋值 14
1.5.3 when_else(多输入条件,单输出语句) 15
1.5.4 with_select_when(单输入条件,单输出语句) 15
1.5.5 for_generate 语句 15
1.5.6 process 语句 16
1.5.7 block 语句 17
1.5.8 过程调用 17
1.5.9 元件例化 18
1.6 顺序性语句 20
1.6.1 条件语句 if_then_else 20
1.6.2 选择语句 case_when(单输入条件,多输出语句) 21
1.6.3 循环语句 for_loop 22
1.6.4 循环语句 while_loop 22
1.6.5 等待语句 wait_until 23
1.6.6 function 语句 23
1.7 程序包 24
第2章 基本数字逻辑电路设计 27
2.2.1 锁存器 28
2.2 数字信号传输控制 28
2.1 简介 28
2.2.2 多路选择器 multiplexer 29
2.2.3 三态门 29
2.2.4 双向输入/输出端口 30
2.2.5 内部(缓冲)信号 30
2.3 组合逻辑电路设计 31
2.3.1 编码转换 31
2.3.2 多路选择器 31
2.3.3 加法器 34
2.3.4 编码器/译码器 35
2.3.5 4位乘法器 37
2.3.6 只读存储器(16x8 ROM) 38
2.4 时序逻辑电路设计 39
2.4.1 RSFF 触发器 39
2.4.2 DFF 触发器 40
2.4.3 JKFF 触发器 41
2.4.4 计数器 41
2.4.5 分频器 46
2.4.6 寄存器 47
2.4.7 状态机 50
第3章 自动售货机 59
3.3 实验电路安排 60
3.1 自动售货机功能概述 60
3.2 自动售货机外观 60
3.4 系统设计说明 62
3.4.1 entity 定义模块 62
3.4.2 architecture 模块 64
3.4.3 产生退币闪烁信号的电路模块(return_clk) 65
3.4.4 投入10元硬币的处理电路模块(coin_10_counting) 67
3.4.5 投入5元硬币的处理电路模块(coin_5_counting) 68
3.4.6 饮料选择处理电路模块(select_drink) 69
3.4.7 确认与取消处理电路模块(ok_or_cancel) 71
3.4.8 退币处理电路模块(coin_returned) 72
3.4.9 出货并计算存货电路模块(give_check) 75
3.5 debouncing 电路模块 78
3.6 FPGA 制作讨论 81
第4章 电子钟 83
4.1 电子钟功能概述 84
4.2 电子钟外观 84
4.3 共享组件与程序包的设计说明 84
4.3.1 1Hz_generator 组件 87
4.3.2 count60组件 88
4.3.3 count24组件 90
4.3.4 alarm_set 组件 91
4.3.5 stop_watch 组件 94
4.3.6 i60bcd 组件 96
4.3.7 i24bcd 组件 98
4.3.8 bin21ed 组件 99
4.3.9 七段显示器扫描输出电路模块(display) 101
4.3.10 entity 模块 104
4.3.11 architecture 模块 106
4.3.12 正常计数时间功能模块 108
4.3.13 定时器设定与计时功能模块 109
4.3.14 闹钟设定与时间对比功能模块 109
4.3.15 输出选择与数码转换功能模块 110
4.3.16 扫描多路输出功能模块 112
4.4 FPGA 制作讨论 114
第5章 红绿灯交通信号系统 115
5.1 红绿灯交通信号系统功能概述 116
5.2 红绿灯交通信号系统外观 116
5.3 实验电路安排 117
5.4 红绿灯交通信号系统的 VHDL 模块图 117
5.5 红绿灯交通信号系统 VHDL 程序设计说明 119
5.5.1 clk_gen 时钟发生电路(即分频电路) 的 VHDL 设计说明 119
5.5.2 traffic_mux 计数秒数选择电路的 VHDL 程序设计说明 124
5.5.3 count_down 倒计时控制电路的 VHDL 程序设计说明 127
5.5.4 traffic_fsm 红绿灯信号控制电路的 VHDL 程序设计说明 131
5.6 建造一个属于自己的程序包(package) 142
5.6.1 traffic 红绿灯信号系统电路的 VHDL 程序设计说明 145
5.7 FPGA 制作讨论 148
第6章 步进电机定位控制系统 149
6.1 步进电机定位控制系统功能概述 150
6.2 步进电机定位控制系统的 VHDL 模块图 150
6.3 步进电机速度控制系统 VHDL 程序设计说明 151
6.3.1 entity 模块 152
6.3.2 architecture 模块 154
6.3.3 步进电机方向设定电路模块 154
6.3.4 步进电机步进移动与定位控制电路模块 160
6.3.5 编码输出电路模块 162
6.4 FPGA 制作讨论 163
第7章 直流电机速度控制系统 165
7.1 直流电机速度控制系统功能概述 166
7.1.1 电机加速 166
7.1.2 电机减速 166
7.1.3 电机定速 167
7.1.4 速度检测 168
7.2 实验电路安排 168
7.4 直流电机速度控制系统 VHDL 程序设计说明 169
7.3 直流电机速度控制系统的 VHDL 模块图 169
7.5 FPGA 制作讨论 183
第8章 计算器 185
8.1 加法器/减法器电路设计 186
8.1.1 全加器电路 186
8.1.2 四位逐位进位加法器 188
8.1.3 二进制编码的十进制(BCD)加法器电路 189
8.1.4 BCD 码取9补码电路 191
8.1.5 一个字符的 BCD 加/减法器 193
8.1.6 三个字符的 BCD 加/减法器 195
8.1.7 负数取补修正电路 197
8.1.8 寄存器电路 199
8.1.9 倒数计数器电路 200
8.1.10 加/减法器电路 201
8.2 乘法器电路设计 205
8.2.1 左移位寄存器电路 207
8.2.2 右移位寄存器电路 209
8.2.3 2选1选择器 210
8.2.4 乘法器电路 211
8.3 除法器电路设计 216
8.4 键盘扫描电路设计 224
8.4.1 分频器电路 225
8.4.2 键盘扫描计数器电路 226
8.4.3 按键检测电路 227
8.4.4 按键抖动消除电路 229
8.4.5 键盘编码电路 230
8.5 显示电路设计 234
8.5.1 七段显示器扫描电路 234
8.5.2 计数译码电路 235
8.5.3 BCD 多路选择器 236
8.5.4 BCD 对应七段显示器编码电路 237
8.5.5 显示电路整合 239
8.6 FPGA 制作讨论 241
第9章 点阵列 LED 显示控制系统 243
9.1 点阵列 LED 显示控制系统功能概述 244
9.1.1 点阵列 LED 显示组件的介绍 244
9.1.2 扫描式显示原理的介绍 244
9.1.3 字符字形的编码 245
9.2 单一字符显示电路 246
9.2.1 硬件电路结构设计 246
9.2.2 单一字符显示电路的 VHDL 程序设计说明 247
9.2.3 仿真波形图 254
9.3 八位数字字符显示电路 256
9.3.1 硬件电路结构设计 256
9.3.2 八位数字字符显示电路的 VHDL 程序设计说明 257
9.3.3 仿真波形图 264
9.4 独立式扫描电路模块 266
9.4.1 独立式扫描电路模块的 VHDL 程序设计说明 267
9.4.2 仿真波形图 272
9.5 水平式扫描显示电路 273
9.5.1 水平式扫描法 273
9.5.2 程序代码 274
9.5.3 仿真结果 277
9.6 结束语 279
9.7 FPGA 制作讨论 279
附录 281