本帖最后由 meng_yi 于 2016-4-7 10:22 编辑
大家好,这里小梅哥将我们精心录制和编辑的FPGA学习系列教程——《小梅哥FPGA设计思想与验证方法视频教程》分享给大家。教程充分考虑0基础朋友的实际情况,手把手带领学习者分析思路、编写代码、仿真验证、板级调试。教语法,学仿真,一步一步,直到最后设计若干较为综合的逻辑系统。
教程以我们自主开发的芯航线FPGA学习板为实验平台,通过若干基础和综合的系统设计讲解,一步一步掌握FPGA设计与验证的思想和方法。
以下为整理总结的每节课的知识点:
01、科学的开发流程
本集是视频教程第一讲,主要通过一个实例简单演示FPGA开发的基本流程。本人也是自学过两年FPGA,并参加了国内某专业的FPGA培训机构100天就业培训,并最终留任授课3个月。因此十分清楚了解各位学习者在刚开始学习FPGA时的各种苦闷。因此希望通过这样一个视频教程,把较为科学的FPGA学习方法和思想传递给大家。
如果大家所认为的FPGA开发流程就是编码、下载、调试,那么你就该好好的看下这个视频教程了,因为我也正是被这种错误的学习方式耽误了好久好久,直到参加了培训学习才知道,仿真验证才是FPGA开发的重中之重,现在的我进行FPGA开发,板级调试时间占不到整个开发过程的5%,并不是我不重视板级调试,而是因为通过完整的理论验证之后,下载到板级上基本不会出现任何问题。科学的学习方法尤为重要,希望大家一定要注意这一点。我也曾在工作中遇到很多人,就算是我手把手的教他仿真、写testbench,他也不愿意弄的情况,因此我只想在这里说,不仿真,永远无法掌握FPGA时序设计的要点,做设计永远是事倍功半。
02、3-8译码器设计验证
本集是视频教程第二讲,主要通过3-8译码器的设计实现与验证,讲解Verilog基础语法,并复习FPGA开发的基本流程。希望通过这样一个视频教程,带领大家进一步熟悉FPGA的开发流程。
课程以实现3-8译码器的设计为起点,手把手演示工程创建,设计输入以及仿真验证,让每一个0基础的朋友都能快速跟上节奏。另外,有一定基础的朋友,其实也可以观看,因为在设计中,我已经将很多的设计小技巧穿插在视频中了。请明白:实现3-8译码器不是目的,目的是学习开发流程和基本技巧。
03、二进制计数器设计验证
本集是视频教程第三讲,主要通过FPGA数字逻辑设计中最常用的一个模块——二进制计数器的设计实现与验证,讲解Verilog基础语法,并复习FPGA开发的基本流程。希望通过这样一个视频教程,带领大家进一步熟悉FPGA的开发流程,并体会计数器在FPGA系统中的重要地位。
课程以实现二进制计数器的设计为起点,手把手演示工程创建,设计输入以及仿真验证,让每一个0基础的朋友都能快速跟上节奏。另外,有一定基础的朋友,其实也可以观看,因为在设计中,我已经将很多的设计小技巧穿插在视频中了。请明白:实现二进制计数器不是目的,目的是学习开发流程和基本技巧,并体会FPGA数字系统设计中常用的时间控制方式。
04、高性能计数器IP核使用
本集是视频教程第四讲,主要通过演示FPGA数字逻辑设计中除Verilog代码方式设计外另外一种最常用的设计方式——使用IP核进行系统设计。本教程讲解了如何在Quartus II软件中调用一个基本的免费IP核——计数器IP核,并编写Testbench对IP核进行仿真验证,以教会大家如何正确科学的使用一个成熟的IP核。希望大家通过这样一个视频教程,感受到使用IP核进行系统设计的便捷性。
课程以学习使用计数器IP核为起点,手把手演示工程创建,IP核调用、Testbench编写以及仿真验证,让每一个0基础的朋友都能快速跟上节奏。另外,有一定基础的朋友,其实也可以观看,因为在设计中,我已经将很多的设计小技巧穿插在视频中了。请明白:学会使用计数器IP核不是不是目的,目的是感受使用IP核进行设计的便捷性。
05、BCD码计数器设计验证
本集是视频教程第五讲,主要讲解数字系统,尤其是时钟系统中非常常见的一个模块——BCD码计数器的设计实现与验证,讲解Verilog基础语法,了解BCD码技术器与普通二进制计数器的区别。BCD码计数器经常用在需要十进制计数,十进制格式输出的场合。希望通过这样一个视频教程,带领大家了解除二进制计数器以外的另一种计数实现方式。该BCD码计数器将在综合实验如数字钟、秒表、简易数字频率计中发挥强大作用,简化系统设计。
课程以实现BCD码计数器的设计为起点,手把手演示工程创建,设计输入以及仿真验证,让每一个0基础的朋友都能快速跟上节奏。另外,有一定基础的朋友,其实也可以观看,因为在设计中,我已经将很多的设计小技巧穿插在视频中了。
06、例解阻塞赋值与非阻塞赋值
本集是视频教程第六讲,主要通过简单的例子对比了Verilog语法中阻塞赋值和非阻塞赋值的区别,通过证明非阻塞赋值多种赋值顺序生产电路的唯一性,与非阻塞赋值多种赋值书序生成电路的不确定性,来展示使用非阻塞赋对设计可预测性的重要意义。
07、例说状态机
本集是视频教程第七讲,主要通过简单的例子介绍了FPGA设计中最常见的设计思想——状态机,通过状态机,可以实现很复杂的时序控制内容,学好状态机,是掌握FPGA技术的重中之重。
08、基于状态机的独立按键消抖
本集是视频教程第八讲,主要通过独立按键消抖这样一个实验,来进一步举例讲解状态机的设计思想,独立按键消抖有多种方式可以实现,这里采用状态机的方式,既能方便大家理解按键消抖的整个过程,又能进一步领会状态机的设计思想。
09、独立按键控制LED与亚稳态问题引入
本集是视频教程第九讲,主要通过独立按键控制LED灯状态变化这样一个实验,来验证独立按键消抖是否成功,另外,由于独立按键作为一个外部异步输入信号,因此借此机会刚好给大家详细介绍了亚稳态的原理和应对策略。希望大家在观看学习时,重点体会亚稳态的物理原理并掌握这种简单外部输入信号的亚稳态应对方法。
10、数码管动态扫描设计与实现
本集是视频教程第十讲,主要通过讲解数码管动态扫描原理,并提取出实现的电路结构,从电路结构入手编写代码,仿真对设计进行验证,最终板级调试时,使用In system sources and probes editor调试工具设置需要显示的内容,则数码管显示对应的数值。本节课与前面课程的风格稍有不同,本节课代码不再是核心,核心是电路结构,电路结构确定后编写代码只是照图施工的过程。这也是越来越接近FPGA设计的底层思维。希望大家仔细体会。
11、UART串口发送模块设计与验证
本集是视频教程第十一讲,主要讲解UART串口发送模块的设计与实现,教程同数码管驱动的讲解方法一致,也是从结构到电路,最后写代码照图施工,仿真对设计进行验证,最终板级调试时,使用In system sources and probes editor调试工具设置需要发送的内容,按下按键,则串口发送模块将需要发送的数据对应发送出去,在PC机上使用串口调试工具即可接收显示,验证设计的正确性。该模块将作为后期很多设计的基础模块进行使用,希望大家都能够自己编写并调试通过,为后面的学习做好准备。
12、UART串口接收模块设计与验证
本集是视频教程第十二讲,主要讲解UART串口接收模块的设计与实现,教程同数码管驱动的讲解方法一致,也是从结构到电路,最后写代码照图施工,仿真对设计进行验证,最终板级调试时,在PC机上使用串口调试工具发送测试数据,使用In system sources and probes editor调试工具查看串口接收模块接收到的数据内容。通过比对发送和接收到的数据是否一致,验证设计的正确性。该模块将作为后期很多设计的基础模块进行使用,希望大家都能够自己编写并调试通过,为后面的学习做好准备。
13、嵌入式块RAM应用之双口RAM
本集是视频教程第十三讲,主要讲解FPGA芯片中提供的专用嵌入式块RAM的应用实例之一,也就是RAM IP核的使用。课程首先简单介绍了Altera Cyclone 系列FPGA器件的内部结构,然后介绍了RAM IP核的调用方法和配置窗口中的一些参数含义,然后通过仿真的方式对RAM IP核的接口时序进行了分析,为下一节课,RAM IP的具体应用实例打下了基础。希望大家仔细体会这种使用仿真来探索验证IP核接口时序的方法。
14、搭建串口收发与存取双口RAM简易应用系统
本集是视频教程第十四讲,主要通过将前面三讲(串口发送、串口接收、嵌入式块RAM)综合起来,设计了一个简易的小系统,通过电脑以串口发送数据给FPGA,FPGA接收后存储在RAM中,再在按键的控制下,读取RAM中的数据,通过串口发送出去。来体现模块化设计的巨大优势。同时,视频花了相当的时间来演示使用Visio绘制系统架构图,一个好的架构图,不仅能够让设计者思维更清晰,也更加有利于设计在工程师间的交互,方便后期的升级和维护。希望大家仔细体会我这种模块化拼接的设计思想。
15、ROM的搭建与Signaltap II 工具使用
本集是视频教程第十五讲,主要介绍了嵌入式块RAM的另一个具体应用——ROM。在很多电子系统中,总有一部分数据是从始至终不需要改变,只需要在使用的时候读取即可。在FPGA中,我们可以使用嵌入式块RAM搭建具有ROM属性的存储器,用来存放某些需要永久保存的数据。本节课,通过使用ROM存储器存储三角波数据,外建简易地址发生器,搭建了一个简易的信号发生器系统。并使用Quartus II软件提供的强大的调试工具Signaltap II来对ROM的输出信号进行抓取,以模拟波形的显示出来,从而验证设计的正确性,同时,本课程还介绍了使用In-System memory content editor在线更改ROM中的数据,将三角波的波形数据更改为正弦波,然后再次在Signaltap II工具上观察抓取到的信号,以验证数据确实被更改。本节课程,内容并不复杂,但是却使用了多种调试工具,希望大家学有所获。
16、FIFO介绍与时序验证
本集是视频教程第十六讲,主要介绍了嵌入式块RAM的另一个具体应用——FIFO。FIFO的完整英文拼写为First In First Out,即先进先出。FPGA或者ASIC中使用到的FIFO一般指的是对数据的存储具有先进先出特性的一个存储器,常被用于数据的缓存或者高速异步数据的交互。本节课程,理论讲解较为细致,望大家仔细理解体会,祝大家学有所获。
17、使用PLL进行设计+Verilog参数化设计介绍
本集是视频教程第十七讲,主要介绍了Altera FPGA器件中提供的专用时钟管理单元PLL的一些基本特性,并通过一个简单的实例:PLL输出的多路频率不同的时钟驱动同一个LED闪烁模块,通过比较LED闪烁的频率来验证PLL对时钟信号的正确管理。另外,视频还介绍了Verilog语法中非常有用的一种技巧——参数化设计。参数化设计能给我们的功能模块带来最大的灵活性,使我们在不修改原本代码内容的前提下,修改其中某些关键参数,从而适应于不同的应用。本节课程,即讲解了PLL 的有关内容,又讲解了参数化设计的语法,希望大家学习过程中仔细体会参数化设计的好处。
18、基于线性序列机设计思想的串行DAC(TLC5620)驱动
本集是视频教程第十八讲,主要介绍了FPGA设计中除状态机的设计思想外另外一种常见的设计方式——线性序列机。线性序列机和状态机比较相似,确更加容易规划实现,对于信号变化与时间一一对应的时序设计,采用线性序列机往往更加快捷高效。本课首先介绍了线性序列机的设计思想,然后针对芯航线FPGA套件中配套的多通道串行ADDA模块,介绍了其DAC电路和参考源电路,DAC芯片使用TLC5620芯片,该芯片的控制时序就是每个控制信号的变化时间与时间一一对应,因此非常适合使用线性序列机进行设计。接着,在Quartus II软件中设计并使用modelsim仿真验证依据线性序列机的设计思想设计的TLC5620控制器,最后,在芯航线FPGA学习套件上进行板级验证,以验证设计的正确性。验证时,使用In system sources and probes editor工具,输入希望输出的电压值对应的数字值,则芯航线FPGA开发板控制DAC模块输出正确的电压值。本节课程,引入了新的一种设计方式——线性序列机,希望学习者自己体会,感受这种方式在应对具有串行执行特征的时序电路设计中的优势。
19、基于线性序列机设计思想的串行ADC驱动
课程目标:学会使用线性序列机的思想设计常见的有串行执行特征的时序逻辑
实验平台:芯航线FPGA学习套件主板,芯航线串行ADDA模块
实验现象:将串行多通道ADDA模块接在芯航线FPGA开发板上,使用In system sources and probes editor设置DAC模块输出电压信号,然后使用ADC采样DAC的输出电压,将DAC输出值和ADC采样值进行比较,同时使用万用表测量DAC输出电压以验证ADC控制逻辑的正确性。
知识点:
1.复习线性序列机设计思想与实现
2.TLV1544型ADC芯片驱动设计
20、HT6221红外遥控解码
本集是视频教程第二十讲,具体课程内容如下所示:
课程目标:学会使用FPGA来对脉冲编码的数字序列进行解码
实验平台:芯航线FPGA学习套件主板,基于HT6221的红外遥控器
实验现象:按下红外遥控上的按键,然后在Quartus II软件中使用In system sources and probes editor中观察解码结果,根据解码结果与红外遥控实际发出的数值进行比较从而判断解码的正确性。
本节课知识点:
1.脉冲编码的数字解析
2.HT6221型红外遥控编码的解码实现
视频源文件在此,大家可以转存到自己的百度云盘,并下载后观看(1280*720分辨率,MP4格式,用手机观看效果非常爽哦,建议大家下载了再观看) 全部开源视频下载地址: http://pan.baidu.com/s/1kUs0vkF
如有任何疑问,欢迎加入芯航线FPGA学习支持群(472607506)进行讨论 |