第1章 布尔代数、布尔函数、VHDL和门 1
1.1 引言 1
1.2 布尔代数基础 1
1.2.1 维恩图 2
1.2.2 布尔函数的黑盒子 3
1.2.3 基本逻辑符号 4
1.2.4 布尔代数公理 6
1.2.5 布尔代数定理 7
1.2.6 布尔代数定理的证明 8
1.3 从真值表推导出布尔函数 9
1.3.1 用函数的1值推导出布尔函数 10
1.3.2 用函数的0值推导出布尔函数 11
1.3.3 用最小项和最大项推导出布尔函数 11
1.4 简单门函数的VHDL设计 14
1.4.1 NOT函数的VHDL设计 14
1.4.2 AND函数的VHDL设计 16
1.4.3 OR函数的VHDL设计 17
1.4.4 XOR函数的VHDL设计 19
1.4.5 NAND函数的VHDL设计 20
1.4.6 NOR函数的VHDL设计 22
1.4.7 XNOR函数的VHDL设计 23
1.4.8 BUFFER函数的VHDL设计 25
1.4.9 用标准形式给出的任意布尔函数的VHDL设计 27
1.5 有关逻辑门的更多内容 29
1.5.1 等价门符号 29
1.5.2 全功能门 30
1.5.3 等价门电路 30
1.5.4 门的简化描述名称 31
1.5.5 门的国际逻辑符号 32
习题 33
第2章 数制转换、码制和函数最简化 39
2.1 引言 39
2.2 数字电路与模拟电路 39
2.2.1 人类心脏的数字化信号 39
2.2.2 离散信号与连续信号 39
2.3 二进制数制转换 40
2.3.1 十进制数、二进制数、八进制数和十六进制数 40
2.3.2 转换技术 42
2.4 二进制码制 46
2.4.1 小键盘和键盘的最少比特表示 47
2.4.2 常见码制:BCD、ASCII以及其他 47
2.4.3 二进制和反射格雷码之间的模2加法和转换 50
2.4.4 七段码 52
2.4.5 字母显示系统的VHDL设计 53
2.5 卡诺图化简方法 56
2.5.1 卡诺图资源管理器 56
2.5.2 使用两变量卡诺图 57
2.5.3 使用三变量卡诺图 59
2.5.4 使用四变量卡诺图 61
2.5.5 无关的输出 63
习题 65
第3章 逻辑电路分析和设计简介 73
3.1 引言 73
3.2 集成电路器件 73
3.3 分析和设计逻辑电路 74
3.3.1 分析和设计继电器逻辑电路 75
3.3.2 分析IC逻辑电路 76
3.3.3 设计IC逻辑电路 77
3.4 生成详细的原理图 80
3.5 用与非/与非和或非/或非形式设计电路 82
3.6 传输延时 84
3.7 译码器 86
3.7.1 用译码器和单个门设计逻辑电路 88
3.8 多路选择器 91
3.8.1 用多路选择器设计逻辑电路 93
3.9 险象 95
3.9.1 功能险象 95
3.9.2 逻辑险象 96
习题 97
第4章 用VHDL实现组合逻辑电路的设计 103
4.1 引言 103
4.2 VHDL 103
4.3 库组成 104
4.4 实体声明 105
4.5 结构体声明 106
4.5.1 数据流设计风格评价 107
4.5.2 行为设计风格评价 107
4.5.3 结构设计风格评价 107
4.6 数据流设计风格 107
4.7 行为设计风格 111
4.8 结构设计风格 116
4.9 用连线和总线实现 122
4.10 VHDL设计实例 126
4.10.1 用标量输入和输出设计 126
4.10.2 用向量输入和输出设计 128
4.10.3 通用VHDL架构 130
习题 131
第4章 双稳态存储器件的VHDL设计 138
5.1 引言 138
5.2 S-R NOR锁存器分析 138
5.2.1 简单的电灯开关 138
5.2.2 S-R NOR锁存器的电路延迟模型 140
5.2.3 S-R NOR锁存器的特性表 141
5.2.4 S-R NOR锁存器的特征方程 141
5.2.5 S-R NOR锁存器的PS/NS表 142
5.2.6 S-R NOR锁存器的时序图 143
5.3 S-R NAND锁存器分析 145
5.3.1 S-R NAND锁存器电路延迟模型 145
5.3.2 S-R NAND锁存器的特性表 146
5.3.3 S-R NAND锁存器的特征方程 146
5.3.4 S-R NAND锁存器的PS/NS表 146
5.3.5 S-R NAND锁存器的时序图 147
5.4 设计一个简单的时钟 148
5.5 设计一个D锁存器 151
5.5.1 门控S-R锁存器电路设计 151
5.5.2 用S-R锁存器设计D锁存器电路 152
5.5.3 利用D锁存器的特性表来设计D锁存器电路 153
5.5.4 D锁存器的时序图 154
5.5.5 用D锁存器构造一个时钟 156
5.5.6 构造一个8比特的D锁存器 156
5.6 设计D触发器电路 157
5.6.1 设计主从型D触发器电路 157
5.6.2 用S-R NAND设计D触发器 161
5.6.3 上升沿触发的D触发器的时序图 164
习题 166
第6章 用VHDL设计简单的有限状态机 173
6.1 引言 173
6.2 同步电路 173
6.3 用VHDL构造一个D型触发器 174
6.4 设计简单的同步电路 176
6.5 用算法公式法设计计数器 176
6.6 用算法公式法设计非传统计数器 184
6.7 用算术法设计计数器 188
6.8 分频(降低一个快时钟的频率) 189
6.9 用PS/NS表格法设计计数器 192
6.10 用PS/NS表格法设计非传统计数器 195
习题 197
第7章 计算机电路 207
7.1 引言 207
7.2 三态输出与断开状态 207
7.3 微型计算机系统的数据总线共享 210
7.4 深入了解XOR和XNOR符号及功能 213
7.4.1 奇函数和偶函数 215
7.4.2 单比特错误检测系统 216
7.4.3 比较器和大于电路 218
7.5 加法器设计 221
7.5.1 半加器模块的设计 221
7.5.2 全加器模块的设计 222
7.6 设计及使用行波进位加法器和减法器 224
7.7 行波进位加法器的传播延迟时间 227
7.8 设计超前进位加法器 227
7.9 超前进位加法器的传播延迟时间 230
习题 231
第8章 电路实现技术 236
8.1 引言 236
8.2 可编程逻辑器件 236
8.2.1 可编程只读存储器(PROM)和查找表(LUT) 238
8.2.2 可编程逻辑阵列(PLA) 239
8.2.3 可编程阵列逻辑(PAL)或者通用阵列逻辑(GAL) 240
8.2.4 使用PROM或者LUT进行电路设计 241
8.2.5 使用PLA进行电路设计 242
8.2.6 使用PAL或者GAL进行电路设计 243
8.3 正逻辑规则和直接极性标志 244
8.3.1 信号名称 244
8.3.2 PLC和DPI系统的等效电路分析 245
8.4 更多关于多路选择器和数据分路器的内容 247
8.4.1 MUX树设计 249
8.4.2 DMUX树设计 250
习题 250
第9章 复杂有限状态机的VHDL设计 255
9.1 引言 255
9.2 基于双进程PS/NS方法的设计 256
9.3 CPLD、FPGA和状态机编码风格浅析 260
9.4 有限状态机模型总结 262
9.5 利用摩尔输出设计紧凑编码状态机 264
9.6 利用摩尔输出设计单热点编码的状态机 266
9.7 利用摩尔和米利输出设计紧凑编码状态机 270
9.8 利用摩尔和米利输出设计单热点编码状态机 273
9.9 利用算法公式法设计复杂状态机 275
9.10 提高复杂状态机的可靠性 281
9.11 其他状态机设计方法 285
9.11.1 双分配PS/NS方法 285
9.11.2 混合PS/NS方法 289
习题 292
第10章 基本的计算机体系结构 311
10.1 引言 311
10.2 通用数据处理系统或计算机 311
10.3 哈佛型计算机和RISC体系结构 312
10.4 普林斯顿(冯·诺依曼)型计算机和CISC体系结构 314
10.5 VBC1概述 315
10.6 VBC1设计原理 316
10.7 VBC1编程器寄存器模型 318
10.8 VBC1指令集体系结构 319
10.9 汇编语言程序的编写格式 321
习题 322
第11章 VBC1的汇编语言编程 325
11.1 引言 325
11.2 VBC1指令集 325
11.3 IN指令 325
11.4 OUT指令 329
11.5 MOV指令 331
11.6 LOADI指令 333
11.7 ADDI指令 334
11.8 ADD指令 336
11.9 SR0指令 338
11.10 JNZ指令 339
11.11 VBC1编程实例和技术 342
11.11.1 无条件跳转 342
11.11.2 标签 342
11.11.3 循环计数器 342
11.11.4 程序“横行” 343
11.11.5 减法指令 344
11.11.6 乘法指令 345
11.11.7 除法指令 345
习题 346
第12章 设计输入输出电路 351
12.1 引言 351
12.2 设计仲裁电路 351
12.3 设计总线仲裁电路 353
12.4 设计可加载寄存器电路 354
12.5 设计输入电路 356
12.5.1 设计由4个滑动开关驱动的输入电路 358
12.6 设计输出电路 359
12.6.1 设计驱动4个LED的输出电路 360
12.6.2 设计一个可以驱动七段显示器的输出电路 362
12.6.3 仔细观察显示0的电路 364
12.7 结合输入输出电路搭建一个简单I/O系统 365
12.8 可选的VHDL设计风格 368
习题 369
第13章 设计指令存储器、加载程序计数器和去抖动电路 372
13.1 引言 372
13.2 设计一个指令存储器 372
13.2.1 指令存储器的代码变形 375
13.2.2 在启动阶段初始化VBC1的指令存储器 377
13.3 设计一个加载程序计数器 380
13.4 设计一个去抖动单脉冲电路 382
13.5 设计去抖动单脉冲电路的验证电路 385
习题 393
第14章 设计多路显示系统 396
14.1 引言 396
14.2 4个七段LED显示器构成的多路显示系统 396
14.3 用VHDL设计多路显示系统 399
14.3.1 设计模块1:四选一MUX阵列 399
14.3.2 设计模块2:十六进制显示译码器 400
14.3.3 设计模块3:2比特计数器和分频器 401
14.3.4 设计模块4:2-4线译码器 403
14.4 用平面设计方法设计多路显示系统 404
14.5 用层次化设计方法设计多路显示系统 407
14.6 利用平面设计方法设计一个字符显示系统 413
习题 418
第15章 设计指令译码器 421
15.1 引言 421
15.2 指令译码器设计目标 421
15.3 指令IN、OUT和MOV的指令译码器真值表 422
15.4 设计指令IN的指令译码器 424
15.5 设计指令OUT和MOV的指令译码器 425
15.6 指令LOADI的指令译码器真值表 426
15.7 指令ADDI的指令译码器真值表 427
15.8 指令ADD的指令译码器真值表 428
15.9 指令SR0的指令译码器真值表 428
15.10 设计指令SR0的指令译码器 429
15.11 JNZ指令译码器真值表 430
15.12 设计指令JNZ的指令译码器 433
15.13 设计VBC1的指令译码器 434
习题 435
第16章 设计算术逻辑单元 440
16.1 引言 440
16.2 算术逻辑单元的使用 440
16.3 设计ALU的LOADI指令部分 442
16.4 设计ALU的ADDI指令部分 442
16.5 设计ALU的ADD指令部分 443
16.6 设计ALU的SR0指令部分 444
16.7 设计一个用于VBC1的ALU 445
16.8 用VHDL设计的附加电路 445
16.8.1 设计额外的ALU电路 445
16.8.2 设计移位电路 448
16.8.3 设计桶形移位电路 452
16.8.4 设计移位寄存器电路 455
习题 457
第17章 完成VBC1的设计 460
17.1 引言 460
17.2 设计一个运行程序计数器 460
17.3 将载入程序计数器与运行程序计数器结合起来 463
17.4 设计运行频率电路和速度电路 465
17.5 设计VBC1的指令存储器的载入电路 467
习题 468
第18章 VBC1-E的汇编语言编程 470
18.1 引言 470
18.2 指令总结 470
18.3 输入、输出与中断指令 472
18.4 数据存储指令 477
18.5 算术指令与逻辑指令 480
18.6 移位指令与循环移位指令 482
18.7 跳转指令、相对跳转指令与暂停指令 485
18.8 关于中断与汇编器命令的更多内容 489
18.9 VBC1-E完整指令集总结 494
习题 495
第19章 设计VBC1-E的输入输出电路 506
19.1 引言 506
19.2 VBC1-E的输入电路设计 506
19.3 VBC1-E的修改后IN指令的指令译码真值表 508
19.4 VBC1-E的输出电路设计 510
19.5 VBC1-E的修改后OUT指令的指令译码真值表 512
19.6 VBC1-E的修改后IN和OUT指令的指令译码器设计 515
19.7 VBC1-E的LOADI、ADDI和JNZ指令的指令译码器设计 516
习题 517
第20章 设计VBC1-E的数据存储器电路 520
20.1 引言 520
20.2 设计VBC1-E的数据存储器 520
20.3 设计VBC1-E的寄存器和数据选择电路 524
20.4 VBC1-E的STORE和FETCH指令的指令译码器真值表 525
20.5 设计VBC1-E的STORE和FETCH指令的指令译码器 527
20.6 设计VBC1-E的MOV指令的指令译码器 528
习题 529
第21章 设计VBC1-E的算术、逻辑、移位、旋转和无条件跳转电路 531
21.1 引言 531
21.2 VBC1-E ALU的算术和逻辑指令部分设计 531
21.3 VBC1-E的算术和逻辑指令译码器设计 533
21.4 VBC1-E ALU的移位和旋转指令部分设计 534
21.5 VBC1-E的移位和旋转指令译码器设计 536
21.6 VBC1-E的JMP和JMPR电路设计 537
21.7 VBC1-E的JMP和JMPR指令译码器设计 538
习题 539
第22章 设计VBC1-E中手动载入时阻止程序执行的电路 542
22.1 引言 542
22.2 设计VBC1-E中修改手动载入的电路 542
22.3 修改手动载入时VBC1-E中的指令译码器 544
习题 544
第23章 设计VBC1-E的扩展指令存储器 545
23.1 引言 545
23.2 为VBC1-E修改指令存储器以增加扩展指令存储器 545
23.3 为VBC1-E修改运行程序计数器电路 548
23.4 为VBC1-E修改合理地址电路 550
23.5 为VBC1-E修改加载程序计数器电路 550
23.6 为VBC1-E修改JMPR电路 551
习题 551
第24章 设计VBC1-E的软件中断电路 554
24.1 引言 554
24.2 设计VBC1-E的运行程序计数器与选择电路的改进电路 554
24.3 设计VBC1-E的存储PCPLUS1的电路 558
24.4 VBC1-E的INT和IRET指令的指令译码器真值表 560
24.5 设计VBC1-E的INT和IRET指令的指令译码器 561
习题 562
第25章 完成VBC1-E的设计 566
25.1 引言 566
25.2 设计VBC1-E的去抖动单脉冲触发中断电路并修改RPC电路 566
25.3 设计VBC1-E的RETA信号的显示电路 570
25.4 设计VBC1-E的提供指令存储器的加载器功能的电路 575
习题 575
附录A 实验案例 578
实验1A:门电路的设计与仿真 578
实验1B:完成设计流程 584
实验2:键盘编码系统的设计与测试 589
实验3:门电路检验系统的设计与测试 592
实验4:自定义十进制显示译码系统的设计与测试 596
实验5A:D锁存器与带CLR输入的D触发器的设计与测试 599
实验5B:8位寄存器及带PRE输入的D触发器的设计与测试 603
实验6A:简单计数系统的设计与测试——8位单热递增计数器 607
实验6B:简单计数器系统的设计与测试——两位格雷码计数器 611
实验6C:简单非常规计数系统的设计与测试——机器眼电路 614
实验6D:简单非常规计数系统的设计与测试——笑脸电路 618
实验7A:用平面设计方法进行简单错误系统的设计与测试 621
实验7B:用层次化设计方法进行简单4位加减系统的设计与测试 626
实验8:利用平面设计方法进行LUT系统的设计与测试 628
实验9A:用平面设计方法进行单热递增/递减计数系统的设计与测试 633
实验9B:用层次化设计方法进行十状态计数系统的设计与测试 637
实验10:VBC1系统EASY1(编辑器/汇编器/仿真器)的使用 641
实验11:用EASY1编写和仿真VBC1程序 645
实验12:VBC1系统的设计与测试(数据通路单元) 648
实验13:VBC1系统的设计与测试(指令存储单元) 653
实验14:VBC1系统的设计与测试(显示系统) 656
实验15:VBC1系统的设计与测试(指令译码器) 660
实验16:VBC1系统的设计与测试(算术逻辑单元) 663
实验17:VBC1系统的设计与测试(最终设计) 668
实验17L:设计VBC1系统的指令加载器 673
实验18:在VBC1系统上编写并运行汇编程序 679
实验19:VBC1-E的设计与测试(IN、OUT和未修改的指令) 682
实验20:VBC1-E系统的设计与测试(数据转移和访存指令) 687
实验21:VBC1-E系统的设计与测试(大部分指令) 692
实验22:VBC1-E系统的设计与测试(添加手动加载电路) 697
实验23:VBC1-E系统的设计与测试(添加扩展指令存储器) 700
实验24:VBC1-E系统的设计与测试(实现INT和IRET指令) 704
实验25:VBC1-E系统的设计与测试(最终设计) 708
实验25L:VBC1-E指令加载器的设计 713
附录B 用VHDL测试平台程序进行仿真 721
B.1 简介 721
B.2 例1:组合逻辑设计(工程:AND 3) 721
B.3 例2:同步时序逻辑设计(工程:DFF) 725
附录C FPGA管脚连接关系查询手册 729
C.1 BASYS 2开发板 729
C.2 NEXYS 2开发板 730
C.3 BASYS 2及NEXYS 2开发板上FPGA存储加载器的管脚接口 731
C.4 FX2MIB(模块转接板)——NEXYS 2外加电路板 732
附录D EASY1教程 733
D.1 简介 733
D.2 EASY1用户界面 733
D.3 EASY1界面布局 733
D.4 如何使用EASY1 735
D.5 例1:简单输入输出程序 735
D.6 例2:修改后能够一直执行的输入输出程序 741
D.7 例3:简单状态机程序 742
D.8 例4:复杂状态机程序 742
D.9 例5:产生延时 744
D.10 用EASY1产生VBC1平台的机器码 746
附录E 将指令加载到存储器中的三种方法 747
E.1 手动载入存储器 747
E.2 在启动时初始化存储器内容 748
E.3 通过存储器加载程序载入存储器 749