首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA的高速多通道数据采集控制器IP核设计

FPGA的高速多通道数据采集控制器IP核设计

随着可编程逻辑器件的不断进步和发展,FPGA在嵌入式系统中发挥着越来越重要的作用。本文介绍的在电能质量监测系统中信号采集模块控制器的IP核,是采用硬件描述语言来实现的。首先它是以ADS8364芯片为控制对象,结合实际电路,将6通道同步采样的16位数据存储到FIFO控制器。当FIFO控制器存储一个周期的数据后,产生一个中断信号,由PowerPC对其进行高速读取。这样能够减轻CPU的负担,不需要频繁地对6通道的采样数据进行读取,节省了CPU运算资源。
1 ADS8364芯片的原理与具体应用
  A/D转换芯片ADS8364是TI公司推出的专为高速同步数据采集系统设计的高速度、低功耗、6通道(三相电压、三相电流)同步采样的16位A/D转换芯片。采用模拟和数字分别供电,在模拟输入端,有模拟参考电压输入、输出引脚和信号六通道正反相输入引脚;在数字端,主要包括控制ADS8364的读/写、复位、片选引脚和转换结果输出总线。
  ADS8364芯片的转换过程为:当ADS8364的HOLDX保持至少20 ns的低电平时,转换开始。当转换结果被存入输出寄存器后,引脚EOC的输出将保持半个时钟周期的低电平,以提示数据分析处理器进行转换结果的接收,处理器通过置RD和CS为低电平可使数据通过并行输出总线读出。在转换数据的接收过程中,ADS8364芯片各引脚工作的时序达到协调一致,才能保证监测设备良好工作,具体时序安排如图1所示。
  ADS8364芯片的数据输出方式分别由BYTE、ADD与地址线A2、A1、A0组合控制,转换结果的读取方式由电能质量监测系统中采用的数据分析处理器决定,一般可取直接读取、循环读取和FIFO方式的任何一种。根据BYTE为0或者为1可确定每次读取时得到的数据位数,根据ADD为0或者为1可确定第一次读取的是通道地址信息还是通道A/D转换结果。在实际应用中,我们结合了ADS8364模数转换器中的6个16位ADC可以成对同步工作的能力,3个保持信号(HOLDA、HOLDB、HOLDC)可以同时被选通,其转换结果将保存在6个寄存器中。对于每一个读操作,ADS8364均输出16位数据,最高位为符号位。根据图2所示的ADS8364循环读取方式工作时序,需设置BYTE为0,A2、A1、A0分别为1、1、0。

图1 ADS8364工作时序

2 使用硬件描述语言设计数据采集控制模块
2.1 生成硬FIFO控制器
  可编程逻辑器件采用的是Xilinx公司Virtex4系列FPGA,在核生成器中可以产生硬FIFO控制器。主要生成过程如下:
  ① 选择FIFO生成器,接着在Read/Write Clock Domains选项中选择异步FIFO: FIFO从ADS8364中存储数据时,写入时钟与A/D转换芯片的时钟(5 MHz)同步;当向FIFO中写入1个周期的数据后,CPU根据FIFO发送的请求,用100 MHz系统时钟对数据进行读取。
  ② Memory Type:选择使用内部的块RAM。
  ③ 位宽与深度:A/D转换芯片是16位,位宽设置为16。由于电网频率是50 Hz,且监测系统要求每个周期采样256点,故A/D芯片的采样频率为12.8 kHz。每个周期FIFO要存储的数据是256×6(ADS8364是6通道数据同步采集),所以深度可设置为大于256×6,再根据需要设置FIFO空/满标志阀值。
  完成设计,最后生成.v原文件和.ngc网表。FIFO的数据输出宽度是16位,而PowerPC的数据总线宽度是32位,所以对FIFO的宽度进行扩展后并对其实例化,使其可被综合和仿真。
2.2 时钟分频设计
  FPGA的系统时钟频率是100 MHz,A/D转换芯片与一些控制模块需要5 MHz的输入时钟,所以需要对时钟进行20分频。这里采用Virtex器件内置的DCM(Digital Clock Manager,数字时钟管理)单元。DCM中包含一个DLL(DelayLocked Loop,延迟锁定电路),可以提供对时钟信号分频功能,并且能够维持各输出时钟之间的相位关系即零时钟偏差。对系统时钟进行10分频,再2分频,这样可以节省分频寄存器。以下代码是时钟分频部分的Verilog描述:
BUFG CLKDV_BUFG_INST(.I(CLKDV_BUF),.O(CLKDV_OUT));
IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),.O(CLKIN_IBUFG));
BUFG CLK0_BUFG_INST(.I(CLK0_BUF),.O(CLKFB_IN));
DCM_ADV DCM_ADV_INST(.CLKFB(CLKFB_IN),.CLKIN(CLKIN_IBUFG),
.DADDR(GND_BUS_7[6:0]),.DCLK(GND_BIT),.DEN(GND_BIT),
.DI(GND_BUS_16[15:0]),.DWE(GND_BIT),.PSCLK(GND_BIT),
.PSEN(GND_BIT),.PSINCDEC(GND_BIT),.RST(RST_IN),
.CLKDV(CLKDV_BUF),.CLKFX(),.CLKFX180(),.CLK0(CLK0_BUF),
.CLK2X(),.CLK2X180(),.CLK90(),.CLK180(),.CLK270(),
.DO(),.DRDY(),.LOCKED(),.PSDONE());
2.3 A/D转换芯片控制模块及顶层文件的设计
  控制器模块的设计:
  ① 根据ADS8364的工作原理:HOLDX保持至少20 ns的低电平,转换开始,所以控制器需根据时序要求产生HOLD周期信号。
  ② 转换结束后根据EOC的响应状态,需要置RD和CS为低电平,使数据通过并行输出总线读出。下面是根据EOC的状态改变RD值的Verilog描述:
always @(negedge clk)
 begin
  if (EOC_n==0)count2<=0;
  if (count2<=11)
   begin
    count2 <= count2 + 1'b1;
    RD_n <= ~RD_n;
   end
  elseRD_n <= 1;
 end
  根据图1的工作时序和图2的循环读取方式以及对数据采集频率(12.8 kHz)的要求,对芯片相应的引脚进行控制,并和FIFO进行连接使采集的数据能够按照循环方式写入FIFO。采用Verilog硬件描述语言实现上述功能,并建立顶层文件正确连接各个功能模块。

图2 循环读取方式工作时序

顶层文件的Verilog描述如下:
CLKDV clk_divide(.clk(clk),.clk_5m(clk_5m));
FIFO_ads8364 fifo
(.RD_clk_in(Bus2IP_Clk),.WR_clk_in(clk_5m),
.RD_EN(fifo_RD_EN),.WR_EN(fifo_WR_EN),
.Data_in(Data_in),.empty(empty),.full(full),
.prog_full(prog_full),.Data_out(Data_out));
ads_ctrl ads_control (.clk(clk_5m),.EOC_n(EOC_n),
.holdx_n(holdx_n),.RST_n(RST_n),
.RD_n(RD_n));
  如图3所示,时钟分频部分的输出与FIFO的数据写入时钟、AD_Ctrl的时钟和A/D转换芯片的时钟相连接。AD_Ctrl部分主要对ADS8364芯片进行控制,其中输出RD也连接到FIFO的写使能端,对FIFO的数据写入进行控制。FIFO的读时钟接到系统时钟,读使能由CPU控制。当FIFO写入一个周期的数据后,由prog_full产生中断信号,CPU响应并对FIFO进行读取。

图3 各功能模块连接示意图

2.4 仿真
  对顶层文件进行综合,并在Modelsim中对其进行仿真。数据采集控制器的仿真结果如图4所示。当holdx_n为低电平时,启动A/D转换,完成后根据EOC_n的低电平信号产生6个RD_n的低电平信号,循环读取数据。当FIFO存储了一个周期的数据后,CPU置FIFO的读使能端口为高电平,对FIFO中的数据进行高速读取。若FIFO中数据为空,empty为高电平。

图4 A/D转换过程与数据读取仿真波形

3 使用Xilinx嵌入式开发工具EDK设计IP核
  嵌入式开发软件EDK为设计人员提供了自动化设计向导——Base System Builder(BSB),可以指引工程师快速完成整个设计过程。使用BSB创建工程,在创建完成之后使用EDK自带的CIP (Create and Import Peripheral Wizard)添加用户自定义IP核[2],生成的用户IP核保存在EDK工程目录下的pcore文件夹。用户IP核目录如图5所示。

图5 用户IP核目录结构图

其中文件夹data用于存放用户IP的配置文件,如.prj文件、.mpd文件和.pao文件等;文件夹hdl用于存放用户IP的HDL代码,即.v或者.vhd文件;而devl(simmodels)文件夹中的工程可以使用户在ISE平台对工程进行设计、综合与仿真,如果设计需要加入网表,可以放在netlist文件夹。CIP在建立用户IP核时,使用了一种专用接口规范(IPIF)。IPIF是一个验证并优化的高度参数化的定制接口,它提供了一个简化的总线协议IPIC[3](IP Interconnect),操作这个总线与直接操作PLB及OPB这些总线相比要简单很多。通过IPIF模块,对其进行参数化定制来满足设计需求,将降低设计与测试的工作量。 将设计的Verilog文件复制到IP核目录下相对应的hdl文件夹下,启动ISE开发平台并打开devl文件夹中的工程文件,在Sources for Implementation中显示的结构如图6所示。图中,adsfifo.vhd是IPIC的描述文件,user_logic.v(或user_logic.vhd)可以实现用户IP核功能设计。
  需要在adsfifo.vhd中加入必要的端口声明与逻辑设计,使PLB控制器与用户IP设计端口进行相应的连接。设计完成后在ISE平台中对该IP核进行综合并仿真。综合后查看FPGA器件的资源使用情况,如表1所列。

图6 文件结构

表1 器件资源使用情况

根据需要修改user_logic.v(或user_logic.vhd),向其中添加端口声明与逻辑设计:
assign
 slv_reg_write_sel = Bus2IP_WrCE[0:0],fifo_RD_EN=Bus2IP_RdCE[0:0],
 slv_write_ack= Bus2IP_WrCE[0],slv_read_ack = Bus2IP_RdCE[0];
 fifo_WR_EN=~RD_n;
always @( posedge Bus2IP_Clk )
 begin: SLAVE_REG_READ_PROC
  case ( fifo_RD_EN )
   1'b1 : slv_ip2bus_data <= Data_out;
   default : slv_ip2bus_data <= 0;
  endcase
 end
  注意:在综合后需要使用EDK中的CIP工具重新导入用户IP核,在导入的过程中要指定MPD配置文件和XST project file (*.pfj)文件,这样CIP可以自动加入相关联的.v或.vhd文件。导入完成后在EDK的IP Catalog的Project Local pcores分类中可以看到用户IP核,可以向EDK工程中加入该IP核,并设置其Bus Interface、Port和Addresses后生成位流文件,下载到开发板进行调试。
4 总结
  利用FPGA和ADS8364设计的数据采集的IP核,其接口简单,采集精度高,可同时采集多路信号,而且能减轻FPGA嵌入式系统中CPU的负担,节省CPU的运算资源。经过仿真和下载到开发板验证,该设计能满足高速交变电压信号采集的高精度和高实时性的要求。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表