系统工作过程如下:ALE为地址锁存使能信号,当下降沿来时,将P0口将低8位地址送入可编程芯片CPLD/FPGA中的地址锁存器,然后在P2口和P0口形成的16位地址及WR信号共同作用下,将P0口的数据送入可编程芯片。单片机通过两条指令MOVXDPTR@ ADDR和MOVX @DPTR A将数据写入芯片。在P2口和P0口形成的16位地址及RD信号共同作用下,将AD0809转换后数据data送入单片机的P0口。单片机通过两条指令 MOVX DPTR @ADDR和MOVXA@ DPTR将数据读入P0口。设置A/D转换器件片选信号ad_e和DA转换器件片选信号da_e,设置数据输入/输出口data[7..0]。单片机与FPGA通信接口程序(名为MCS51)通过编译后,生成的逻辑符号如图2所示。
CPLD使用EPM7128时钟为16 MHz有源晶振,首先使用CLK对复位信号采样,8051的复位信号要求是高电平维持2个机器周期,2个机器周期就是2×12=24个振荡周期,对复位信号连续采样10次,若是一直为高电平,就产生片内复位使能信号。其他片内寄存器以这个复位信号做同步复位,对WR.RD,ALE都做了采样,避免毛刺干扰。
1.3 AD0809与CPLD/FPGA状态机接口设计
1.3.1 AD0809状态机功能设计
状态机的最简结构一般由两个进程构成,即主控时序进程和主控组合进程。一个进程描述时序逻辑输出,另一个进程描述组合逻辑包括进程问状态值的传递逻辑以及状态转换值的输出。将AD0809与CPLD/FPGA的接口设计系统划分为两部分,即数据单元和控制单元。数据单元包括保存运算数据和运算结果的数据寄存器,也包括完成数据运算的组合逻辑电路。控制单元用来产生信号序列,以决定何时进行何种数据运算,控制单元要从数据单元得到条件信号,以决定继续进行那些数据运算。数据单元要产生输出信号、数据运算状态等有用信号。数据单元和控制单元中,有两个非常重要的信号,即复位信号和时钟信号。复位信号保证了系统初始状态的确定性,时钟信号则是时序系统工作的必要条件。状态机通常在复位信号到来的时候恢复到初始状态,每个时钟到来的时候内部状态发生变化。从AD0809的初始状态开始,也就是状态机复位以后开始的状态。在建立每个状态时都写出关于这个状态的文字功能描述,AD0809状态机功能描述与相应引脚的取值如下:
1. 3.2 ADC0809状态机程序设计
ADC0809为单极性输入,8位转换精度逐次逼进式A/D转换器。其采样速度为每次转换约100μs。在转换开始前由地址锁存允许信号ALE将3位地址锁入锁存器中以确定转换信号通道。EOC为转换结束状态信号,由低电平转为高电平时指示转换结束,此时可读人转换好的8位数据。EOC在低电平时指示正在进行转换。START为转换启动信号,上升沿启动。OE为数据输出允许高电平有效。CLK为ADC转换时钟输入端口500 kHz左右。为了达到A/D器件的最高转换速度,A/D转换控制器必须包含监测EOC信号的逻辑,一旦EOC从低电平变为高电平即可将OE置为高电平,然后传送或显示已转换好的数据[DO..D7]。状态机由三个进程组成ADC,AD_STATE和DATA_LOCK。ADC是此状态机的主控组合逻辑进程,确定状态的转换方式和反馈控制信号的输出工作过程中首先监测系统复位信号RST,当其为高电平时使此进程复位至初始态ST0。启动A/D转换信号START在状态ST3搜索转换状态信号EOC由0变1时即在状态ST4开启输出。使能信号OE在下一状态使LOCK产生一个上跳沿从而在此时启动进程DATA_LOCK将由0809转换好的8位数据锁进锁存器ADC_DATA。根据时序电路图通过状态机设计程序完成与CPLD/FPGA芯片的连接。图3为状态机程序仿真结果。
1.4 BCD码转换与显示电路设计
当ADC0809的基准电压(Vref)为5.12V时,最小电压准位是5.12/28=O.2V。分析模拟输入电压与输出电压的对应关系可知,当ADC0809的D[7..0]收到的数据信号为10000110(即86H)时,则高4位1000为2.56V,而低4位0110为O.12V,所以最后的电压输出结果是2.68V。为了方便后续的电压数据显示,在此将输出电压表示成12位的BCD码形式。将高4位数据D(7..4)转换为对应的高12位BCD码H(11..0);将低4位数据D(3..0)转换为对应的低12位BCD码L(11..O)。在程序中首先用VHDL语言描述一个新的进程Process(regl),然后采用case…when …语句,生成并行结构的电路。