广告

小梅哥FPGA博文系列时隔半年,是时候该回归了

2017-1-9 13:01 105 0

各位EDNChina的网友,一晃,小梅哥已经大半年没来EDNChina发表博客了。回顾上一次发表博客,还是在15年6月20号。如今,已经16年了。这段日子,并不是我懈怠了,不愿意写东西了,而是太忙,每天忙着设计调试开发板,录制视频教程,进行技术支持,实在是无法分身。年底了,各个学生也都放假回家了,公司的项目也做的差不多了,终于有时间再来EDNChina侃侃大山了。


首先介绍下这半年来我都做了些什么吧。记得曾经,我说过我想设计一款FPGA开发板,并给出了初步设想,如今,进过半年的努力,开发板已经成功设计并量产,从9月8号到今日,首批200套几近售罄。另外,为了让更多的喜爱FPGA,却学习的很艰难的朋友能够快速掌握好正确的FPGA设计方法,小梅哥经过精心准备,结合之前做培训的经历经验,录制了一系列的视频教程,从基础到深入,真正意义上的手把手教学,展示开发中的每一个细节。每一集视频教程都是现场讲解理论,分析架构,现场编写代码,编写testbench,仿真测试,板级验证。力争做到只要用户跟着视频走,就一定能够掌握。同时,为了让观看者都能有一个最佳的体验,视频采用1280*720分辨率录制,方便朋友们一边使用手机观看,一边对着电脑操作。视频全部使用专业软件与硬件录制和编辑,并进行了音频处理,保证音质清晰洪亮无杂音,给每一个朋友最好的观看体验。目前,视频教程前20讲,也就是基础部分已经录制并编辑完毕。后期提高课程和工程课程正在积极准备素材中,相信不久就会与大家见面。


忘了介绍,我们的团队,现在叫做“芯航线”。


回顾这半年,每天既做研发,又做调试,还要当采购,做美工,搞宣传,进行技术支持,售后,真真切切的感受到了创业不易。未来,小梅哥还将投入更多的精力在教程上,让更多希望学习FPGA的朋友能够踏实入门。


为感谢EDNChina一直以来的关怀,这里,小梅哥特附上目前已经制作好的20集视频教程下载链接以及课堂中的源码工程文件。如果认为小梅哥讲的不错的,请记得在博客下给个评价,小梅哥需要你们的支持。非常感谢。


全部开源视频教程下载地址:


http://pan.baidu.com/s/1kUs0vkF


视频教程中配套源码下载地址:

http://pan.baidu.com/s/1qX5hz9y



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型红外遥控编码的解码实现


小梅哥


芯航线电子工作室


2016年1月26日星期二


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
小梅哥 2018-05-27 22:03
【博客大赛】【小梅哥FPGA】闹心的gcc-linaro-arm-linux-gnueabihf编译器——Floating ...
  今天在继续编写示波器(just for fun)工程,该工程的波形显示和处理界面是在Linux系统上编写程序实现的。应用程序的编写是使用的17.1版本的Quartus软件配套的DS-5软...
小梅哥 2018-05-09 22:37
【博客大赛】【小梅哥FPGA】Cyclone V SoC 中为HPS添加SPI控制器并使用 ... ... ... ...
    关于如何在Cyclone V SoC FPGA系统中为HPS添加一个SPI外设,这个实验我已经进行了有相当长的一段时间了,但直到今日方才有所突破,顺利的完成了SPI控制器的...
小梅哥 2018-05-04 11:49
【博客大赛】【小梅哥FPGA】Altera SOC更改Qsys后重新生成hps_0.h文件 ...
在Altera SoC的开发中,Qsys系统和Linux应用程序之间通过一个名为hps_0.h的文件交互硬件信息,例如总线上添加了哪些外设,每个外设相对于HPS外部总线的偏移地址,每个外设所占的地址空...
小梅哥 2018-05-04 11:44
【博客大赛】【小梅哥FPGA】Quartus II中使用脚本转换sof到rbf文件 ... ...
        rbf文件作为Altera的FPGA一种常见的配置数据格式,常用于使用其他主控主动配置FPGA时使用,例如PS模式。在Cyclone V SoC...
小梅哥 2018-05-04 11:36
【博客大赛】【小梅哥FPGA】使用DS-5编写和调试SoC的Linux应用程序 ...
对于Intel Cyclone V SoC FPGA用户,如果仅仅开发应用程序,也可以在 Windows 环境下完成。Intel针对其自家的SoC FPGA芯片提供了定制的DS-5软件,该软件为A...
小梅哥 2018-05-03 22:11
【博客大赛】使用MATLAB一键制作mif文件
        这里讲解实现一个16384(2^14)点的14位正弦波数据mif格式文件的生成,使用此文件,我们便可以在FPGA上基于直接数字合成(DDS)原理...
我要评论
0
0
广告