3672|2

74

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

BB方案大结局之FPGA端软件实现篇——基于BB及FPGA的DAQ及DDS设计与实现 [复制链接]

本帖最后由 黑非拉 于 2014-6-22 19:39 编辑

BB方案大结局之FPGA端软件实现篇——基于BB及FPGA的高速数据采集及DDS信号发生器设计与实现

这一部分主要说明一下在FPGA端软件的设计中采用的小技巧并测试了GPMC对FPGA RAM的读取速率,展示一些实验的图片数据。


(1)开发平台及语言为:

QuartusII,Verilog与原理图输入相结合

(2)主要包括三个模块:

硬线连接DDS芯片与BB GPIO端口模块;

FPGA DDS模块;

数据采集与传输模块。

(3)FPGA管脚分配如下:
  1. #连接DDS芯片的管脚
  2. set_location_assignment PIN_121 -to DDSCHIP_FSEL
  3.         set_location_assignment PIN_122 -to DDSCHIP_FSYNC
  4.         set_location_assignment PIN_129 -to DDSCHIP_MCLK
  5.         set_location_assignment PIN_119 -to DDSCHIP_PSEL0
  6.         set_location_assignment PIN_120 -to DDSCHIP_PSEL1
  7.         set_location_assignment PIN_126 -to DDSCHIP_SCLK
  8.         set_location_assignment PIN_125 -to DDSCHIP_SDATA
  9.         #连接BB GPIO,用于控制DDS芯片的管脚
  10.         set_location_assignment PIN_96 -to IN_FSYNC
  11.         set_location_assignment PIN_100 -to IN_SCLK
  12.         set_location_assignment PIN_97 -to IN_SDATA
  13.         //FPGA时钟与复位管脚
  14.         set_location_assignment PIN_17 -to FPGA_CLK0
  15.         set_location_assignment PIN_90 -to FPGA_RST
  16.         //连接BB GPMC接口的管脚
  17.         set_location_assignment PIN_72 -to GPMC_CLK
  18.         set_location_assignment PIN_118 -to GPMC_A[1]
  19.         set_location_assignment PIN_113 -to GPMC_A[2]
  20.         set_location_assignment PIN_114 -to GPMC_A[3]
  21.         set_location_assignment PIN_104 -to GPMC_A[4]
  22.         set_location_assignment PIN_112 -to GPMC_A[5]
  23.         set_location_assignment PIN_101 -to GPMC_A[6]
  24.         set_location_assignment PIN_103 -to GPMC_A[7]
  25.         set_location_assignment PIN_87 -to GPMC_A[8]
  26.         set_location_assignment PIN_93 -to GPMC_A[9]
  27.         set_location_assignment PIN_81 -to GPMC_AD[0]
  28.         set_location_assignment PIN_80 -to GPMC_AD[1]
  29.         set_location_assignment PIN_57 -to GPMC_AD[2]
  30.         set_location_assignment PIN_58 -to GPMC_AD[3]
  31.         set_location_assignment PIN_79 -to GPMC_AD[4]
  32.         set_location_assignment PIN_76 -to GPMC_AD[5]
  33.         set_location_assignment PIN_53 -to GPMC_AD[6]
  34.         set_location_assignment PIN_55 -to GPMC_AD[7]
  35.         set_location_assignment PIN_73 -to GPMC_AD[8]
  36.         set_location_assignment PIN_65 -to GPMC_AD[9]
  37.         set_location_assignment PIN_67 -to GPMC_AD[10]
  38.         set_location_assignment PIN_71 -to GPMC_AD[11]
  39.         set_location_assignment PIN_64 -to GPMC_AD[12]
  40.         set_location_assignment PIN_63 -to GPMC_AD[13]
  41.         set_location_assignment PIN_70 -to GPMC_AD[14]
  42.         set_location_assignment PIN_69 -to GPMC_AD[15]
  43.         set_location_assignment PIN_75 -to GPMC_CSN
  44.         set_location_assignment PIN_59 -to GPMC_OEN_REN
  45.         set_location_assignment PIN_60 -to GPMC_WEN
  46.         #连接DAC的管脚
  47.         set_location_assignment PIN_144 -to DAC_CLK
  48.         set_location_assignment PIN_143 -to DAC_BIT[10]
  49.         set_location_assignment PIN_142 -to DAC_BIT[9]
  50.         set_location_assignment PIN_141 -to DAC_BIT[8]
  51.         set_location_assignment PIN_139 -to DAC_BIT[7]
  52.         set_location_assignment PIN_137 -to DAC_BIT[6]
  53.         set_location_assignment PIN_136 -to DAC_BIT[5]
  54.         set_location_assignment PIN_135 -to DAC_BIT[4]
  55.         set_location_assignment PIN_134 -to DAC_BIT[3]
  56.         set_location_assignment PIN_133 -to DAC_BIT[2]
  57.         set_location_assignment PIN_132 -to DAC_BIT[1]
  58.         #连接ADC的管脚
  59.         set_location_assignment PIN_7 -to ADC_CLK
  60.         set_location_assignment PIN_8 -to ADC_BIT[1]
  61.         set_location_assignment PIN_9 -to ADC_BIT[2]
  62.         set_location_assignment PIN_24 -to ADC_BIT[3]
  63.         set_location_assignment PIN_25 -to ADC_BIT[4]
  64.         set_location_assignment PIN_26 -to ADC_BIT[5]
  65.         set_location_assignment PIN_27 -to ADC_BIT[6]
  66.         set_location_assignment PIN_28 -to ADC_BIT[7]
  67.         set_location_assignment PIN_30 -to ADC_BIT[8]
  68.         set_location_assignment PIN_31 -to ADC_BIT[9]
  69.         set_location_assignment PIN_32 -to ADC_BIT[10]
  70.         #连接BB GPIO端口,辅助数据采集与传输的管脚
  71.         set_location_assignment PIN_86 -to RD_INT_PULSE
  72.         set_location_assignment PIN_74 -to WR_RDN
复制代码

(4)硬线连接DDS芯片与BB GPIO端口模块

这部分FPGA原理图如图8所示:

图8:硬线连接DDS芯片与BBGPIO端口模块FPGA原理图      

    图9展示了DDS芯片输出的正弦波形,从图中可以看出,频率达到KHz后波形会有衰减,频率越高,衰减越厉害,这涉及放大器带宽及信号完整性问题,模拟部分有待深入修改。
图9:DDS芯片输出的正弦波


(5)FPGA DDS模块
    这个模块的设计采用了一个小技巧,只用到了GPMC的A[1]、A[2]、A[3]三根地址线(特别注意16位模式下的GPMC A[0]地址线未用,具体可以参考GPMC的相关文档),这三根地址线配合GPMC写控制线WEN,利用FPGA搭建的若干三八译码器及寄存器产生中间控制信号CTL[15..0],写频率控制字的控制信号WFREQH、WFREQM、WFREQL,写相位的控制信号WPHASE,写波形数据的控制信号WDATA,写直流幅值的控制信号WDC,如图10 所示:

    这一部分不再对DDS的基本原理进行阐述,关于基本原理可以参考之前我发的一篇帖子:https://bbs.eeworld.com.cn/thread-439651-1-1.html,理解这一部分一定需要与BB端应用程序dds.c文件中的相关函数配合起来一起看,否则很难理解,总之,一句话代过:只可意会,不可言传。

    图11展示了FPGA DDS输出的各种波形,含直流、正弦波、斜波、以及方波,仍然存在波形失真的问题。
图10:FPGA DDS模块控制信号生成部分FPGA原理图
图11 :FPGA DDS输出的各种波形


(6)数据采集与传输模块
    这个模块采用FPGA内的双口RAM作为数据缓存,缓存的容量为一行数据的容量,采样频率为25KHz,FPGA原理图下图12所示:
图12:数据采集与传输模块FPGA原理图

    这个部分测试了GPMC对FPGA RAM的读取速率,BB通过GPMC接口连续读FPGA RAM,用示波器分别探测A[1]地址线以及WR_RDN管脚信号,如图13所示。图13的最上面一幅图是示波器探测的A[1]地址线,其高或低电平持续的时间约为+441.000ns,一个高电平或低电平期间读取16bits的数据,数据读取速率约为36.3Mbps。中间一幅图测量了读取512个点,即一行数据的时间为+225.600000us,根据上面的数据读取速率计算一行数据的读取时间理论值为+441.000ns*512=+225.792000us,理论值与测量值基本吻合。下面一幅图是示波器探测的WR_RDN管脚信号,WR_RDN高电平期间读一行数据,WR_RDN低电平期间写一行数据。读一行数据的时间显示为+242.000000us,与上述的值基本吻合,另外测量时数据采样频率设置的为500KHz,512/500KHz=+1.024000000ms,与测量值+1.030000000ms也是相当吻合的。

    这个部分的研究基本回答了wy52119514在论坛这个帖子中的提问,https://bbs.eeworld.com.cn/thread-421181-1-1.html
大哥你测过GPMC的速度可以达到多少呢?,以你这个方式
图13:GPMC读FPGA RAM速率测试图

(8)附件3为FPGA端软件的全部源代码:
附件3: DDS_FPGA.rar


至此,BB方案大结局的内容已经齐全了。

图8:硬线连接DDS芯片与BB GPIO端口模块FPGA原理图.PNG (20.91 KB, 下载次数: 0)

图8:硬线连接DDS芯片与BB GPIO端口模块FPGA原理图

图8:硬线连接DDS芯片与BB GPIO端口模块FPGA原理图

图9:DDS芯片输出的正弦波.PNG (183.83 KB, 下载次数: 0)

图9:DDS芯片输出的正弦波

图9:DDS芯片输出的正弦波

图10:FPGA DDS模块控制信号生成部分FPGA原理图.PNG (143.35 KB, 下载次数: 0)

图10:FPGA DDS模块控制信号生成部分FPGA原理图

图10:FPGA DDS模块控制信号生成部分FPGA原理图

图11 :FPGA DDS输出的各种波形.PNG (174.24 KB, 下载次数: 0)

图11 :FPGA DDS输出的各种波形

图11 :FPGA DDS输出的各种波形

图12:数据采集与传输模块FPGA原理图.PNG (42.08 KB, 下载次数: 0)

图12:数据采集与传输模块FPGA原理图

图12:数据采集与传输模块FPGA原理图

图13:GPMC读FPGA RAM速率测试图.PNG (122.99 KB, 下载次数: 0)

图13:GPMC读FPGA RAM速率测试图

图13:GPMC读FPGA RAM速率测试图

附件3:DDS_FPGA.rar

4.27 MB, 下载次数: 86

附件3:DDS_FPGA

最新回复

  详情 回复 发表于 2016-12-20 12:12
点赞 关注
 

回复
举报

1185

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
感谢分享啊。
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表