做蛋糕网站的优点,如何让新网站快速收录,互联网推广员是做什么的,网站建设者html在最后一个例程中笔者精挑细选了一个较为综合性的项目实战#xff0c;其中覆盖了很多知识点#xff0c;也是从一个转产产品中所提炼出来的#xff0c;所以非常贴近实战项目。 整个工程实现了用户通过对上位机PC端人机界面的操作#xff0c;即可达到控制豌豆开发并行DAC输出… 在最后一个例程中笔者精挑细选了一个较为综合性的项目实战其中覆盖了很多知识点也是从一个转产产品中所提炼出来的所以非常贴近实战项目。 整个工程实现了用户通过对上位机PC端人机界面的操作即可达到控制豌豆开发并行DAC输出给定频率和初始相位的正弦波、三角波、方波、梯形波的效果上位机通信接口同时支持USB2.0、串口RS232和千兆网口LAN但是同一时刻只能选择一种接口与开发板通信为此笔者专门用Labview搭建了上位机人机界面环境并压缩成安装包大家直接解压安装到PC端即可上位机的具体操作将在后面详细介绍如图1所示是豌豆开发板Artix7上并行DAC的电路。 数字变频是FPGA信号处理算法和实现的一项关键性技术当笔者在工作中第一次用到相关技术时也查阅了很多网络博客、收费教程和官方手册等但遗憾的是大部分文章内容都很雷同并且很少有深入地分析或者讲解所以在最后一个例程当中笔者会尽力把这些令人费解的地方说明清楚整个例程既包含了数字信号处理也包含了接口通信设计同时结合上位机控制朋友们完全可以将其看成一个程控波形发生器。 图1 豌豆开发板Artix7上并行DAC的电路 如图2所示是例程整体设计示意图大家可以将其看成两个部分前一部分是外设接口设计后一部分是数字信号处理这也是FPGA工程中一个非常经典的模型即外接接口和数字信号融合在一个项目里面。 伴随ADC/DAC转换速度越来越快接口从传统意义的SPI接口到多位宽并口再到CMOS和LVDS接 口直到现在已经发展到了JESD204B接口这种接口则是一种新型的基于高速SERDES的ADC/DAC传输数据接口板子与板子间的数据传输也已经引入了SFP万兆光口等同时板子与PC端的数据传输从RS232接口到USB2.0接口再到千兆网口和USB3.0接口最后发展到PCIE接口所以高速接口设计和数字信号处理往往会出现在一个项目。 图2 USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波整体设计示意图 ADC和DAC作为数字信号处理的中间桥梁在现实的项目中更有着极为广泛的应用笔者曾读过一本国外的经典书籍“understanding_digital_signal_procesing”里面提到了数字信号处理的两大利器即数字滤波和傅里叶变化当然这只是针对ADC端模拟转数字芯片的采集而言而对于DAC端数字转模拟芯片的转换来说数字变频可以说是一个常用的重要关键性技术。 如图3所示是DSP处理器在数字信号处理中的应用示意图即通过用ADC去采集目标信号再根据项目需求进行数字信号处理这里涉及到采样与量化理论、离散傅里叶变化等知识在这里就不再展开了当然实际项目当中对于ADC采集和DAC转换因为硬件上肯定存在误差还需要引入校准等操作最后根据实际需求可能还需要通过DAC把数字信号处理的结果通过一个模拟量传输出去大家可以看到整个DSP处理器一直工作“数字区域”对数字信号进行处理再通过ADC或者DAC实现对“模拟区域”的控制这也是数字信号处理中一个非常经典的模型。
图3 DSP处理器在数字信号处理中的应用示意图 步入正文前笔者在这里想多费点笔墨为大家扩展一些项目背景知识因为都是从学生时代走过来所以都经历了从理论到实践从模糊到清晰的过程可以说想建立一个完整的知识体系并不是一件蹴而就的事需要在理论中不断理解吸收在项目中不断学习深化更在实践中不断归纳总结。 ADC和DAC在嵌入式学习当中可以说耳熟能详的名词了首先早在学生时代学习数字信号处理或者信号理论等相关课程这个名词就常常在耳边响起其次再到单片机学习刚刚接触MCU各种教程就告诉我们其自带低速ADC和DAC即可实现数模或者模数转换的目的再次可能用过DSP的同学都知道其强于浮点数运算那么浮点运算又在做什么呢于是乎ADC和DAC又久久回响在耳畔最后再到读研或者工作用到FPGA的时候可能真的是才一入门铺天盖地的信息又不断地为大家传达类似的观点FPGA具有并行、快速的特点是高速接口设计和数字信号处理的主战场。可以说非常有趣的是学校教学或者网络培训等都好像在做知识科普在引出一些前沿理论和先进概念但是在抛出内容、亮明观点以后刚到核心部分的学习就戛然而止了所以网络上可能只能看到同一个概念的不断地一次次被重复或者来来回回炒冷饭。 有关ADC的采样FIR、IIR、CIC等滤波器设计和FFT时域到频域变化因为篇幅有限不过于发散所以在这里并不详细说明将会放在后续数字信号处理专栏结合具体实例讲解下面我们主要围绕例程中的核心内容DAC数字变频展开如图4所示是数字变频FPGA内部实现的示意图。 图4 数字变频FPGA内部实现的示意图 基于FPGA的数字变频实现网络上也有很多教程和博客等介绍看起来好像学习资源很多但是大部分都在不断地旧调重弹或者在重复地复制粘贴实际上会发现很多作者本身也不是非常理解这块的知识所以传来传去还可能会带来一些错误的思想去误导大家尤其对于初学者而言。 开门见山地对于数字变频包含了三个核心的知识点即1. 累加器步长2. 地址间映射3. 频率分辨率搞明白这些对于后面理解DDS IP核的配置和任意波的实现起到重要作用所以请大家花些时间去认真思考如图5、图6、图7所示是数字变频的示意图可以说这三幅示意图非常形象地把数字变频技术勾勒出来。 数字变频用最通俗易懂的话说即给定任意一种波形就可以人为地在不改变形状的前提下自由变化频率这项技术广泛地应用在很多领域笔者结合这三幅图为大家详细说明数字变频中的三个知识点。 如图5所示是数字变频的内部结构示意图大家可以清楚地看到当外部给定了“频率控制字”、“相位控制字”和外部时钟fclk后FPGA即开始以fclk为时钟参考每个时钟周期进行“频率控制字”的累加其结果会加上“相位控制字”一起送至任意波的查找表FPGA再把查找表中对应到数值送到外部DAC数模转换芯片上最后通过硬件上运放调理输出期望频率的fout这幅示意图很好地描绘了数字变频的内部结构而其中的“频率控制字”即为累加器步长。 图5 数字变频的内部结构示意图 如图6所示是数字变频的累加器和地址映射示意图通过累加器步长的介绍大家了解到数字变频的内部存在一个以fclk为时钟周期的计数器一直在做累加操作但是累加器应该以什么方式去映射到任意波形的查找表呢于是很自然地引入了第二个知识点即地址间映射显然以累加器总位宽作为波形查找表位宽是不现实的那么这时候就需要一种映射关系即查找表地址放在累加器位宽的最高位如下图所示累加器位宽是12位而波形查找表的位宽仅仅是4位。
图6 数字变频的累加器和地址映射示意图 如图7所示是数字变频的累加器步长和频率关系示意图在简单地介绍完累加器步长和地址间映射后就涉及到第三个知识点即频率分辨率了那么在数字变频的过程中频率分辨率又是怎么计算出来的呢对于分辨率相信大家也耳熟能详比如现实生活中的显示屏有各种各样的分辨率如1920*1080、1024*768、640*480等显然分辨率越高精确度越大对于数字变频中其实也存在相似的说法比如设定的精度理论上可以达到小数点前两位、前一位还是后一位、后两位、后三位等而这个最小分辨率实际上参考时钟fclk与频率累加器位宽的比值。 图7 数字变频的累加器步长和频率关系示意图