第1章 布尔代数、布尔函数、VHDL和门 1
1.1 引言 1
1.2 布尔代数基础 1
1.2.1 维恩图 2
1.2.2 布尔函数的黑盒子 3
1.2.3 基本逻辑符号 4
1.2.4 布尔代数公理 7
1.2.5 布尔代数定理 8
1.2.6 布尔代数定理的证明 9
1.3 从真值表推出布尔函数 10
1.3.1 用函数的1值推出布尔函数 10
1.3.2 用函数的0值推出布尔函数 11
1.3.3 用最小项和最大项推出布尔函数 12
1.4 简单门函数的VHDL设计 15
1.4.1 NOT函数的VHDL设计 15
1.4.2 AND函数的VHDL设计 17
1.4.3 OR函数的VHDL设计 18
1.4.4 XOR函数的VHDL设计 19
1.4.5 NAND函数的VHDL设计 21
1.4.6 NOR函数的VHDL设计 22
1.4.7 XNOR函数的VHDL设计 24
1.4.8 BUFFER函数的VHDL设计 26
1.4.9 用标准形式给出的任意布尔函数的VHDL设计 27
1.5 有关逻辑门的更多内容 30
1.5.1 等价门符号 30
1.5.2 全功能门 31
1.5.3 等价门电路 32
1.5.4 门的简化描述名称 32
1.5.5 门的国际逻辑符号 32
习题 34
第2章 数制转换、码制和函数最简化 37
2.1 引言 37
2.2 数字电路与模拟电路 37
2.2.1 人类心脏的数字化信号 37
2.2.2 离散信号与连续信号 38
2.3 二进制数制转换 38
2.3.1 十进制数、二进制数、八进制数和十六进制数 38
2.3.2 转换技术 40
2.4 二进制码制 45
2.4.1 小键盘和键盘的最少比特表示 45
2.4.2 常见码制:BCD,ASCII,以及其他 45
2.4.3 二进制和反射格雷码之间的模2加法和转换 48
2.4.4 七段码 51
2.4.5 字母显示系统的VHDL设计 52
2.5 卡诺图化简方法 54
2.5.1 卡诺图资源管理器 55
2.5.2 使用两变量卡诺图 56
2.5.3 使用三变量卡诺图 58
2.5.4 使用四变量卡诺图 60
2.5.5 无关的输出 61
习题 63
第3章 逻辑电路分析和设计简介 67
3.1 引言 67
3.2 集成电路器件 67
3.3 分析和设计逻辑电路 69
3.3.1 分析和设计继电器逻辑电路 69
3.3.2 分析IC逻辑电路 70
3.3.3 设计IC逻辑电路 71
3.4 生成详细的原理图 74
3.5 用与非/与非和或非/或非形式设计电路 76
3.6 传输延时 78
3.7 译码器 79
3.7.1 用译码器和单个门设计逻辑电路 82
3.8 多路选择器 85
3.8.1 用多路选择器设计逻辑电路 87
3.9 险象 88
3.9.1 功能险象 88
3.9.2 逻辑险象 89
习题 91
第4章 组合逻辑电路的VHDL设计 94
4.1 引言 94
4.2 VHDL 94
4.3 库组成 95
4.4 实体声明 96
4.5 结构体声明 97
4.5.1 数据流设计风格评价 98
4.5.2 行为设计风格评价 98
4.5.3 结构设计风格评价 98
4.6 数据流设计风格 99
4.7 行为设计风格 102
4.8 结构设计风格 106
4.9 用连线和总线实现 112
4.10 VHDL设计实例 116
4.10.1 用标量输入和输出设计 117
4.10.2 用向量输入和输出设计 118
4.10.3 通用VHDL体系结构 120
习题 121
第5章 双稳态存储器件的VHDL设计 125
5.1 引言 125
5.2 S-R NOR锁存器分析 125
5.2.1 简单的电灯开关 125
5.2.2 S-R NOR锁存器的电路延迟模型 127
5.2.3 S-R NOR锁存器的特性表 128
5.2.4 S-R NOR锁存器的特征方程 129
5.2.5 S-R NOR锁存器的PS/NS表 129
5.2.6 S-R NOR锁存器的时序图 130
5.3 S-R NAND锁存器分析 132
5.3.1 S-R NAND锁存器电路延迟模型 132
5.3.2 S-R NAND锁存器的特性表 132
5.3.3 S-R NAND锁存器的特征方程 133
5.3.4 S-R NAND锁存器的PS/NS表 133
5.3.5 S-R与非锁存器的时序图 133
5.4 设计一个简单的时钟 134
5.5 设计一个D锁存器 137
5.5.1 门控S-R锁存器电路设计 137
5.5.2 用S-R锁存器设计D锁存器电路 138
5.5.3 利用D锁存器的特性表来设计D锁存器电路 139
5.5.4 D锁存器的时序图 140
5.5.5 用D锁存器构造一个时钟 141
5.5.6 构造一个8比特的D锁存器 142
5.6 设计D触发器电路 143
5.6.1 设计主从型D触发器电路 143
5.6.2 用S-R与非锁存器设计D触发器 146
5.6.3 上升沿触发的D触发器的时序图 149
习题 150
第6章 简单有限状态机的VHDL设计 156
6.1 引言 156
6.2 同步电路 156
6.3 用VHDL构造一个D型触发器 157
6.4 设计简单的同步电路 158
6.5 用算法公式法设计计数器 159
6.6 用算法公式法设计非传统计数器 167
6.7 用算术法设计计数器 170
6.8 分频(降低一个快时钟的频率) 171
6.9 用PS/NS表格法设计计数器 174
6.10 用PS/NS表格法设计非传统计数器 177
习题 178
第7章 计算机电路 184
7.1 引言 184
7.2 三态输出与断开状态 184
7.3 微计算机系统的数据总线共享 187
7.4 深入了解XOR和XNOR符号及功能 190
7.4.1 奇函数和偶函数 191
7.4.2 单比特错误检测系统 192
7.4.3 比较器和大于电路 194
7.5 加法器设计 197
7.5.1 半加器模块的设计 197
7.5.2 全加器模块的设计 198
7.6 设计及使用行波进位加法器和减法器 200
7.7 行波进位加法器的传播延迟时间 203
7.8 设计超前进位加法器 203
7.9 超前进位加法器的传播延迟时间 206
习题 206
第8章 电路实现技术 210
8.1 引言 210
8.2 可编程逻辑器件 210
8.2.1 可编程只读存储器(PROM)和查找表(LUT) 212
8.2.2 可编程逻辑阵列(PLA) 213
8.2.3 可编程阵列逻辑(PAL)或者通用阵列逻辑(GAL) 213
8.2.4 使用PROM或者LUT进行电路设计 214
8.2.5 使用PLA进行电路设计 215
8.2.6 使用PAL或者GAL进行电路设计 216
8.3 正逻辑规则和直接极性标志 217
8.3.1 信号名称 217
8.3.2 PLC和DPI系统的等效电路分析 218
8.4 更多关于多路选择器(MUX)和数据分路器(DMUX)的内容 221
8.4.1 MUX树设计 223
8.4.2 DMUX树设计 223
习题 224
第9章 复杂有限状态机的VHDL设计 227
9.1 引言 227
9.2 基于双进程PS/NS方法的设计 228
9.3 CPLD、FPGA和状态机编码风格浅析 231
9.4 有限状态机模型总结 234
9.5 利用摩尔输出设计紧凑编码状态机 235
9.6 利用摩尔输出设计单热点编码状态机 237
9.7 利用摩尔和米利输出设计紧凑编码状态机 241
9.8 利用摩尔和米利输出设计单热点编码状态机 243
9.9 利用算法公式法设计复杂状态机 245
9.10 提高复杂状态机的可靠性 251
9.11 其他状态机设计方法 255
9.11.1 双分配PS/NS方法 256
9.11.2 混合PS/NS方法 259
习题 262
第10章 基本的计算机体系结构 279
10.1 引言 279
10.2 通用数据处理系统或计算机 279
10.3 哈佛型计算机和RISC体系结构 280
10.4 普林斯顿(冯·诺依曼)型计算机和CISC体系结构 282
10.5 VBC1概述 283
10.6 VBC1设计原理 283
10.7 VBC1编程器寄存器模型 286
10.8 VBC1指令集体系结构 287
10.9 汇编语言程序的编写格式 289
习题 290
第11章 VBC1的汇编语言编程 292
11.1 引言 292
11.2 VBC1指令集 292
11.3 IN指令 293
11.4 OUT指令 296
11.5 MOV指令 298
11.6 LOADI指令 300
11.7 ADDI指令 301
11.8 ADD指令 303
11.9 SRO指令 304
11.10 JNZ指令 306
11.11 VBC1编程实例和技术 308
11.11.1 无条件跳转 308
11.11.2 标签 308
11.11.3 循环计数器 309
11.11.4 程序“横行” 310
11.11.5 减法指令 310
11.11.6 乘法指令 312
11.11.7 除法指令 312
习题 312
第12章 设计输入/输出电路 316
12.1 引言 316
12.2 设计仲裁电路 316
12.3 设计总线仲裁电路 318
12.4 设计可加载寄存器电路 319
12.5 设计输入电路 321
12.5.1 设计由4个滑动开关驱动的输入电路 323
12.6 设计输出电路 324
12.6.1 设计驱动4个LED的输出电路 325
12.6.2 设计一个可以驱动7段显示器的输出电路 326
12.6.3 仔细观察显示0的电路 328
12.7 结合输入输出电路搭建一个简单I/O系统 329
12.8 可选的VHDL设计风格 332
习题 333
第13章 设计指令存储器、加载程序计数器和去抖动电路 335
13.1 引言 335
13.2 设计一个指令存储器 335
13.2.1 指令存储器的代码变形 337
13.2.2 在启动阶段初始化VBC1的指令存储器 339
13.3 设计一个加载程序计数器 342
13.4 设计一个去抖动单脉冲电路 345
13.5 设计去抖动单脉冲电路的验证电路 348
习题 355
第14章 设计多路显示系统 357
14.1 引言 357
14.2 四个7段LED显示器构成的多路显示系统 357
14.3 用VHDL设计多路显示系统 360
14.3.1 设计模块一:四选一MUX阵列 360
14.3.2 设计模块二:十六进制显示译码器 361
14.3.3 设计模块三:2比特计数器和分频器 362
14.3.4 设计模块四:2-4线译码器 364
14.4 用平面设计方法设计多路显示系统 364
14.5 用层次化设计方法设计多路显示系统 367
14.6 利用平面设计方法设计一个字符显示系统 372
习题 377
第15章 设计指令译码器 379
15.1 引言 379
15.2 指令译码器设计目标 379
15.3 指令IN、OUT和MOV的指令译码器真值表 380
15.4 设计指令IN的指令译码器 382
15.5 设计指令OUT和MOV的指令译码器 383
15.6 指令LOADI的指令译码器真值表 384
15.7 指令ADDI的指令译码器真值表 385
15.8 指令ADD的指令译码器真值表 386
15.9 指令SR0的指令译码器真值表 387
15.10 设计指令SR0的指令译码器 388
15.11 指令JNZ的指令译码器真值表 389
15.12 设计指令JNZ的指令译码器 391
15.13 设计VBC1的指令译码器 393
习题 393
第16章 设计算术逻辑单元 398
16.1 引言 398
16.2 算术逻辑单元的使用 398
16.3 设计ALU的LOADI指令部分 399
16.4 设计ALU的ADDI指令部分 400
16.5 设计ALU的ADD指令部分 401
16.6 设计ALU的SR0指令部分 401
16.7 为VBC1设计一个ALU 402
16.8 用VHDL设计的附加电路 403
16.8.1 设计额外的ALU电路 403
16.8.2 设计移位电路 406
16.8.3 设计桶形移位电路 409
16.8.4 设计移位寄存器电路 412
习题 414
第17章 完成VBC1的设计 416
17.1 引言 416
17.2 设计一个运行程序计数器 416
17.3 将载入程序计数器与运行程序计数器结合起来 419
17.4 设计运行频率电路和速度电路 421
17.5 设计VBC1的指令存储器的载入电路 423
习题 424
第18章 VBC1-E的汇编语言编程 425
18.1 引言 425
18.2 指令总结 425
18.3 输入、输出与中断指令 427
18.4 数据存储指令 432
18.5 算术指令与逻辑指令 434
18.6 移位指令与循环移位指令 437
18.7 跳转指令、相对跳转指令与暂停指令 439
18.8 关于中断与汇编器命令的更多内容 443
18.9 VBC1-E完整指令集总结 448
习题 449
第19章 设计VBC1-E的输入/输出电路 458
19.1 引言 458
19.2 VBC1-E的输入电路设计 458
19.3 VBC1-E的修改后IN指令的指令译码真值表 460
19.4 VBC1-E的输出电路设计 462
19.5 VBC1-E的修改后OUT指令的指令译码真值表 464
19.6 VBC1-E的修改后IN和OUT指令的指令译码器设计 464
19.7 VBC1-E的LOADI、ADDI和JNZ指令的指令译码器设计 467
习题 468
第20章 设计VBC1-E的数据存储器电路 471
20.1 引言 471
20.2 设计VBC1-E的数据存储器 471
20.3 设计VBC1-E的寄存器和数据选择电路 475
20.4 VBC1-E的STORE和FETCH指令的指令译码器真值表 475
20.5 设计VBC1-E的STORE和FETCH指令的指令译码器 478
20.6 设计VBC1-E的MOV指令的指令译码器 479
习题 480
第21章 设计VBC1-E的算术、逻辑、移位、旋转和无条件跳转电路 482
21.1 引言 482
21.2 VBC1-E ALU的算术和逻辑指令部分设计 482
21.3 VBC1-E的算术和逻辑指令译码器设计 484
21.4 VBC1-E ALU的移位和旋转指令部分设计 485
21.5 VBC1-E的移位和旋转指令译码器设计 486
21.6 VBC1-E的JMP和JMPR电路设计 488
21.7 VBC1-E的JMP和JMPR指令译码器设计 489
习题 490
第22章 设计VBC1-E中手动载入时阻止程序执行的电路 493
22.1 引言 493
22.2 设计VBC1-E中修改手动载入的电路 493
22.3 修改手动载入时VBC1-E中的指令译码器 495
习题 495
第23章 设计VBC1-E的扩展指令存储器 496
23.1 引言 496
23.2 为VBC1-E修改指令存储器以增加扩展指令存储器 496
23.3 为VBC1-E修改运行程序计数器电路 500
23.4 为VBC1-E修改合理地址电路 501
23.5 为VBC1-E修改加载程序计数器电路 501
23.6 为VBC1-E修改JMPR电路 502
习题 502
第24章 设计VBC1-E的软件中断电路 504
24.1 引言 504
24.2 设计VBC1-E的运行程序计数器与选择电路的改进电路 504
24.3 设计VBC1-E的存储PCPLUS1的电路 509
24.4 VBC1-E的INT和IRET指令的指令译码器真值表 510
24.5 设计VBC1-E的INT和IRET指令的指令译码器 511
习题 513
第25章 完成VBC1-E的设计 516
25.1 引言 516
25.2 设计VBC1-E的去抖动单脉冲触发中断电路并修改RPC电路 516
25.3 设计VBC1-E的RETA信号的显示电路 521
25.4 设计VBC1-E的提供指令存储器的加载器功能的电路 525
习题 525
附录 528
附录A 实验案例 528
实验1A:门电路的设计与仿真 528
实验1B:完成设计流程 534
实验2:键盘编码系统的设计与测试 539
实验3:门电路检验系统的设计与测试 542
实验4:自定义十进制显示译码系统的设计与测试 546
实验5A:D锁存器与带CLR输入的D触发器的设计与测试 549
实验5B:8位寄存器与带PRE输入的D触发器的设计与测试 553
实验6A:简单计数系统的设计与测试——8位单热递增计数器 558
实验6B:简单计数器系统的设计与测试——两位格雷码计数器 562
实验6C:简单非常规计数系统的设计与测试——机器眼电路 565
实验6D:简单非常规计数系统的设计与测试——笑脸电路 569
实验7A:用平面设计方法进行简单错误检测系统的设计与测试 572
实验7B:用层次化设计方法进行简单4位加减系统的设计与测试 577
实验8:利用平面设计方法进行LUT系统的设计与测试 580
实验9A:用平面设计方法进行单热递增/递减计数系统的设计与测试 584
实验9B:用层次化设计方法进行十状态计数系统的设计与测试 589
实验10:VBC1系统EASY1(编辑器/汇编器/仿真器)的使用 593
实验11:用EASY1编写和仿真VBC1程序 598
实验12:VBC1的设计与测试(数据通路单元) 600
实验13:VBC1的设计与测试(指令存储单元) 605
实验14:VBC1的设计与测试(显示系统) 609
实验15:VBC1的设计与测试(指令译码器) 613
实验16:VBC1的设计与测试(算术逻辑单元) 617
实验17:VBC1的设计与测试(最终硬件设计) 621
实验17L:设计VBC1的指令存储器加载器 626
实验18:在VBC1上编写并运行汇编程序 632
实验19:VBC1-E的设计与测试(IN、OUT和未修改的指令) 635
实验20:VBC1-E的设计与测试(MOV和数据存储器指令) 640
实验21:VBC1-E的设计与测试(大部分指令) 645
实验22:VBC1-E的设计与测试(修改后的手动加载) 651
实验23:VBC1-E的设计与测试(添加扩展指令存储器) 654
实验24:VBC1-E的设计与测试(INT和IRET指令) 658
实验25:VBC1-E的设计与测试(最终硬件设计) 663
实验25L:设计VBC1-E的指令存储器加载器 668
附录B 用VHDL测试平台程序进行仿真 675
B.1 简介 675
B.2 例1:组合逻辑设计(工程AND_3) 675
B.3 例2:同步时序逻辑设计(工程DFF) 679
附录C FPGA管脚连接关系查询手册 683
C.1 BASYS 2开发板 683
C.2 NEXYS 2开发板 684
C.3 BASYS 2及NEXYS 2开发板上FPGA存储加载器的I/O引脚接口 685
C.4 FX2MIB(模块转接板):NEXYS 2外加电路板 686
附录D EASY1教程 687
D.1 简介 687
D.2 EASY1用户界面 687
D.3 EASY1界面布局 687
D.4 如何使用EASY1 689
D.5 例1:简单输入输出程序 689
D.6 例2:修改后能够一直执行的输入/输出程序 695
D.7 例3:简单状态机程序 696
D.8 例4:复杂状态机程序 696
D.9 例5:产生延时 698
D.10 用EASY1产生VBC1平台的机器码 699
附录E 将指令加载到存储器中的三种方法 701
E.1 手动载入存储器 701
E.2 在启动时初始化存储器内容 702
E.3 通过存储器加载程序载入存储器 703
索引 705