描述
开 本: 16开纸 张: 胶版纸包 装: 平装国际标准书号ISBN: 9787121278969
编辑推荐
本书以FPGA设计案例为引导,深入浅出,系统而全面地介绍了FPGA的开发流程,条理清晰,内容丰富,立根实践,独具匠心,是一本不可多得的工具书、参考书,非常适合初学者与工程设计人员阅读,可能会成为FPGA史上备受欢迎的入门进阶蓝宝书
内容简介
本书由浅入深、由表及里,从FPGA技术的探索到资源的发现与利用,从硬件版图规划与设计到逻辑电路验证与实现,从模块化功能的研究与积累到系统集成的综合与Timingquest时序优化,系统、全面地介绍Altera FPGA的开发流程。本书的所有例程均经过千锤百炼,相关FPGA设计的资源均由笔者多年整理归纳,希望读者能够妥善利用。
目 录
第1章 浅谈FPGA技术、优势、学习途径 (1)
1.1 FPGA的诞生、发展 (1)
1.1.1 FPGA的诞生 (1)
1.1.2 FPGA的发展与未来 (4)
1.1.3 博弈,在入门之前 (7)
1.2 Altera FPGA介绍及发展、应用 (8)
1.2.1 Altera公司介绍 (8)
1.2.2 Altera产品介绍 (9)
1.2.3 Altera FPGA的开发平台 (15)
1.2.4 Altera FPGA的动态与应用 (17)
1.2.5 Altera FPGA的应用 (20)
1.2.6 对比ARM与DSP,认清FPGA (23)
1.3 善用网络资源,不断总结自我 (26)
第2章 Quartus II 13.0套件的下载及安装 (29)
2.1 写在前面的话 (29)
2.2 Quartus II 13.0软件下载 (30)
2.3 Quartus II 13.0组件安装 (32)
2.4 Quartus II 13.0 Device安装 (36)
2.5 USB Blaster下载器驱动程序的安装 (39)
第3章 Verilog HDL语法简介 (43)
3.1 What is Verilog HDL? (43)
3.2 设计层次 (44)
3.3 设计流程 (44)
3.4 基本语法介绍 (46)
3.4.1 模块module (46)
3.4.2 注释 (47)
3.4.3 大小写 (47)
3.4.4 参数声明parameter (48)
3.4.5 预处理指令 (48)
3.4.6 常量 (49)
3.4.7 变量 (50)
3.4.8 运算符 (51)
3.5 Verilog HDL建模 (54)
3.5.1 结构建模 (54)
3.5.2 数据流建模 (56)
3.5.3 行为建模 (57)
3.5.4 关于状态机 (66)
第4章 MAX II CPLD/Cyclone II/IV FPGA设 PCB Layout设计 (76)
4.1 浅谈PCB Layout (76)
4.2 MAX II CPLD核心电路设计 (77)
4.2.1 MAX II CPLD背景及简介 (77)
4.2.2 EPM240T100C5N设计需求研究及分析 (79)
4.2.3 EPM240T100C5N核心板原理图设计 (83)
4.2.4 EPM240T100C5N核心板布局布线 (87)
4.3 Cyclone II FPGA核心电路设计 (88)
4.3.1 Cyclone II FPGA背景及简介 (88)
4.3.2 Cyclone II数据手册解读与EP2C8Q208C8N的设计研究 (89)
4.3.3 EP2C8Q208C8N核心板原理图设计 (101)
4.3.4 FPGA核心板Layout注意事项 (110)
4.4 Cyclone IV FPGA核心电路设计 (113)
4.4.1 Cyclone IV FPGA简介 (113)
4.4.2 Cyclone IV FPGA数据手册分析与EP4CE6E22C8N的设计研究 (115)
4.4.3 Cyclone IV FPGA核心电路设计 (121)
4.5 FPGA/CPLD电路焊接、调试经验总结 (124)
4.6 本书配套FPGA开发平台硬件介绍 (128)
4.6.1 VIP_Board 3.0硬件资源介绍 (128)
4.6.2 VIP_Board 3.0相关外设实物介绍 (130)
第5章 Verilog HDL设计与Testbench 文件架构 (134)
5.1 Verilog HDL设计 (134)
5.1.1 Verilog HDL与VHDL的对比 (134)
5.1.2 Verilog HDL的发展 (135)
5.1.3 Verilog HDL代码设计风格 (136)
5.2 Testbench文件架构 (141)
5.2.1 Testbench的介绍 (141)
5.2.2 Testbench代码设计风格 (142)
5.3 Quartus II工程目录文件夹的定制 (145)
第6章 4位计数器的设计与仿真验证 (147)
6.1 写在前面的话 (147)
6.2 FPGA/CPLD开发流程 (147)
6.3 基于Quartus II 13.0的4位计数器设计流程 (149)
6.3.1 Quartus II 工程的创建 (149)
6.3.2 4位计数器的逻辑电路设计 (152)
6.3.3 Quartus II编译流程与工程设置分析 (155)
6.4 基于Modelsim-Altera 10.1d的4位计数器仿真验证流程 (166)
6.4.1 关于FPGA设计的各种仿真概念分析 (167)
6.4.2 Modelsim版本的简要介绍 (168)
6.4.3 Modelsim工程的创建 (168)
6.4.4 Testbench激励文件的编写 (171)
6.4.5 Modelsim波形的仿真与分析 (174)
6.5 设计思路的验证与总结 (182)
第7章 LED驱动电路设计 (183)
7.1 LED驱动电路设计方案1—入门 (183)
7.1.1 LED驱动电路设计方案 (183)
7.1.2 8位LED的自加显示实验 (185)
7.2 LED驱动电路设计方案2—升级 (196)
7.2.1 LED电路设计方案 (196)
7.2.2 74HC595驱动分析与实现 (198)
7.3 8位LED跑马灯显示实验 (208)
7.4 LED特效呼吸灯的设计 (215)
7.4.1 PWM协议的基本介绍 (215)
7.4.2 LED呼吸灯的设计 (216)
第8章 独立按键与矩阵键盘的FPGA驱动电路实现 (227)
8.1 按键及其工作模式介绍 (227)
8.1.1 按键抖动原理分析 (228)
8.1.2 硬件消抖动 (228)
8.1.3 软件消抖动 (230)
8.2 独立按键的FPGA驱动电路设计 (230)
8.2.1 独立按键电路设计 (230)
8.2.2 FSM状态机的Verilog HDL介绍 (231)
8.2.3 FPGA按键驱动设计方案1 (234)
8.2.4 FPGA按键驱动设计方案2 (248)
8.3 矩阵键盘的FPGA驱动电路设计 (252)
8.3.1 工作原理及电路设计 (252)
8.3.2 FPGA矩阵键盘驱动设计 (255)
第9章 “Hello World”的LCD1602显示驱动实现 (267)
9.1 LCD1602介绍及硬件设计 (267)
9.1.1 LCD1602字符液晶介绍 (267)
9.1.2 LCD1602硬件电路设计 (268)
9.1.3 LCD1602的时序及初始化分析 (271)
9.2 LCD1602的FPGA驱动电路实现 (275)
9.2.1 LCD1602的C语言实现方案 (276)
9.2.2 LCD1602的Verilog HDL实现方案 (277)
第10章 优化设计FPGA全局时钟管理模块 (290)
10.1 异步复位,同步释放机制 (290)
10.1.1 组合电路中的竞争-冒险 (291)
10.1.2 时序电路中的竞争-冒险 (292)
10.2 无PLL的全局时钟管理模块设计 (296)
10.3 Quartus II IP核介绍及PLL的定制 (305)
10.3.1 Quartus II IP核的介绍 (305)
10.3.2 PLL IP核的定制与分析 (311)
10.4 带PLL的全局时钟管理模块设计 (319)
第11章 基于FPGA与MCU通信的SPI协议设计 (325)
11.1 SPI总线协议介绍及硬件的设计 (325)
11.1.1 SPI总线协议介绍 (325)
11.1.2 STM8的硬件电路设计 (327)
11.1.3 SPI总线协议时序分析 (329)
11.2 SPI总线协议的通信实现 (330)
11.2.1 STM8的SPI总线收发设计 (330)
11.2.2 边沿检测电路的FPGA实现 (332)
11.2.3 SPI通信的数据接收模块设计 (334)
11.2.4 SPI通信的数据发送模块设计 (343)
第12章 基于FPGA与PC通信的UART串口设计 (351)
12.1 追根溯源透析串口通信 (351)
12.1.1 串口通信简介 (351)
12.1.2 串口波特率 (354)
12.1.3 串口协议分析 (354)
12.2 串口电路的设计 (355)
12.2.1 TTL转RS-232电路的设计 (355)
12.2.2 USB→UART转换电路设计 (356)
12.2.3 UART电路的调试 (357)
12.3 细说真正的任意分频 (358)
12.3.1 分频电路的重要性 (358)
12.3.2 任意频率发生器原理 (358)
12.3.3 任意频率发生器的验证 (360)
12.4 串口通信的硬件实现 (364)
12.4.1 uart_receiver接收模块的设计 (364)
12.4.2 uart_transfer发送模块的设计 (372)
12.4.3 PC2FPGA UART联调测试 (376)
第13章 基于FPGA的VGA驱动显示设计 (383)
13.1 VGA接口、时序及驱动电路设计 (383)
13.
1.1 FPGA的诞生、发展 (1)
1.1.1 FPGA的诞生 (1)
1.1.2 FPGA的发展与未来 (4)
1.1.3 博弈,在入门之前 (7)
1.2 Altera FPGA介绍及发展、应用 (8)
1.2.1 Altera公司介绍 (8)
1.2.2 Altera产品介绍 (9)
1.2.3 Altera FPGA的开发平台 (15)
1.2.4 Altera FPGA的动态与应用 (17)
1.2.5 Altera FPGA的应用 (20)
1.2.6 对比ARM与DSP,认清FPGA (23)
1.3 善用网络资源,不断总结自我 (26)
第2章 Quartus II 13.0套件的下载及安装 (29)
2.1 写在前面的话 (29)
2.2 Quartus II 13.0软件下载 (30)
2.3 Quartus II 13.0组件安装 (32)
2.4 Quartus II 13.0 Device安装 (36)
2.5 USB Blaster下载器驱动程序的安装 (39)
第3章 Verilog HDL语法简介 (43)
3.1 What is Verilog HDL? (43)
3.2 设计层次 (44)
3.3 设计流程 (44)
3.4 基本语法介绍 (46)
3.4.1 模块module (46)
3.4.2 注释 (47)
3.4.3 大小写 (47)
3.4.4 参数声明parameter (48)
3.4.5 预处理指令 (48)
3.4.6 常量 (49)
3.4.7 变量 (50)
3.4.8 运算符 (51)
3.5 Verilog HDL建模 (54)
3.5.1 结构建模 (54)
3.5.2 数据流建模 (56)
3.5.3 行为建模 (57)
3.5.4 关于状态机 (66)
第4章 MAX II CPLD/Cyclone II/IV FPGA设 PCB Layout设计 (76)
4.1 浅谈PCB Layout (76)
4.2 MAX II CPLD核心电路设计 (77)
4.2.1 MAX II CPLD背景及简介 (77)
4.2.2 EPM240T100C5N设计需求研究及分析 (79)
4.2.3 EPM240T100C5N核心板原理图设计 (83)
4.2.4 EPM240T100C5N核心板布局布线 (87)
4.3 Cyclone II FPGA核心电路设计 (88)
4.3.1 Cyclone II FPGA背景及简介 (88)
4.3.2 Cyclone II数据手册解读与EP2C8Q208C8N的设计研究 (89)
4.3.3 EP2C8Q208C8N核心板原理图设计 (101)
4.3.4 FPGA核心板Layout注意事项 (110)
4.4 Cyclone IV FPGA核心电路设计 (113)
4.4.1 Cyclone IV FPGA简介 (113)
4.4.2 Cyclone IV FPGA数据手册分析与EP4CE6E22C8N的设计研究 (115)
4.4.3 Cyclone IV FPGA核心电路设计 (121)
4.5 FPGA/CPLD电路焊接、调试经验总结 (124)
4.6 本书配套FPGA开发平台硬件介绍 (128)
4.6.1 VIP_Board 3.0硬件资源介绍 (128)
4.6.2 VIP_Board 3.0相关外设实物介绍 (130)
第5章 Verilog HDL设计与Testbench 文件架构 (134)
5.1 Verilog HDL设计 (134)
5.1.1 Verilog HDL与VHDL的对比 (134)
5.1.2 Verilog HDL的发展 (135)
5.1.3 Verilog HDL代码设计风格 (136)
5.2 Testbench文件架构 (141)
5.2.1 Testbench的介绍 (141)
5.2.2 Testbench代码设计风格 (142)
5.3 Quartus II工程目录文件夹的定制 (145)
第6章 4位计数器的设计与仿真验证 (147)
6.1 写在前面的话 (147)
6.2 FPGA/CPLD开发流程 (147)
6.3 基于Quartus II 13.0的4位计数器设计流程 (149)
6.3.1 Quartus II 工程的创建 (149)
6.3.2 4位计数器的逻辑电路设计 (152)
6.3.3 Quartus II编译流程与工程设置分析 (155)
6.4 基于Modelsim-Altera 10.1d的4位计数器仿真验证流程 (166)
6.4.1 关于FPGA设计的各种仿真概念分析 (167)
6.4.2 Modelsim版本的简要介绍 (168)
6.4.3 Modelsim工程的创建 (168)
6.4.4 Testbench激励文件的编写 (171)
6.4.5 Modelsim波形的仿真与分析 (174)
6.5 设计思路的验证与总结 (182)
第7章 LED驱动电路设计 (183)
7.1 LED驱动电路设计方案1—入门 (183)
7.1.1 LED驱动电路设计方案 (183)
7.1.2 8位LED的自加显示实验 (185)
7.2 LED驱动电路设计方案2—升级 (196)
7.2.1 LED电路设计方案 (196)
7.2.2 74HC595驱动分析与实现 (198)
7.3 8位LED跑马灯显示实验 (208)
7.4 LED特效呼吸灯的设计 (215)
7.4.1 PWM协议的基本介绍 (215)
7.4.2 LED呼吸灯的设计 (216)
第8章 独立按键与矩阵键盘的FPGA驱动电路实现 (227)
8.1 按键及其工作模式介绍 (227)
8.1.1 按键抖动原理分析 (228)
8.1.2 硬件消抖动 (228)
8.1.3 软件消抖动 (230)
8.2 独立按键的FPGA驱动电路设计 (230)
8.2.1 独立按键电路设计 (230)
8.2.2 FSM状态机的Verilog HDL介绍 (231)
8.2.3 FPGA按键驱动设计方案1 (234)
8.2.4 FPGA按键驱动设计方案2 (248)
8.3 矩阵键盘的FPGA驱动电路设计 (252)
8.3.1 工作原理及电路设计 (252)
8.3.2 FPGA矩阵键盘驱动设计 (255)
第9章 “Hello World”的LCD1602显示驱动实现 (267)
9.1 LCD1602介绍及硬件设计 (267)
9.1.1 LCD1602字符液晶介绍 (267)
9.1.2 LCD1602硬件电路设计 (268)
9.1.3 LCD1602的时序及初始化分析 (271)
9.2 LCD1602的FPGA驱动电路实现 (275)
9.2.1 LCD1602的C语言实现方案 (276)
9.2.2 LCD1602的Verilog HDL实现方案 (277)
第10章 优化设计FPGA全局时钟管理模块 (290)
10.1 异步复位,同步释放机制 (290)
10.1.1 组合电路中的竞争-冒险 (291)
10.1.2 时序电路中的竞争-冒险 (292)
10.2 无PLL的全局时钟管理模块设计 (296)
10.3 Quartus II IP核介绍及PLL的定制 (305)
10.3.1 Quartus II IP核的介绍 (305)
10.3.2 PLL IP核的定制与分析 (311)
10.4 带PLL的全局时钟管理模块设计 (319)
第11章 基于FPGA与MCU通信的SPI协议设计 (325)
11.1 SPI总线协议介绍及硬件的设计 (325)
11.1.1 SPI总线协议介绍 (325)
11.1.2 STM8的硬件电路设计 (327)
11.1.3 SPI总线协议时序分析 (329)
11.2 SPI总线协议的通信实现 (330)
11.2.1 STM8的SPI总线收发设计 (330)
11.2.2 边沿检测电路的FPGA实现 (332)
11.2.3 SPI通信的数据接收模块设计 (334)
11.2.4 SPI通信的数据发送模块设计 (343)
第12章 基于FPGA与PC通信的UART串口设计 (351)
12.1 追根溯源透析串口通信 (351)
12.1.1 串口通信简介 (351)
12.1.2 串口波特率 (354)
12.1.3 串口协议分析 (354)
12.2 串口电路的设计 (355)
12.2.1 TTL转RS-232电路的设计 (355)
12.2.2 USB→UART转换电路设计 (356)
12.2.3 UART电路的调试 (357)
12.3 细说真正的任意分频 (358)
12.3.1 分频电路的重要性 (358)
12.3.2 任意频率发生器原理 (358)
12.3.3 任意频率发生器的验证 (360)
12.4 串口通信的硬件实现 (364)
12.4.1 uart_receiver接收模块的设计 (364)
12.4.2 uart_transfer发送模块的设计 (372)
12.4.3 PC2FPGA UART联调测试 (376)
第13章 基于FPGA的VGA驱动显示设计 (383)
13.1 VGA接口、时序及驱动电路设计 (383)
13.
前 言
序一~序八
既然选择了远方,便不顾风雨兼程
从正确通往完美的路,是很遥远并万分艰辛的……
决定执笔此书,已经有将近一年的光阴。**版已售罄,有幸迎来了本书第二春。时间过得太快,甚至都没来得及回味,却又得开始不停地追随。我们总是在不停地奔跑,却又没有时间停下来思索——我们,究竟在坚持什么?是因为兴趣使然,挡不住的诱惑?还是因为吃穿住行、柴米油盐酱醋?是因为歪打正着,稀里糊涂地过活?还是因为雄心壮志,不顾一切地追求……
也许我只是一个FPGA界的小人物,也许我还没有资格在数字界说三道四,也许我还不足以写出一本脍炙人口的好书,也许这本书会因为相关的不足而被喷得体无完肤,但仅此希望,我的点滴总结,我的肺腑之言,能够帮助一些曾经与我一样,在FPGA成长道路上迷茫、挣扎、徘徊的朋友,能让他们少走些学习FPGA的弯路,能让他们认清FPGA的真谛,能让他们掌握设计的精髓,能让他们从此有目标地奋斗前行。
我出生于浙江诸暨的一个小山区,远离都市的繁华,从小成长在大山的怀抱。在长辈们眼里,考上大学,是山区孩子**的出路。从小按部就班地读书,千篇一律地重复,很难有自己的追求,直到高考的到来。高考,是我平凡命运的转折点,也是我跨出的人生的**步。与大部分人一样,我并没有因为太多的了解,或者由于兴趣而选择专业,而是顺应时代的潮流。2008年9月,我**次朦胧地跨入了电子信息工程这个专业(当年相当热门的一个专业)。
坐落于天堂杭州的杭州电子科技大学(简称杭电),是一所以电子专业著称的高校,也是一所改变我人生轨迹的大学。太多人因为电子梦,聚集到了这里;太多人满载着知识与梦想,挥手告别了这里。大学的四年,母校是我认清自己的净土,是我挣扎脱壳的摇篮,更是我梦想起航的地方。
作为一所以电子设计著称的高校,大部分学生都是赤裸裸地来追求技术的海洋。电子类学生对技术的狂热,尤其是大一学生的好奇,在刚入学期间表现得淋漓尽致。电子信息工程学院(简称电院)有一个无线电爱好者协会,是30多年前几位老前辈,由于彼此对无线电设计的兴趣而建立的团队,继而发展成为一个研究并培养对电子开发有热情的学生的协会。为了尊重创始人,该协会一直没改名字,但实质上一直都是一个以电子开发著称的社团。该协会是学校公认的一个以热情与激情、兴趣与责任结晶的社团,坐落于电院2#中楼,在每一届会长的带领下,以阶梯式教育的方式,在课外培养了一代又一代技术狂人,同时每年均会选拔一部分愿意留任,担负培养下一代重任的学生。几十年来,协会培养了很多电子特长的学生,包括很多留校的老师,尽管不停地更新换代,旧去新来,但却一直传承发扬着协会精神。
每年一度的电院“震‘焊’人心焊接大赛”,是进入协会的敲门砖。为了能够进入协会,当年的我从一个不认识烙铁、电阻、电容的人,夜以继日地训练,恶补电子元器件知识,掌握焊接工具的使用,从当初的拿烙铁手发抖,到*后以时间与质量,在几分钟内(具体不记得了,应该在5分钟内)焊接完一套5V直流稳压电压,而荣获了一等奖(现在回头看看,那时的焊接技术简直是“渣渣”)。也许正是因为如此,我在大一**学期就进入了协会,认识了几位对我的大学四年有深远影响的学长——王凯与曾庆卿学长,他们在后续的日子里多次指点并教导过我,感谢他们的帮助才有了我的明天。
在随后的一段日子里,我由经常串门,升级到长期蜗居协会,我开始寻找、开始追求、开始如饥似渴地学习(现在认为是盲目追求),在仅仅半年时间内,我熟练掌握了焊接技巧(现在看来还是很“渣”),手工焊接了多路直流稳压电源,并且自学了C语言,开始意识到拥有一台电脑是多么的重要。一学期过得很快,但却过得很充实,学海无涯,我突然发现大学就是该为自己的追求而疯狂。
我真正开始学FPGA,是在大一的第二学期。那时学校搞课程改革,由潘松老师负责教学,将大三的数学、EDA课程提前到大一,好让学生们能更早地找到自己的目标,选择或决定自己未来的方向。潘松老师是《EDA技术实用教程》、《EDA技术实用教程——VHDL版》、《EDA技术与Verilog HDL》等书的作者,同时是杭州康芯电子有限公司的创始人,开发了多套FPGA实验箱、开发套件,在杭电,甚至全国多所高校都有使用,开辟了国内高校FPGA教学的先锋。
记得当时的课程改革并没有针对所有学生,而是选取了180多个“小白兔”(据我所知我是*后**幸存的一只小白兔)进行试验,而我有幸就是其中一个。一学期内,我们从*基本的数字电路开始学习,从各种74系列、与非门芯片开始学习,在数电实验箱上用组合电路实现加法器、跑马灯、交通灯等实验。接着转场开始学习FPGA技术(当时认为无所不能的现场可编程门阵列),从原理图Block方式的数字电路设计,到从零开始的VHDL语言的学习,*后采用纯HDL代码的方式,完成了学期末的课程设计——可编程音乐播放器及精准时分秒计数器。尽管在现在看来,这无非是切换2个ROM,按照一定的频率驱动蜂鸣器,以及简单的计数与数码管的驱动而已,但在当时却被认为小有成就,学有所成。
大一暑假,我没有回家,而是抱着康芯的实验箱,将每一个模块都玩了一遍。我将图书馆中与FPGA有关的书都翻了一遍,深入学习了VHDL语言,掌握了基本的FPGA设计思路,同时还未雨绸缪地学习了使用Altium Designer 2009(当时的DXP**版本软件),绘制了相关的PCB版图。康芯实验箱上还集成有8051单片机模块,总不能老是冷落了“她”,由于自己的反常规学习,我逼迫自己在5天内看完了郭天祥的《10天学会51单片机的教程》,狠狠地把51单片机的知识恶补了一把。记得该教程中有郭天祥亲自编写的《郭天祥——我的大学六年》,极大地鼓舞了我。该文档我至少看过10遍,“晨昏三叩首,早晚一炷香”,我懂得了他的所谓的很多人因为游戏人生,荒废本科之后的悔恨;懂得了把握青春,成就自己未来的珍贵;明确了自己该做什么,也许为自己的未来奋斗,才是真正的大学。
此外,我还深切体会到机遇的重要性。机会总是会给有准备的人,对于整天抱怨没有人带,而不去寻找机遇的人,我只能说你还没有准备好。事实上当时在180个小白兔名单外的人,找老师美言几句也能入围,重点在于你愿不愿意尝试——胆大心细脸皮厚,没有什么不可以。那时由于开始在QQ技术交流群活跃,我还认识了网友王会计(圈子里的很多人都认识他),那时作为前辈的他,对懵懂的我的告诫是,有幸我太早拥有了学习的机会,但这只是一个开始,课程只能给你指路,未来还得靠自己(我于2012年8月在北京**次拜会了王会计前辈,真人不露相)。
同年8月下旬,由于自己对技术的热情,外加在协会出色的表现,我成为无线电爱好者协会中,选拔去电院CAD研究所409实验室学习的一员(当时仅有3个人,其他两位分别是邓团飞、冀玮楠,这两个人是我未来的队友,一起浴血奋战的兄弟)。感谢409负责人,前协会会长,无线电爱好者协会名誉主席杨峰学长给了我这个弥足珍贵的机会,伯乐识马,没有这个机遇,也不会有今天的我。杨峰学长一直带领并指导协会,在大学7年的他,培养了无数饱含真才实学的电子工程师,在师生界具有极大的影响力,是大家公认的“老大”。在CAD研究所的2年多,是我本科电子设计*充实、*富有激情、*值得回忆的时光,是我定向成长全方位塑造自己的摇篮,也是我后来选择FPGA专业开发的基石。
由于对FPGA的基础与激情,我分组并进入了实验室的FPGA小组。作为小白兔的FPGA学习基础,对于实验室的需求而言还远远不够。在刀哥(FPGA小组组长)的指点下,我开始加强锻炼,从HDL的编写到FPGA设计思维,从时序电路到功能开发,从头开始优化自己,作为一个小白兔产物,我还需要进化。也正是这一阶段,我从零开始研究VGA显示驱动设计,并对图像显示开发产生了极大的兴趣,这也正是后来一年我一直执迷于LCD显示开发的缘由。
年少无知,从串口程序设计,到SPI时序的研究,我竟然想通过SD卡的SPI驱动来实现VGA图像源的获取。正是因为对技术的热情,我认识了网友黄娜(当时在EDN工作,后来去CSDN了),并介绍我认识了特权同学。时值2009年8月,5年过去了,回头看看,特权同学在那个时候还没有出名,FPGA视频教程还没开始录制,仅有的只是开始在EDN网站写博客。我有幸在平凡时期认识了未来无所不能、在业界有一定影响力的特权同学,指点并让我研究他当年设计的SD卡的SPI驱动时序。但是该驱动程序中的Verilog HDL语言和上千行的精华代码,让当时的我望尘莫及,几乎读不懂,这让自认为小有成就的我开始自叹不足。虽然结果我还是没能驱动SD卡,但对SPI的时序还是有了深入了解,更值得庆幸的是,我认识了未来几年对FPGA界有巨大贡献,受无数人膜拜与尊重,出版了《深入浅出玩转FPGA》、《爱上FPGA开发——特权和你一起学NIOS II》,永远忠于年轻时梦想的特权同学。特权同学的学习精神,以及出版的书籍,对我未来几年产生了深远的影响,源于DT,重在设计,在前辈的指领下,我正努力地前行。
大二开学了,我由于对技术的热情,大部分时间都是在实验室度过的。在那个年代,我们用的还是Quartus II 5.1,VHDL在高校依然很盛行,FPGA被认为是高功耗、高成本、开发周期长的方案,一块简单的EP2C8Q208C8N的开发板价格不菲,同时FPGA的学习资料,包括书或网络资源,远没有现在那么多。在前行的道路上,每一步都是那么的艰难。正当我徘徊在VHDL与Verilog HDL之间,以及在研究SOPC时连一个LED灯驱动都搞不定的低迷时刻,我认识了正在读大四的张亚峰,也就是网友小时不识月,当初的COM张。
当初的张亚峰,专业研究Altera FPGA,并将学习心得整理成博文发布于cnblog,博客日产量甚至可能超过他的饭量。在他*疯狂的时刻,我有幸认识了他,他对我指点迷津,悉心教导,甚至远程协助。在我徘徊不定时,他以多种理由“说服”我学习Verilog
既然选择了远方,便不顾风雨兼程
从正确通往完美的路,是很遥远并万分艰辛的……
决定执笔此书,已经有将近一年的光阴。**版已售罄,有幸迎来了本书第二春。时间过得太快,甚至都没来得及回味,却又得开始不停地追随。我们总是在不停地奔跑,却又没有时间停下来思索——我们,究竟在坚持什么?是因为兴趣使然,挡不住的诱惑?还是因为吃穿住行、柴米油盐酱醋?是因为歪打正着,稀里糊涂地过活?还是因为雄心壮志,不顾一切地追求……
也许我只是一个FPGA界的小人物,也许我还没有资格在数字界说三道四,也许我还不足以写出一本脍炙人口的好书,也许这本书会因为相关的不足而被喷得体无完肤,但仅此希望,我的点滴总结,我的肺腑之言,能够帮助一些曾经与我一样,在FPGA成长道路上迷茫、挣扎、徘徊的朋友,能让他们少走些学习FPGA的弯路,能让他们认清FPGA的真谛,能让他们掌握设计的精髓,能让他们从此有目标地奋斗前行。
我出生于浙江诸暨的一个小山区,远离都市的繁华,从小成长在大山的怀抱。在长辈们眼里,考上大学,是山区孩子**的出路。从小按部就班地读书,千篇一律地重复,很难有自己的追求,直到高考的到来。高考,是我平凡命运的转折点,也是我跨出的人生的**步。与大部分人一样,我并没有因为太多的了解,或者由于兴趣而选择专业,而是顺应时代的潮流。2008年9月,我**次朦胧地跨入了电子信息工程这个专业(当年相当热门的一个专业)。
坐落于天堂杭州的杭州电子科技大学(简称杭电),是一所以电子专业著称的高校,也是一所改变我人生轨迹的大学。太多人因为电子梦,聚集到了这里;太多人满载着知识与梦想,挥手告别了这里。大学的四年,母校是我认清自己的净土,是我挣扎脱壳的摇篮,更是我梦想起航的地方。
作为一所以电子设计著称的高校,大部分学生都是赤裸裸地来追求技术的海洋。电子类学生对技术的狂热,尤其是大一学生的好奇,在刚入学期间表现得淋漓尽致。电子信息工程学院(简称电院)有一个无线电爱好者协会,是30多年前几位老前辈,由于彼此对无线电设计的兴趣而建立的团队,继而发展成为一个研究并培养对电子开发有热情的学生的协会。为了尊重创始人,该协会一直没改名字,但实质上一直都是一个以电子开发著称的社团。该协会是学校公认的一个以热情与激情、兴趣与责任结晶的社团,坐落于电院2#中楼,在每一届会长的带领下,以阶梯式教育的方式,在课外培养了一代又一代技术狂人,同时每年均会选拔一部分愿意留任,担负培养下一代重任的学生。几十年来,协会培养了很多电子特长的学生,包括很多留校的老师,尽管不停地更新换代,旧去新来,但却一直传承发扬着协会精神。
每年一度的电院“震‘焊’人心焊接大赛”,是进入协会的敲门砖。为了能够进入协会,当年的我从一个不认识烙铁、电阻、电容的人,夜以继日地训练,恶补电子元器件知识,掌握焊接工具的使用,从当初的拿烙铁手发抖,到*后以时间与质量,在几分钟内(具体不记得了,应该在5分钟内)焊接完一套5V直流稳压电压,而荣获了一等奖(现在回头看看,那时的焊接技术简直是“渣渣”)。也许正是因为如此,我在大一**学期就进入了协会,认识了几位对我的大学四年有深远影响的学长——王凯与曾庆卿学长,他们在后续的日子里多次指点并教导过我,感谢他们的帮助才有了我的明天。
在随后的一段日子里,我由经常串门,升级到长期蜗居协会,我开始寻找、开始追求、开始如饥似渴地学习(现在认为是盲目追求),在仅仅半年时间内,我熟练掌握了焊接技巧(现在看来还是很“渣”),手工焊接了多路直流稳压电源,并且自学了C语言,开始意识到拥有一台电脑是多么的重要。一学期过得很快,但却过得很充实,学海无涯,我突然发现大学就是该为自己的追求而疯狂。
我真正开始学FPGA,是在大一的第二学期。那时学校搞课程改革,由潘松老师负责教学,将大三的数学、EDA课程提前到大一,好让学生们能更早地找到自己的目标,选择或决定自己未来的方向。潘松老师是《EDA技术实用教程》、《EDA技术实用教程——VHDL版》、《EDA技术与Verilog HDL》等书的作者,同时是杭州康芯电子有限公司的创始人,开发了多套FPGA实验箱、开发套件,在杭电,甚至全国多所高校都有使用,开辟了国内高校FPGA教学的先锋。
记得当时的课程改革并没有针对所有学生,而是选取了180多个“小白兔”(据我所知我是*后**幸存的一只小白兔)进行试验,而我有幸就是其中一个。一学期内,我们从*基本的数字电路开始学习,从各种74系列、与非门芯片开始学习,在数电实验箱上用组合电路实现加法器、跑马灯、交通灯等实验。接着转场开始学习FPGA技术(当时认为无所不能的现场可编程门阵列),从原理图Block方式的数字电路设计,到从零开始的VHDL语言的学习,*后采用纯HDL代码的方式,完成了学期末的课程设计——可编程音乐播放器及精准时分秒计数器。尽管在现在看来,这无非是切换2个ROM,按照一定的频率驱动蜂鸣器,以及简单的计数与数码管的驱动而已,但在当时却被认为小有成就,学有所成。
大一暑假,我没有回家,而是抱着康芯的实验箱,将每一个模块都玩了一遍。我将图书馆中与FPGA有关的书都翻了一遍,深入学习了VHDL语言,掌握了基本的FPGA设计思路,同时还未雨绸缪地学习了使用Altium Designer 2009(当时的DXP**版本软件),绘制了相关的PCB版图。康芯实验箱上还集成有8051单片机模块,总不能老是冷落了“她”,由于自己的反常规学习,我逼迫自己在5天内看完了郭天祥的《10天学会51单片机的教程》,狠狠地把51单片机的知识恶补了一把。记得该教程中有郭天祥亲自编写的《郭天祥——我的大学六年》,极大地鼓舞了我。该文档我至少看过10遍,“晨昏三叩首,早晚一炷香”,我懂得了他的所谓的很多人因为游戏人生,荒废本科之后的悔恨;懂得了把握青春,成就自己未来的珍贵;明确了自己该做什么,也许为自己的未来奋斗,才是真正的大学。
此外,我还深切体会到机遇的重要性。机会总是会给有准备的人,对于整天抱怨没有人带,而不去寻找机遇的人,我只能说你还没有准备好。事实上当时在180个小白兔名单外的人,找老师美言几句也能入围,重点在于你愿不愿意尝试——胆大心细脸皮厚,没有什么不可以。那时由于开始在QQ技术交流群活跃,我还认识了网友王会计(圈子里的很多人都认识他),那时作为前辈的他,对懵懂的我的告诫是,有幸我太早拥有了学习的机会,但这只是一个开始,课程只能给你指路,未来还得靠自己(我于2012年8月在北京**次拜会了王会计前辈,真人不露相)。
同年8月下旬,由于自己对技术的热情,外加在协会出色的表现,我成为无线电爱好者协会中,选拔去电院CAD研究所409实验室学习的一员(当时仅有3个人,其他两位分别是邓团飞、冀玮楠,这两个人是我未来的队友,一起浴血奋战的兄弟)。感谢409负责人,前协会会长,无线电爱好者协会名誉主席杨峰学长给了我这个弥足珍贵的机会,伯乐识马,没有这个机遇,也不会有今天的我。杨峰学长一直带领并指导协会,在大学7年的他,培养了无数饱含真才实学的电子工程师,在师生界具有极大的影响力,是大家公认的“老大”。在CAD研究所的2年多,是我本科电子设计*充实、*富有激情、*值得回忆的时光,是我定向成长全方位塑造自己的摇篮,也是我后来选择FPGA专业开发的基石。
由于对FPGA的基础与激情,我分组并进入了实验室的FPGA小组。作为小白兔的FPGA学习基础,对于实验室的需求而言还远远不够。在刀哥(FPGA小组组长)的指点下,我开始加强锻炼,从HDL的编写到FPGA设计思维,从时序电路到功能开发,从头开始优化自己,作为一个小白兔产物,我还需要进化。也正是这一阶段,我从零开始研究VGA显示驱动设计,并对图像显示开发产生了极大的兴趣,这也正是后来一年我一直执迷于LCD显示开发的缘由。
年少无知,从串口程序设计,到SPI时序的研究,我竟然想通过SD卡的SPI驱动来实现VGA图像源的获取。正是因为对技术的热情,我认识了网友黄娜(当时在EDN工作,后来去CSDN了),并介绍我认识了特权同学。时值2009年8月,5年过去了,回头看看,特权同学在那个时候还没有出名,FPGA视频教程还没开始录制,仅有的只是开始在EDN网站写博客。我有幸在平凡时期认识了未来无所不能、在业界有一定影响力的特权同学,指点并让我研究他当年设计的SD卡的SPI驱动时序。但是该驱动程序中的Verilog HDL语言和上千行的精华代码,让当时的我望尘莫及,几乎读不懂,这让自认为小有成就的我开始自叹不足。虽然结果我还是没能驱动SD卡,但对SPI的时序还是有了深入了解,更值得庆幸的是,我认识了未来几年对FPGA界有巨大贡献,受无数人膜拜与尊重,出版了《深入浅出玩转FPGA》、《爱上FPGA开发——特权和你一起学NIOS II》,永远忠于年轻时梦想的特权同学。特权同学的学习精神,以及出版的书籍,对我未来几年产生了深远的影响,源于DT,重在设计,在前辈的指领下,我正努力地前行。
大二开学了,我由于对技术的热情,大部分时间都是在实验室度过的。在那个年代,我们用的还是Quartus II 5.1,VHDL在高校依然很盛行,FPGA被认为是高功耗、高成本、开发周期长的方案,一块简单的EP2C8Q208C8N的开发板价格不菲,同时FPGA的学习资料,包括书或网络资源,远没有现在那么多。在前行的道路上,每一步都是那么的艰难。正当我徘徊在VHDL与Verilog HDL之间,以及在研究SOPC时连一个LED灯驱动都搞不定的低迷时刻,我认识了正在读大四的张亚峰,也就是网友小时不识月,当初的COM张。
当初的张亚峰,专业研究Altera FPGA,并将学习心得整理成博文发布于cnblog,博客日产量甚至可能超过他的饭量。在他*疯狂的时刻,我有幸认识了他,他对我指点迷津,悉心教导,甚至远程协助。在我徘徊不定时,他以多种理由“说服”我学习Verilog
评论
还没有评论。