最近在知乎上看到一个关于深入学习FPGA的优秀回答,现分享如下,已取得刘皇叔授权。
下面几个小项目,只要有一个做出demo机,就会有人抢着要你。
问:
FPGA只会写SPI、串口和IIC,感觉毕业之后会找不到工作,请问下一步应该学什么?
答:
做实际的案例,给你建议三个方向:
1、做一个简易示波器
(1)双通道,8位分辨率,采样率50MSA/s(可调),采样深度250M。
(2)支持自动采样,触发采样,单次采样。
(3)数据处理和存储
A. 增加带宽抑制,一般20MHz限制;
B. 支持两通道的算数运算:加减乘除;
C. 支持信号叠加平均;
D. 屏幕截取存储到SD卡或者U盘,可以选择存屏幕图片、屏幕数据、内存数据。
(4)显示屏幕1080分辨率,用个显示器代替就行。
实现上面功能已经很了不起了,如果还不过瘾,增加如下功能:
A. 支持通道FFT;
B. 支持USB读取内存数据;
C. 支持以太网采集;
D. 16通道数字信号采集,分辨率1ns。
2、做一个多功能测控卡
(1)8通道模拟信号输入:16位AD分辨率,最大采样率1MHz,可调。带外触发采样。支持简单的数据预处理算法(平滑、抽取等)。
(2)2路模拟信号输出:8位DA输出,最大打点速率1M。可输出正弦波、方波、三角波、斜坡等常见函数波形。用户可以设置参数。
(3)8路数字输入,8路数字输出。
(4)数据可以通过以太网远程读取,远程控制。
实现上面功能已经很不错了,如果还嫌不过瘾,可以增加下面内容:
增加输入输出缓存
1)对于模拟输出AO0和AO1:分配128MB内存,用作自定义数据缓存区,用户可以预先编制波形,打点输出到通道上。例如以1MHz采样频率,输出到AO1通道,则最长可以编制最长128秒的数据。如果选择AO0和AO1,则可以预编制最长64秒的数据。
2)对于模拟输入:可以分配512M内存作为输入缓存,这样如果1个模拟输入通道1MHz采样,可以存储16位的数据128秒、2个通道同时采样可以存储数据64秒……
3)如果上面的输入输出采样频率可以修改,那就更棒了!采样频率降低一半,采样时长增加1倍。
3、做视频分割、拼接
(1)1个1080视频输入,3×3分割显示;
(2)多个摄像头读取数据,合并到一个屏幕显示;
(3)同屏异显。
上面的内容做完了,你已经很棒了,如果还想来点高端的,可以增加以下内容:
1)异常捕捉,如有人闯入区域、着火了等等。
2)增加智能调整帧率或降低清晰度算法,应对带宽有限。
3)活体特征识别,比如认出是一条狗、一个人、人是谁等等。大胆的想吧。
上面这3个小项目,只要有一个做出demo机,就会有人抢着要你。