在FPGA系统中,实现对外部A/D数据采集电路的控制接口逻辑,由于其逻辑功能不是很复杂,因此可采用自定义的方式。采用这种方法进行设计有两种途径。①从软件上去实现。这种方案将NIOS处理器作为一个主控制器,通过编写程序来控制数据转换电路。由于NIOS处理器的工作频率相对于外部设备来说要高出许多,故此种方法会造成CPU资源极大的浪费;②用FPGA 的逻辑资源来实现A/D采集电路的控制逻辑。FPGA有着丰富的逻辑资源和接口资源,在其中实现并行的数据采集很少会受到硬件资源的限制,在功能上,设计的接口控制逻辑相当于一个主控制器,它是针对具体的外部电路而实现的,容易满足要求、又能节约资源,提高系统性能。因此,采用硬件逻辑去实现控制将是一种较好的方式。
设计方案
通过对系统需求进行仔细分析,此模块的功能设计可分为数据采集控制逻辑、数据接口、数据处理逻辑三部分,其整体功能框架图如图1。
图1 模块功能框图
说明:AVALON总线主要是用于连接片内处理器与外设,以构成可编程单芯片系统。
功能描述
设计分析
数据采集控制逻辑
在此以典型的模数转换芯片 ADC 0804为例,进行电路设计,ADC0804的数据宽度为8位,数据转换时间最快为100ms,转换时钟信号可以由内部施密特电路和外接RC电路构成的震荡器产生,也可以直接由外部输入,其频率范围:100KHz~1460KHz。在本设计中ADC0804的时钟为最大输入频率,控制信号时序如图2。
图2 ADC0804控制信号时序图
由ADC0804的时序可知,转换过程由一个写信号启动,转换完成后,输出INTR信号,此时可以读取数据。之后即可
在此,提出两种方法来实现ADC0804的控制信号时序:①主动模式—控制电路启动A/D转换后,在INTR信号的作用下,输出读信号,同时从ADC0804的数据总线上读入数据,之后输出一个写信号,开始下一次转换。②被动模式—ADC0804的读写信号完全由控制电路按照固定的时序产生,与其自身输出无关。
数据接口
相对于AVALON总线信号来说,A/D采样的速率非常低,而且,AVALON总线的接口信号和ADC0804数据输出的接口信号时序不一致。因此,要实现满足要求的数据通道,要做到两点:①数据缓冲,实现速率匹配;②信号隔离,实现接口时序的转换。解决这两点,可以将两端口通过一个异步的FIFO连接,该FIFO应该是可以在不同的时钟信号下进行异步的读写。这样的一个FIFO的实现可以在Quartus-II里面用ALTERA公司提供的FIFO Core进行定制。在本设计中,定制的FIFO模块如图3。
图3 FIFO模块
设计实现
图4为在Quartus-II中设计实现的ADC0804 数据采集接口 控制模块的原理图。
图4 A/D数据采集控制模块原理图
其中read、readdata、reset、IRQ分别与AVALON总线相同命名的信号线相连,readclk与AVALON总线中clk相连, AD_50与FPGA的系统时钟相连,wr_n、rd_n、writedata分别与ADC0804的写信号线、读信号线、数据线相连。ADC0804控制信号产生单元的实现,采用的是上文提到的被动模式,该单元以固定的时序产生读写信号,本设计使用的采样频率约为3200Hz,此频率可以根据用户的需要而设定( 不大于10KHz即可)。