CoolRunner-II CPLD设计
发布时间:2008/9/19 0:00:00 访问次数:649
cpld控制adc初始化并读回12位转换结果,将其解串为16位存储在sram中。此过程由两个状态机实现,如图1所示。
cpld配置adc内部每一个寄存器,紧接着一个“direct mode”命令开始对一个指定的输入通道进行一次转换。cpld在读入转换结果之前,必须发送一个“直接模式命令”,读入转换结果。之后,将其解串并存储在sram中。重复上面的操作,完成所有通道转换。
(2)主状态机
主状态机如图2所示。
如图1 adc接口工作流程
如图2 主状态机
控制逻辑流程如下。
● 指定寄存器地址。
● 通过串行接口发送相应的地址。
● 指定相应寄存器的数据。
● 通过串行接口发送相应寄存器的数据。
● 重复执行前4步,直到所有寄存器被配置完成。
● 指定“直接模式指令”,开始对一个选定的输入通道进行ad转换。
● 读入转换结果,并将其写入sram。
● 重复执行执行上两步,读入指定输入通道的所有转换结果。
● 重复执行前3步,完成所有输入通道的转换。
如表所示为主状态机中每个状态的详细说明。mode_flag="0"表明串行移位的数据为8位宽,它代表寄存器地址及待写入寄存器的数据或直接命令;mode_flag="1"表明串行移位的数据为16位宽,它代表adc转换结果。其中有12位的adc转换数据,3个零位及一个溢出位。
如表 主状态机中每个状态的详细说明
(3)定制主状态机
用户可以通过修改主状态机vhdl代码,使设计适合特定的应用,主要有如下两个方面需要修改。
● 寄存器模式
主状态机会一直保持在寄存器模式,直到所有寄存器被配置完成。用户可以指定哪些寄存器需要配置和写入数据。下面的代码说明如何修改vhdl代码,以完成对addr3寄存器的写操作:
constant wr_addr3_en: booi_jean := true;
-- write/read to control register
constant aaddr3: std_logic_vector(7 downto 0) := '00000011';
--data to be written
constant data_wr_addr3: std_logic_vector(7 downteo 0): ='000001100';
变量wr_addr3_en可以设置为true或false,以使能或禁止对addr3的写操作。如果设计为true,则待写入此寄存器的数据也需要使用常数data _wr_addr3指定。在此例中,将“00000100”写入addr3。这个常数指定read back mode 1(msb先被读回),同时设置cclk分频系数为1。
写寄存器不仅要指定寄存器地址,而且要指定读/写操作及数据字的大小。被写入控制寄存器的控制字包含指定先读msb还是lsb、cclk分频系数、通道的pga增益,以及使能数字i/o,更多特性可以参考adc数据手册。
● 直接模式
一旦adc的所有寄存器被配置完成,adc可以工作在直接模式,此模式允许外部控制器来指定输入通道及读取转换数据。此设计中的vhdl代码允许设计者指定哪个输入通道将会被读取及多少个转换结果将会被读取,下面的代码说明如何对通道1进行8次转换并从通道1读8次转换结果:
在此设计中,多少个模拟量需要转换由写入到sram中的转换结果的数目决定。因此一旦sram的地址计数器达到sram_high,指定数目的转换结果就已经被存储在sram中。通道使能由dm_sng_ln0_en控制,设为true,将允许该通道的转换。常数dm_sng_ln0存储通道ln0的直接命令字。
(4)移位控制逻辑
移位控制逻辑由主状态机初始化,移位状态机用来控制adc串行数据的移位输出和输入,包括写寄存器地址、写寄存器数据和写直接模式指令等。在直接模式转换周期移入转换结果。
移位状态机控制逻辑如图3所示,在go_shift(由主状态机产生)的上升沿移位状态机被激活,mode_flag为8位或16位操作标志位。
移位状态机产生sclk移位时钟,并准备好待发送的数据。在sc0状态(sclk='0')时,存放待发送数据的寄存器被使能;在sci状态(sclk='1')时,数据位被移出到din。
如图3 移位状态机控制逻辑
在直接模式转换周期,移位状态机在sclk的有效边沿读回dout信号线上的转换结果。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
cpld控制adc初始化并读回12位转换结果,将其解串为16位存储在sram中。此过程由两个状态机实现,如图1所示。
cpld配置adc内部每一个寄存器,紧接着一个“direct mode”命令开始对一个指定的输入通道进行一次转换。cpld在读入转换结果之前,必须发送一个“直接模式命令”,读入转换结果。之后,将其解串并存储在sram中。重复上面的操作,完成所有通道转换。
(2)主状态机
主状态机如图2所示。
如图1 adc接口工作流程
如图2 主状态机
控制逻辑流程如下。
● 指定寄存器地址。
● 通过串行接口发送相应的地址。
● 指定相应寄存器的数据。
● 通过串行接口发送相应寄存器的数据。
● 重复执行前4步,直到所有寄存器被配置完成。
● 指定“直接模式指令”,开始对一个选定的输入通道进行ad转换。
● 读入转换结果,并将其写入sram。
● 重复执行执行上两步,读入指定输入通道的所有转换结果。
● 重复执行前3步,完成所有输入通道的转换。
如表所示为主状态机中每个状态的详细说明。mode_flag="0"表明串行移位的数据为8位宽,它代表寄存器地址及待写入寄存器的数据或直接命令;mode_flag="1"表明串行移位的数据为16位宽,它代表adc转换结果。其中有12位的adc转换数据,3个零位及一个溢出位。
如表 主状态机中每个状态的详细说明
(3)定制主状态机
用户可以通过修改主状态机vhdl代码,使设计适合特定的应用,主要有如下两个方面需要修改。
● 寄存器模式
主状态机会一直保持在寄存器模式,直到所有寄存器被配置完成。用户可以指定哪些寄存器需要配置和写入数据。下面的代码说明如何修改vhdl代码,以完成对addr3寄存器的写操作:
constant wr_addr3_en: booi_jean := true;
-- write/read to control register
constant aaddr3: std_logic_vector(7 downto 0) := '00000011';
--data to be written
constant data_wr_addr3: std_logic_vector(7 downteo 0): ='000001100';
变量wr_addr3_en可以设置为true或false,以使能或禁止对addr3的写操作。如果设计为true,则待写入此寄存器的数据也需要使用常数data _wr_addr3指定。在此例中,将“00000100”写入addr3。这个常数指定read back mode 1(msb先被读回),同时设置cclk分频系数为1。
写寄存器不仅要指定寄存器地址,而且要指定读/写操作及数据字的大小。被写入控制寄存器的控制字包含指定先读msb还是lsb、cclk分频系数、通道的pga增益,以及使能数字i/o,更多特性可以参考adc数据手册。
● 直接模式
一旦adc的所有寄存器被配置完成,adc可以工作在直接模式,此模式允许外部控制器来指定输入通道及读取转换数据。此设计中的vhdl代码允许设计者指定哪个输入通道将会被读取及多少个转换结果将会被读取,下面的代码说明如何对通道1进行8次转换并从通道1读8次转换结果:
在此设计中,多少个模拟量需要转换由写入到sram中的转换结果的数目决定。因此一旦sram的地址计数器达到sram_high,指定数目的转换结果就已经被存储在sram中。通道使能由dm_sng_ln0_en控制,设为true,将允许该通道的转换。常数dm_sng_ln0存储通道ln0的直接命令字。
(4)移位控制逻辑
移位控制逻辑由主状态机初始化,移位状态机用来控制adc串行数据的移位输出和输入,包括写寄存器地址、写寄存器数据和写直接模式指令等。在直接模式转换周期移入转换结果。
移位状态机控制逻辑如图3所示,在go_shift(由主状态机产生)的上升沿移位状态机被激活,mode_flag为8位或16位操作标志位。
移位状态机产生sclk移位时钟,并准备好待发送的数据。在sc0状态(sclk='0')时,存放待发送数据的寄存器被使能;在sci状态(sclk='1')时,数据位被移出到din。
如图3 移位状态机控制逻辑
在直接模式转换周期,移位状态机在sclk的有效边沿读回dout信号线上的转换结果。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
上一篇:CoolRunner-II器件的SHIFT_OUT模块
上一篇:差分放大器实验内容