TLV5618是TI公司带缓冲基准输入(高阻抗)的双路12 位电压输出DAC,通过CMOS 兼容的3线串行总线实现数字控制。器件接收16 位命令字,产生两路D/A模拟输出。TLV5618只有单一I/O周期,由外部时钟SCL K决定,延续16 个时钟周期,将命令字写入片内寄存器,完成后即进行D/A转换。TLV5618读入命令字是从CS的下降沿开始有效,从下一SCLK的下降沿开始读入数据,读入16位数据后即进入转换周期,直到下次出现CS的下降沿。 其操作时序图如图2 所示。
TLC2543是TI公司的带串行控制和11个输入端的12 位、开关电容逐次逼近型A/D转换器。片内转换器有高速、高精度和低噪音的特点。 TLC2543工作过程分为两个周期:I/O周期和转换周期。I/O周期由外部时钟SCLK决定,延续8、12或16个时钟周期,同时进行两种操作: 在SCLK上升沿以MSB方式输入8位数据到片内寄存器;在SCLK下降沿以MSB 方式输出8、12、16位转换结果。转换周期在I/O周期的最后一个SCLK下降沿开始,直到EOC信号变高,指示转换完成。为了与TLV5618的I/O周期一致,采用了MSB方式,使用CS的16 时钟传送的时序。其操作时序如图3 所示。
由于这两种器件都是SPI接口,可将这两器件连接至同一SPI 总线,通过不同的片选信号对不同的器件操作。 由于SPI接口协议复杂,而且从图3 可以看出,这两种器件的时序并没有用到全部的SPI接口时序。为了实现符合以上逻辑的时序,减少标准SPI 接口IP 核对FPGA资源的浪费,设计采用Verilog硬件描述语言用同步状态机(FSM)的设计方法实现,编写ADC及DAC控制时序。程序实际上是一个嵌套的状态机,由主状态机和从状态机通过由控制线启动的总线在不同的输入信号情况下构成不同功能的有限状态机。 则由图3 可知,D/A操作有4 个状态,A/D操作有7个状态。两种状态中有几个状态是相同的,故可用一个有限状态机完成对串行A/D及D/A的操作。
程序实际上是一个嵌套的状态机,由主状态机和从状态机通过由控制总线启动的总线在不同的输入信号情况下构成不同功能的较复杂的有限状态机。 A/D及D/A操作共用唯一的驱动时钟(SCLK) 及数据总线(SI、SO)。由于操作的写周期有16个时钟周期,读周期有12个时钟周期,模块是在三个嵌套的有限状态机中完成的,其主状态机的状态如图4 所示。
系统设计中,将AD、DA操作封装成一单独模块,由上层控制模块输出命令字及控制信号启动本模块的相应操作,操作完成后(进入idle状态) ,本模块发出相应状态信号至上层模块。