一种PC104温度采集卡的设计
R/W:0表示写,1表示读。
F1,F0:00表示对AD7711控制寄存器操作,11表示对AD7711校准寄存器操作,01则是读取数据。
CHCH3CH3CH1CH0:1xxxx表示全通道操作,0xxxx表示某单通道操作。
因为分配给每块采集卡的I/O地址空间有限,所以利用板卡命令寄存器的低8位作为参数数据,高8位作为命令/参数类型。为了稳定可靠地锁存数据,参数寄存器的使能信号由板卡命令寄存器写造中信号延时两个野兔周期得到。参数类型是指采样速率、输出因子、中断号。板卡命令寄存器高8位提供的命令有启动(START)、停止、同步(驱动AD7711的/sync线)、复位、FIFO清零等命令。
图2中的粗线表示数据的流向。通道主控器(ChnMaster)与AD7711数字界面接口,负责产生AD7711的所有读写时序。一共有12个通道主控器,可以并行地工作,由通道触发电路(ChnTrigger)触发和指定串/并工作方式。它将通道操作寄存器给出的并行24位控制字或校准数据(由CtlReg.F1F0决定)转换成串行数据,由SDATA发送出去,或者读取AD7711的数据寄存器和控制/校准寄存器,将串行数据转换成24位和16位的并行数据。当通道主控器产生Rdy信号时表示接收完毕,新的数据已经获得。根据通道操作寄存器的24~28位,有全通道和单通道工作方式。
当CH=1时,为全通道的数据采集并行工作方式。如果板卡命令START有效,可编程时钟发生器(ProgClkGen)则根据采样速率输出采样时钟。采样时钟直接或经定时器(Timer)延时后产生Tpt信号输入到通道触发电路,产生通道使能信号Ena,从而触发通道主控器开始工作。每个通道的通道主控器读取AD7711的数据,当16位数据读完时,输出Rdy信号。控制分配器(Director)接收采样时钟和Rdy信号。当所有通道的Rdy信号都收到时,输出通道选择信号到4~16多路选择器,依次选通各个通道的数据,并产生FIFO写控制信号,将每个通道的数据写入FIFO里。当采样次数达到输出因子大小时,就通过中断产生模块(IntrGen)输出一个指定的中断脉冲。PC104主机接收到中断后,读取参数寄存器(0x280)的值,其大小即为输出数据的个数。控制分配器还对主机连续读取数据的/IOR信号进行计数,若该次中断读取的数据完毕,产生中断处理结束信号,允许下次对FIFO进行写操作。
当CH=0时,由CH3CH2CH1CH0决定对哪个通道操作,一般对AD7711读写控制字和校准字时使用单通道的操作。当PC104主机写控制寄存器时,内部产生一个表示写新控制字完毕的脉冲信号,触发通道触发电路使之产生一个通道使能信号Ena,使相应的通道主控器开始工作。如果写AD7711控制/校准寄存器,则通道主控器将24位数据锁存,进行并-串转换发送出去。如果读AD7711控制/校准豁口,则通道主控器接收串行数据并转换成24位并行数据。通道操作寄存器的通道号决定多路选择器的输出,将数据锁存到通道寄存器数据锁存器(0x284)里。操作完成后,状态寄存器的busy位为0,主机就可以从地址0x284读取到相应AD7711控制/校准寄存器里的数据。
图2里还包括了内部RAM和对外部串口E2PROM。可以初始化RAM,使CPLD在上电时就保存有各通道校准参数,但是若修改固化参数,必须重新编译和对外部配置器件编程,用户主机不能修改。若将参数保存在片外的串口E2PROM,则可以对其读和写,以方便用户主机根据实际情况校准各个通道,并保存新的校准参数。
2.2 通道主控器的设计
通道主控器的主要结构如图3所示,包括左移移位寄存器、/RFS和TFS生成模块、SCLK计数器。发送时,内部输入数据通过LodSht锁存,通过移位从Sdata_o输出;接收时,串行数据从Sdata_I输入,通过移位得到并行数据(24位)输出到内部。ClrSht和EnaSht分别是清零和使能信号。
2.3 FIFO和RAM
FIFO提供数据缓冲能力。FLEX10K50QC240能够提供2880个逻辑单元、10个嵌入式阵列块(EAB),总计20480个RAM位。根据板卡的要求,最大的输出因子为32,它所需的最大RAM位为32×12×16=6144。每个EAB只能配置成256×8bit,深度为384、数据位宽为16的FIFO需要占用4个EAB。所以FIEX10K50QC240完全可以满足要求,实际上它可以实现最大输出因子为64所需要的FIFO缓冲。这里使用Altera公司提供的参数化模块LPM_FIFO来实现所需的模块。它是一个单时钟同步FIFO,支持同时读和写。
2.4 控制分配器
控制分配器主要输出通道选择信号和FIFO的写控制信号。当条件满足时,便输出从1~12个FIFO写控制信号。这里休用状态机实现这一过程。
2.5 可编程时钟发生器
采样脉冲由10MHz时钟计数分频得到,其频率由主机写到参数寄存器的参数决定。计数器的预置值与参数存在一一对应关系。方法一是采用译码器,由于输出的预置值是24位,则逻辑复杂,需占用大量的逻辑单元资源。 方法二是使用查找表,采用三段8位的ROM来实现,仅占用若干RAM位,简单有效。
通道控制器内部逻辑的原理设计完成后,所有的详细设计都采用硬件描述语言VHDL实现,并在MAX+PULSII集成环境下编译、模拟、综合,最后下载到外部配置器件EPC2中。首先规划好每个子功能块的模型,子功能模型可以使用状态模型,也可以使用时序图进程模型来描绘。其次选择适当的描述方式编写代码。编写代码的方式非常重要,因为VHDL综合工具将依据设计代码方式映射成相应的器件逻辑,VHDL代码的编写方式将直接影响到设计的结果。
本文介绍的PC104温度采集卡不仅完成了代码设计和功能仿真验证,最后还在实际系统中得到成功应用。结果表明,这款PC104温度采集卡不仅设计紧凑、功能强大而且非常灵活,很适合用于过程控制、智能传感器、便携式工业设备、分布式工业测量等场合。其中通道控制器是采集卡的设计核心,它的详细设计过程对其它类似的采集卡控制器设计也有一定的借鉴意义。
- 基于PC104的通用自动测试系统设计(02-23)
- 基于PC104架构的某系列计算机通用测试平台的设计与实现(03-20)
- 多总线融合式通用自动测试系统设计(05-11)
- 一种高可靠性的频率测量系统(03-01)
- 基于PC104的放线车检测系统硬件设计(04-24)
- 于PC104与C8051F120的水下机器人环境监测系统设计(10-22)