差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
后一修订版 两侧同时换到之后的修订记录
波形信号发生器设计 [2018/10/23 09:55]
anran [实验原理]
波形信号发生器设计 [2018/11/04 20:11]
gongyu [实验目的]
行 4: 行 4:
  
   * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成波形信号发生器设计并观察调试结果   * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成波形信号发生器设计并观察调试结果
-  * 要求:通过底板上的旋转编码器控制串行DAC芯片DAC081S101基于DDS技术产生波形可选、频率可调的常见波形信号。 +  * 要求:通过底板上的旋转编码器控制串行[[DAC]]芯片DAC081S101基于[[DDS]]技术产生波形可选、频率可调的常见波形信号。 
-  * 解析:FPGA驱动旋转编码器得到操作信息,通过逻辑控制波形和频率寄存器,设计DDS模块根据波形和频率寄存器控制波形数据的输出,波形数据通过串行DAC驱动模块传送到底板的DAC芯片进行转换,得到波形信号输出。+  * 解析:[[FPGA]]驱动旋转编码器得到操作信息,通过逻辑控制波形和频率寄存器,设计[[DDS]]模块根据波形和频率寄存器控制波形数据的输出,波形数据通过串行DAC驱动模块传送到底板的[[DAC]]芯片进行转换,得到波形信号输出。
  
 ====实验目的==== ====实验目的====
  
-前面章节我们学习了旋转编码器的工作原理及驱动方法,本实验主要学习DDS技术的原理及实现,IP核rom模块的例化使用,串行DAC芯片DAC081S101的驱动设计。 +前面章节我们学习了旋转编码器的工作原理及驱动方法,本实验主要学习[[DDS]]技术的原理及实现,IP核rom模块的例化使用,串行[[DAC]]芯片DAC081S101的驱动设计。 
-  * 学习数模转换器DAC的相关知识 +  * 学习数模转换器[[DAC]]的相关知识 
-  * 串行(SPI接口)DAC芯片DAC081S101的驱动设计 +  * 串行([[SPI]]接口)[[DAC]]芯片DAC081S101的驱动设计 
-  * 学习DDS技术的原理及实现+  * 学习[[DDS]]技术的原理及实现
   * 完成波形信号发生器设计实现   * 完成波形信号发生器设计实现
  
行 133: 行 133:
 ===DDS设计实现=== ===DDS设计实现===
  
-{{:​8-波表数据示意图.png?​800|波表数据示意图}}+{{:​8-波表数据示意图.png?​600|波表数据示意图}}
  
 如上图所示,以8位DAC为例,将一个周期的正弦波分割成256份,得到256个相位波形量化数据,设计一个存储器,宽度为8,深度为256,将256个相位波形量化数据放入存储器中,我们就得到了一个正弦波波表。我们可以通过例化rom的IP核实现波表的设计,具体的操作如下: 如上图所示,以8位DAC为例,将一个周期的正弦波分割成256份,得到256个相位波形量化数据,设计一个存储器,宽度为8,深度为256,将256个相位波形量化数据放入存储器中,我们就得到了一个正弦波波表。我们可以通过例化rom的IP核实现波表的设计,具体的操作如下:
行 151: 行 151:
 第三步更改配置模式,因为例化了rom的IP核,需要初始化数据,所以需要更改配置模式。打开Assignments菜单下的Device选项,点击Device and Pin Opetions,找到Configuration → Configuration mode,下拉列表中选择最后一项,点击OK保存。 第三步更改配置模式,因为例化了rom的IP核,需要初始化数据,所以需要更改配置模式。打开Assignments菜单下的Device选项,点击Device and Pin Opetions,找到Configuration → Configuration mode,下拉列表中选择最后一项,点击OK保存。
  
-{{:​8-配置模式.png?​800|设置FPGA配置模式}}+{{:​8-配置模式.png?​600|设置FPGA配置模式}}
  
 打开rom核中的Verilog文件,端口声明如下: 打开rom核中的Verilog文件,端口声明如下:
行 163: 行 163:
 其中clock为存储器时钟,address为存储器地址,q对应address地址中的数据输出,到这里我们的正弦波表就创建好了。 其中clock为存储器时钟,address为存储器地址,q对应address地址中的数据输出,到这里我们的正弦波表就创建好了。
  
-{{:​8-并行DAC应用框图.png?​400|并行DAC应用框图}}+{{:​8-并行DAC应用框图.png?​500|并行DAC应用框图}}
  
 如果我们有上图电路的硬件,当FPGA按照时钟的节拍产生波形数据,就可以得到对应的模拟输出了,我们来看一个简单的DDS产生锯齿波例子: 如果我们有上图电路的硬件,当FPGA按照时钟的节拍产生波形数据,就可以得到对应的模拟输出了,我们来看一个简单的DDS产生锯齿波例子:
行 186: 行 186:
 上面程序中累加器phase_acc随时钟clk自加1,传输给并行DAC的数据同样自加,最后得到锯齿波输出,当clk为100MHz时,锯齿波频率为100MHz / 2^24 = 5.96Hz。 上面程序中累加器phase_acc随时钟clk自加1,传输给并行DAC的数据同样自加,最后得到锯齿波输出,当clk为100MHz时,锯齿波频率为100MHz / 2^24 = 5.96Hz。
  
-锯齿波输出:{{:​8-锯齿波.png?​500|锯齿波}}+锯齿波输出:{{:​8-锯齿波.gif?​500|锯齿波}}
  
 想要输出三角波,只需要把DAC数据输出赋值的语句改为: 想要输出三角波,只需要把DAC数据输出赋值的语句改为:
行 194: 行 194:
 </​code>​ </​code>​
  
-三角波输出:{{:​8-三角波.png?​500|三角波}}+三角波输出:{{:​8-三角波.gif?​500|三角波}}
  
 想要输出方波,只需要把DAC数据输出赋值的语句改为: 想要输出方波,只需要把DAC数据输出赋值的语句改为:
行 202: 行 202:
 </​code>​ </​code>​
  
-方波输出:{{:​8-方波.png?​500|方波}}+方波输出:{{:​8-方波.gif?​500|方波}}
  
 想要输出正弦波,只需要把DAC数据输出赋值的语句改为波表存储器的例化: 想要输出正弦波,只需要把DAC数据输出赋值的语句改为波表存储器的例化:
行 329: 行 329:
  
 ====实验现象==== ====实验现象====
 +
 +将设计加载到FPGA中,使用示波器观察底板DAC射频端子信号输出,按动旋转编码器观察不同的波形输出,转动旋转编码器观察频率的变化。
 +
 +{{:​8-波形输出.png?​600|默认输出}}
 +
 +{{:​8-正弦波输出.png?​500|正弦波输出}} {{:​8-锯齿波输出.png?​500|锯齿波输出}}
 +{{:​8-三角波输出.png?​500|三角波输出}} {{:​8-方波输出.png?​500|方波输出}}