微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于CPLD的数据采集系统的设计

基于CPLD的数据采集系统的设计

时间:08-15 来源:互联网 点击:

有效,DSP停止读入操作。采用两片CY7C425扩展为18位1024字的高速异步FIFO存储器,数据处理速度达到50MHz,可以实现数据的高速写入和高速读出。FIFO异步读写时序见图3。

  2.3 状态机模块

  状态机FSM完成自动A/D转换和数据存储,控制芯片是EPM7128SQC100。该状态机由系统时钟驱动,产生RD、WR、INT信号,状态机能连续运行,不断地写命令字以启动A/D转换,然后读出A/D的转换结果并同时写入FIFO。

  复位时,产生写脉冲WR,芯片MAX196在WR的上升沿锁存外部输入的命令控制字,开始A/D转换。当A/D转换结束时,芯片INT变为低电平,在下一个时钟的上升沿,RD变为低电平,数据总线上输出数据。当RD信号低电平有效时,INT信号变为高电平,下一个时钟的上升沿,RD信号变为高电平,在RD的上升沿数据被锁存进FIFO。RD信号回到高电平后,WR信号变为低电平,于是又开始下一次转换。

3 系统的Verilog HDL描述

  电子系统设计中一般遵循自上而下的设计思路,对系统进行设计、描述与仿真。考虑到模块的通用性和可移植性,常常使用HDL语言来描述数字系统,如Verilog HDL、VHDL、AHDL语言等。其中Verilog HDL语言具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点,被近90%的半导体公司使用,成为一种强大的设计工具。

  3.1 用Verilog HDL语言描述MAX196

  用Verilog HDL程序描述MAX196模块,可以把模块用于采集系统的仿真,以验证状态机设计的正确性。该模块主要有三个输入信号和一个输出信号,与芯片的控制信号是一致的。程序说明如下:

  module adc(reset,rd_adc,wr_adc,int_adc);

  input reset,rd_adc,wr_adc;

  output int_adc;

  reg int_adc;

  always @(posedge wr_adc or negedge rd_adc or negedge reset)

  begin

  if(!reset)int_adc=1;

  else if(rd_adc==0)begin int_adc=1;end

  else begin #10 int_adc=0;end

  end

  endmodule

  3.2 用Verilog HDL语言描述自动状态机

  自动状态机有三个输入信号和两个输出信号,输入信号中clk由DSP系统输出以控制采样速度,reset信号复位自动状态机,int_adc是A/D芯片转换结束的响应信号;输出信号rd_adc、wr_adc控制A/D芯片的转换开始和数据的读出,以及控制FIFO将数据写入FIFO。程序说明如下:

  module fsm(int_adc,clk,reset,rd_adc,wr_adc);

  output rd_adc,wr_adc;

  input int_adc,clk,reset;

  reg rd_adc,wr_adc;

  reg[1:0]present;

  parameter reset_ad=2''h0,start_ad=2''h1,wait_ad=2''h2,read_ad=2''h3;

  always @(posedge clk or negedge reset)

  if(~reset) begin present=reset_ad;rd_adc=1;wr_adc=0;end

  else

  begin

  case(present)

  reset_ad:if(rd_adc)

  begin present=start_ad;wr_adc=1;end

  start_ad:if(~int_adc)

  begin present=wait_ad;rd_adc=0;end

  wait_ad:if(~rd_adc)

  begin present=read_ad;wr_adc=0;end

  read_ad:if(~int_adc)

  begin present=reset_ad;rd_adc=1;end

  endcase

  end

  endmodule

  3.3 数据采集系统

  MAX196模块和状态机模块组成高层模块--自动采样系统,通过模块实例的调用和端口映射语句实现模块的组合。特别设定输出信号int_adc,可使仿真波形看得更加清楚。程序说明如下:

  module simuadc(clk,reset,rd_ad,wr_adc,int_adc);//系统模块

  output rd_adc,wr_adc,int_adc;

  input clk,reset;

  reg rd_adc,wr_adc,int_adc;

  adc adcmax196(reset,rd_adc,wr_adc,int_adc);//A/D芯片模块

  fsm fsmdsp(int_adc,clk,reset,rd_adc,wr_adc);//状态机模块

  endmodule

  3.4 仿真图形

  图5为采集系统的时序仿真图。CLK是系统外部时钟,用于控制采样频率;RESET接外部复位信号,可以控制采样的起始时刻;MAX196的WR_ADC、RD_ADC、INT_ADC分别与逻辑芯片EPM7128的控制引脚相连接。仿真图表明,复位后,只要有CLK时钟输出,A/D转换将连续进行,转换数据依次存入FIFO,当FIFO满时,向DSP发出中断请求,DSP及时响应并启动DMA高速读入FIFO中的值,由于DSP读入的速度足够快,因此A/D转换并不需要停顿,从而实现实时采样和实时处理。 本文提出的自动采集系统采用CPLD芯片,用硬件描述语言设计自动状态机,实现硬件控制数据采集和存储。目前采集系统应用于DSP应用板卡上,免去了DSP监控A/D芯片的时间,使信号处理系统能高效地完成复杂的随机共振系统的研究。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top