《用Verilog设计FPGA样机实例解析 XilinxSpartan 第3版》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)彭皮·楚(Pong P.Chu)著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2016
  • ISBN:7111536444
  • 页数:553 页
图书介绍:本书主要内容包括三部分:基本的数字电路、外围模块和内嵌的微控制器。第一部分介绍了基础的HDL结构和对应硬件,并示范如何用这些结构来搭建基本的数字电路。第二部分是应用第一部分的技术为原型板设计外围模块,介绍了一个单独外设的开发、实现和验证。可以将这些模块组成一个复杂的系统。第三部分介绍了基于FPGA的软核微控制器,即PicoBlaze,展示了如何将通用处理器和定制电路进行集成。本书通过实例深入浅出地介绍了使用Verilog对可编程逻辑器件进行设计的方法,不仅介绍了HDL的语法,重点介绍了对可编程逻辑器件的设计方法,提供了一系列使用Verilog对可编程逻辑器件进行设计的实例,书中的实例均可运行于Xilinx公司的 Spartan-3原型开发板中,使读者能够边动手边学习,达到快速入门并掌握其要领的目的。

第一部分 基本数字电路 3

第1章 门级组合电路 3

1.1 简介 3

1.2 一般描述 3

1.3 基本词汇元素 5

1.4 数据类型 5

1.4.1 四值系统 5

1.4.2 数据类型分类 6

1.4.3 数字表示 6

1.4.4 运算符 7

1.5 程序结构 8

1.5.1 端口声明 8

1.5.2 程序体 9

1.5.3 信号声明 9

1.5.4 其他例子 10

1.6 结构描述 11

1.7 测试平台 14

1.8 文献备注 16

1.9 实验 17

1.9.1 编码 17

1.9.2 二进制解码器门级编码 17

第2章 FPGA及EDA软件概述 18

2.1 简介 18

2.2 FPGA 18

2.2.1 通用FPGA器件概述 18

2.2.2 Xilinx Spartan-3器件概述 19

2.3 Digilent S3开发板概述 20

2.4 开发流程 22

2.5 Xilinx ISE图形化界面概貌 24

2.6 ISE Project Navigator简明教程 26

2.6.1 创建工程和HDL代码 28

2.6.2 创建Testbench及执行RTL仿真 29

2.6.3 添加约束文件综合和实现代码 29

2.6.4 生成并下载配置文件至FPGA芯片 31

2.7 Modelsim HDL仿真器简明教程 34

2.8 文献备注 39

2.9 实验 39

2.9.1 门级大于电路 39

2.9.2 门级二进制译码器 39

第3章 寄存器传输级组合逻辑电路 41

3.1 引言 41

3.2 运算符 41

3.2.1 算术运算符 42

3.2.2 移位运算符 43

3.2.3 关系和等价运算符 43

3.2.4 按位运算符、缩减运算符和逻辑运算符 43

3.2.5 位拼接和复制运算符 44

3.2.6 条件运算符 45

3.2.7 运算符优先级 46

3.2.8 表达式位长度调整 46

3.2.9 z、x的综合 48

3.3 组合逻辑电路always块 49

3.3.1 基本语法和行为 50

3.3.2 顺序赋值语句 50

3.3.3 变量数据类型 51

3.3.4 简单示例 51

3.4 if语句 53

3.4.1 语法 53

3.4.2 示例 54

3.5 case语句 56

3.5.1 语法 56

3.5.2 示例 57

3.5.3 casez和casex语句 58

3.5.4 full case与parallel case 59

3.6 条件控制语句的布线结构 60

3.6.1 优先路由网络 60

3.6.2 多路选择网络 62

3.7 always块的通用编码准则 63

3.7.1 组合逻辑电路代码的常见错误 63

3.7.2 准则 67

3.8 参数和常量 67

3.8.1 常量 67

3.8.2 参数 69

3.8.3 Verilog-1995的参数使用 71

3.9 设计实例 72

3.9.1 7段LED数码管十六进制译码器 72

3.9.2 “符号—幅值”加法器 76

3.9.3 桶式移位器 79

3.9.4 简化的浮点加法器 81

3.10 文献备注 87

3.11 实验 87

3.11.1 多功能桶式移位器 87

3.11.2 双优先级编码器 88

3.11.3 BCD码增量器 88

3.11.4 浮点数大于比较电路 88

3.11.5 浮点数和有符号整型数转换电路 89

3.11.6 增强型浮点型加法器 89

第4章 常规时序电路 90

4.1 简介 90

4.1.1 D触发器和寄存器 90

4.1.2 同步系统 91

4.1.3 代码开发 92

4.2 触发器和寄存器的HDL代码 92

4.2.1 D触发器 93

4.2.2 寄存器 96

4.2.3 寄存器文件 97

4.2.4 Xilinx Spartan-3器件的存储元件 98

4.3 简单的设计举例 99

4.3.1 移位寄存器 99

4.3.2 二进制计数器及其转换形式 101

4.4 时序电路的测试平台 105

4.5 案例学习 109

4.5.1 LED分时复用电路 109

4.5.2 码表 118

4.5.3 FIFO缓冲器 122

4.6 文献备注 128

4.7 实验 128

4.7.1 可编程的方波生成器 128

4.7.2 PWM和LED调节器 128

4.7.3 旋转的方形图案电路 128

4.7.4 心跳电路 129

4.7.5 可轮换的LED标语电路 129

4.7.6 增强的码表 129

4.7.7 栈 130

第5章 有限状态机 131

5.1 引言 131

5.1.1 Mealy输出和Moore输出 131

5.1.2 有限状态机表示方法 132

5.2 状态机编码设计 134

5.3 设计举例 137

5.3.1 上升沿检测器 137

5.3.2 去抖电路 143

5.3.3 测试电路 147

5.4 文献备注 149

5.5 参考实验 150

5.5.1 双沿检测器 150

5.5.2 另一种去抖电路 150

5.5.3 停车场占用计数器 150

第6章 带数据路径的有限状态机 152

6.1 简介 152

6.1.1 单个RT操作 152

6.1.2 ASMD图 153

6.1.3 带寄存器的判决盒 154

6.2 FSMD的代码开发 156

6.2.1 基于RT方法学的去抖电路 156

6.2.2 带有数据路径元件的编码 157

6.2.3 带有隐含数据路径元件的编码 161

6.2.4 对比 163

6.2.5 测试电路 165

6.3 设计实例 167

6.3.1 斐波纳契数电路 167

6.3.2 除法电路 171

6.3.3 二进制向BCD码转换电路 175

6.3.4 周期计数器 180

6.3.5 精确的低频计数器 184

6.4 文献备注 188

6.5 实验 188

6.5.1 另一种去抖电路 188

6.5.2 BCD码向二进制码转换电路 188

6.5.3 带有BCD I/O的斐波纳契电路:设计方法Ⅰ 188

6.5.4 带有BCD I/O的斐波纳契电路:设计方法Ⅱ 189

6.5.5 尺度自适应的低频计数器 189

6.5.6 反应定时电路 190

6.5.7 巴贝奇差分引擎模拟电路 191

第7章 Verilog相关的话题 192

7.1 阻塞和非阻塞 192

7.1.1 概述 192

7.1.2 组合逻辑电路 194

7.1.3 存储元件 196

7.1.4 时序电路使用阻塞和非阻塞赋值 197

7.2 另外一种时序电路代码风格 200

7.2.1 二进制计数器 200

7.2.2 FSM 203

7.2.3 FSMD 204

7.2.4 总结 207

7.3 使用有符号数据类型 208

7.3.1 概述 208

7.3.2 Verilog-1995中的有符号数 209

7.3.3 Verilog-2001中的有符号数 210

7.4 在综合中使用函数 211

7.4.1 概述 211

7.4.2 举例 212

7.5 用于测试平台开发的额外结构 214

7.5.1 always和initial块 214

7.5.2 程序语句 215

7.5.3 时序控制 217

7.5.4 延时控制 217

7.5.5 事件控制 218

7.5.6 wait语句 218

7.5.7 timescale指令 219

7.5.8 系统函数和任务 219

7.5.9 自定义函数和任务 224

7.5.10 复杂测试平台示例 226

7.6 文献备注 234

7.7 实验 234

7.7.1 使用阻塞和非阻塞赋值的移位寄存器 234

7.7.2 BCD计数器的另一种代码风格 235

7.7.3 FIFO缓冲器的另一种代码风格 236

7.7.4 斐波纳契数电路的另一种代码风格 236

7.7.5 双模式比较器 236

7.7.6 增加的二进制监视器 236

7.7.7 FIFO缓冲器测试平台 236

第二部分 I/O模块 239

第8章 UART 239

8.1 引言 239

8.2 UART接收子系统 240

8.2.1 过采样步骤 240

8.2.2 波特率产生器 241

8.2.3 UART接收端 241

8.2.4 接口电路 245

8.3 UART发送子系统 248

8.4 UART总系统简述 252

8.4.1 完整的UART核 252

8.4.2 UART验证配置 254

8.5 定制一个UART 257

8.6 文献备注 258

8.7 实验 258

8.7.1 具备所有特征的UART 258

8.7.2 拥有波特率自动检测功能的UART 258

8.7.3 拥有波特率校验位自动检测功能的UART 259

8.7.4 UART控制的秒表 259

8.7.5 UART控制的LED标语 260

第9章 PS2键盘 261

9.1 引言 261

9.2 P32接收子系统 261

9.2.1 PS2端口的物理层接口 261

9.2.2 设备到主机的通信协议 262

9.2.3 设计和代码 262

9.3 PS2键盘的扫描码 266

9.3.1 扫描码概述 266

9.3.2 扫描码监听电路 267

9.4 PS2键盘接口电路 271

9.4.1 基本设计与HDL代码 271

9.4.2 验证电路 274

9.5 文献备注 277

9.6 实验 277

9.6.1 可选的键盘接口Ⅰ 277

9.6.2 可选的键盘接口Ⅱ 277

9.6.3 带看门狗定时器的PS2接收子系统 277

9.6.4 键盘控制的秒表 278

9.6.5 键盘控制的移动LED横幅 278

第10章 PS2鼠标 279

10.1 引言 279

10.2 PS2鼠标协议 279

10.2.1 基本操作 279

10.2.2 基本的初始化程序 280

10.3 PS2传输子系统 281

10.3.1 主机到PS2设备的通信协议 281

10.3.2 设计和代码 282

10.4 双向的PS2接口 288

10.4.1 基本设计和代码 288

10.4.2 确认电路 289

10.5 PS2鼠标接口 293

10.5.1 基本设计 293

10.5.2 测试电路 297

10.6 文献备注 298

10.7 实验 298

10.7.1 键盘控制电路 298

10.7.2 增强的鼠标接口 299

10.7.3 鼠标控制7段LED显示器 299

第11章 外部SRAM 300

11.1 引言 300

11.2 IS61LV25616AL SRAM的特性 300

11.2.1 Block示意图和I/0信号 300

11.2.2 时序参数 302

11.3 基础存储控制器 304

11.3.1 Block示意图 304

11.3.2 时序需求 306

11.3.3 SRAM的寄存器文件 307

11.4 安全设计 307

11.4.1 ASMD图 307

11.4.2 时序分析 308

11.4.3 HDL编码(执行) 309

11.4.4 基础测试电路 313

11.4.5 全面的SRAM测试电路 316

11.5 更主流的设计 322

11.5.1 时序问题 322

11.5.2 可选设计Ⅰ 323

11.5.3 可选设计Ⅱ 325

11.5.4 可选设计Ⅲ 326

11.5.5 Xilinx公司的高级FPGA特点 327

11.6 文献备注 328

11.7 实验 328

11.7.1 512K×16配置的存储器 328

11.7.2 1M×8配置的寄存器 329

11.7.3 8M×1配置的存储器 329

11.7.4 扩展存储器实验电路 329

11.7.5 存储控制器和可选设计Ⅰ的测试电路 329

11.7.6 存储控制器和可选设计Ⅱ的测试电路 329

11.7.7 存储控制器和可选设计Ⅲ的测试电路 329

11.7.8 DCM的存储控制器 330

11.7.9 高性能存储控制器 330

第12章 XilinxSpartan-3特殊存储器 331

12.1 简介 331

12.2 Spartant-3设备的嵌入式存储器 331

12.2.1 摘要 331

12.2.2 对照 332

12.3 合并存储器模块的方法 332

12.3.1 元件例化产生的存储器模块 332

12.3.2 核生成器产生的存储器模块 334

12.3.3 通过HDL生成的存储器模块 334

12.4 存储器相关的HDL模板 334

12.4.1 单口RAM 335

12.4.2 双口RAM 338

12.4.3 ROM 340

12.5 文献备注 342

12.6 实验 343

12.6.1 基于块RAM的FIFO 343

12.6.2 基于块RAM的栈 343

12.6.3 基于ROM的大量信号地址 343

12.6.4 基于ROM的sin(x)函数 343

12.6.5 基于ROM的sin(x)和cos(x)函数 344

第13章 VGA控制器Ⅰ:图形 345

13.1 简介 345

13.1.1 CRT的基本工作方式 345

13.1.2 S3板上的VGA端口 346

13.1.3 视频控制器 347

13.2 VGA同步 348

13.2.1 水平同步 348

13.2.2 垂直同步 349

13.2.3 VGA同步信号的时序计算 350

13.2.4 HDL实现 351

13.2.5 测试电路 354

13.3 像素生成电路概述 355

13.4 使用对象映射图的图像生成 356

13.4.1 矩阵对象 357

13.4.2 非矩阵对象 362

13.4.3 活动的对象 364

13.5 位图映射的图像生成 372

13.5.1 双口RAM实现 373

13.5.2 单口RAM实现 378

13.6 文献备注 379

13.7 实验 379

13.7.1 VGA测试图案发生器 379

13.7.2 SVGA模式同步电路 379

13.7.3 可视化屏幕调整电路 380

13.7.4 箱子里球的电路 380

13.7.5 箱子里两个球的电路 380

13.7.6 两个游戏者的游戏 380

13.7.7 越狱游戏 380

13.7.8 全屏圆点轨迹 381

13.7.9 鼠标指针电路 381

13.7.10 小屏幕内鼠标轨迹电路 381

13.7.11 全屏幕鼠标轨迹电路 382

第14章 VGA控制器Ⅱ:示例 383

14.1 简介 383

14.2 举例 383

14.2.1 点阵的特性 383

14.2.2 字体ROM 384

14.2.3 基本文本生成电路 386

14.2.4 字体显示电路 387

14.2.5 字体缩放比例 390

14.3 全屏文本显示 391

14.4 完整的乒乓游戏设计 396

14.4.1 文本子系统 396

14.4.2 修正图像分系统 404

14.4.3 辅助计算器 406

14.4.4 顶层系统 408

14.5 文献备注 415

14.6 实验 415

14.6.1 旋转旗帜 415

14.6.2 指针的下划线 415

14.6.3 双模式文本显示 415

14.6.4 键盘文本输入 415

14.6.5 UART终端 416

14.6.6 方波显示 416

14.6.7 简单的四路逻辑分析器 416

14.6.8 完整的双人乒乓游戏 417

14.6.9 完整的通关游戏 417

第三部分 PicoBlaze微控制器 421

第15章 PicoBlze概述 421

15.1 简介 421

15.2 定制硬件和软件 421

15.2.1 从专用FSMD到通用微控制器 421

15.2.2 微控制器的应用 423

15.3 PicoBlaze概述 424

15.3.1 基本组成 424

15.3.2 顶层HDL模块 425

15.4 开发流程 426

15.5 指令集 428

15.5.1 编程模式 428

15.5.2 指令格式 429

15.5.3 逻辑指令 429

15.5.4 算术指令 430

15.5.5 比较和检验指令 431

15.5.6 移位和循环指令 432

15.5.7 数据传输指令 434

15.5.8 程序控制指令 436

15.5.9 中断指令 440

15.6 伪指令声明指令 441

15.6.1 KCPSM3汇编伪指令 441

15.6.2 PBlazeIDE汇编伪指令 441

15.7 文献备注 442

第16章 PicoBlaze汇编语言开发 443

16.1 简介 443

16.2 有效的代码表 443

16.2.1 KCPSM3协议 443

16.2.2 比特操作 443

16.2.3 多字节数据处理 445

16.2.4 控制结构 446

16.3 子程序开发 449

16.4 编程 450

16.4.1 示例 451

16.4.2 程序文件 457

16.5 汇编代码处理 459

16.5.1 KCSPM3编译 460

16.5.2 PBlazeIDE仿真 460

16.5.3 JTAG重载 463

16.5.4 PBlazeIDE编译 463

16.6 PicoBlaze综合 464

16.7 文献备注 466

16.8 实验 466

16.8.1 有符号数乘法运算 466

16.8.2 多字节乘法运算 466

16.8.3 循环位移功能 466

16.8.4 高低位互置功能 466

16.8.5 二进制码至BCD码转换 466

16.8.6 BCD码至二进制码转换 467

16.8.7 心跳电路 467

16.8.8 旋转闪亮LED电路 467

16.8.9 离散LED调光器 467

第17章 PicoBlaze I/O接口 468

17.1 简介 468

17.2 输出端口 468

17.2.1 output指令及时序 468

17.2.2 输出接口 469

17.3 输入端口 479

17.3.1 输入指令和时序 472

17.3.2 输入接口 472

17.4 包括开关输入和7段LED显示接口的二次方计算程序 474

17.4.1 输出接口 475

17.4.2 输入接口 476

17.4.3 集成代码开发 478

17.4.4 HDL代码开发 488

17.5 结合组合乘法器和UART控制器的乘法程序 492

17.5.1 乘法器接口 492

17.5.2 UART接口 493

17.5.3 汇编代码开发 494

17.5.4 HDL代码开发 508

17.6 文献备注 512

17.7 实验 512

17.7.1 低频计数器Ⅰ 512

17.7.2 低频计数器Ⅱ 513

17.7.3 自适应低频计数器 513

17.7.4 利用软件定时器替代基础反应定时器 513

17.7.5 包含硬件定时器的反应定时器 513

17.7.6 增强型反应定时器 513

17.7.7 小屏幕鼠标跟踪电路 514

17.7.8 全屏幕鼠标跟踪电路 514

17.7.9 增强型跑马灯字幕 514

17.7.10 乒乓游戏 514

17.7.11 文本编程器 514

第18章 PicoBlaze中断接口 515

18.1 简介 515

18.2 PicoBlaze里的中断操作 515

18.2.1 软件处理 515

18.2.2 时序图 517

18.3 外部接口 517

18.3.1 中断请求信号 517

18.3.2 多重中断请求 518

18.4 软件发展描述 519

18.4.1 中断作为一个可选择的计划方案 519

18.4.2 中断服务程序的发展 519

18.5 设计用例 520

18.5.1 接口中断 520

18.5.2 中断服务程序的发展 521

18.5.3 集成代码的发展 521

18.5.4 HDL代码的发展 524

18.6 文献备注 528

18.7 实验 528

18.7.1 可选择的计时器中断服务程序 528

18.7.2 可编程的计时器 529

18.7.3 设置按钮中断服务程序 529

18.7.4 两个请求的中断服务程序 529

18.7.5 4个请求的中断控制器 529

附录 Verilog举例 531

A.1 数值和运算符 531

A.1.1 有符号数和无符号数 531

A.1.2 运算符 531

A.2 一般的Verilog构造 532

A.2.1 全部代码的组成 532

A.2.2 例化部分 534

A.3 条件运算符操作以及if和case语句 535

A.3.1 条件运算符操作和if语句 535

A.3.2 case语句 536

A.4 用always过程块组成的电路 537

A.4.1 过程块无默认输出值 537

A.4.2 过程块输出有默认值 538

A.5 寄存组成 538

A.5.1 寄存器模板 538

A.5.2 寄存器文件 539

A.6 时序电路 540

A.7 有限状态机 541

A.8 有限状态机数据 544

A.9 S3开发板的约束文件S3.UCF 547

参考文献 552