AD9826的时序分析及Verliog代码

AD9826的时序分析及Verliog代码

(本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍)

1、AD9826的模式

AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式

(1)CDS模式
狡猾的黑蜘蛛
简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最后在ADCCLK的下降沿输出数据,值得注意的是这里强调了CDSCLK2的下降沿应该出现在ADCCLK数据的上升沿之前

(2)SHA模式
在狡的黑蜘蛛猾
SHA模式和CDS模式的区别就在于,CDSCLK1不采样CCD的参考电平,全程置0;同时数据波形在CDSCLK2的下降沿被采样,然后通过偏置DAC进行修改(即OFFSET管脚来调节),其他的便是和CDS的模式一样的配置了。

(3)不同的通道模式
针对于CDS或SHA模式下的3CH、2CH、1CH这几种模式大致情况都一样主要是在RGB三个通道的开闭

  • 18
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 55
    评论
下面是一个基于 Xilinx FPGA 的 Vivado 开发环境,通过 Verilog HDL 实现对 AD7985 时序逻辑控制的示例代码: ```verilog module ad7985_controller( input wire clk, // 系统时钟 input wire rst, // 系统复位 output wire cs_n, // 片选信号 output wire sclk, // 时钟信号 output wire cnvst, // 启动转换信号 input wire [15:0] din, // 数据输入 output reg [15:0] dout // 数据输出 ); reg [1:0] state; // 状态寄存器 reg [15:0] data; // 数据寄存器 reg [3:0] cnt; // 计数器 parameter IDLE = 2'b00; // 空闲状态 parameter ACQUIRE = 2'b01; // 采集状态 parameter CONVERT = 2'b10; // 转换状态 assign cs_n = state == IDLE ? 1'b1 : 1'b0; // 片选信号 assign sclk = state == IDLE ? 1'b0 : 1'b1; // 时钟信号 always @(posedge clk) begin if (rst) begin state <= IDLE; cnvst <= 1'b0; dout <= 16'b0; data <= 16'b0; cnt <= 4'b0; end else begin case (state) IDLE: begin dout <= data; if (cnvst) begin state <= ACQUIRE; cnt <= 4'b0; sclk <= 1'b0; end end ACQUIRE: begin if (cnt == 4'b0000) begin cnvst <= 1'b1; sclk <= 1'b1; cnt <= cnt + 1; end else if (cnt == 4'b0001) begin cnvst <= 1'b0; sclk <= 1'b0; cnt <= cnt + 1; end else if (cnt == 4'b0010) begin cnvst <= 1'b1; sclk <= 1'b1; cnt <= cnt + 1; end else if (cnt == 4'b0011) begin cnvst <= 1'b0; sclk <= 1'b0; cnt <= cnt + 1; end else if (cnt == 4'b0100) begin cnvst <= 1'b1; sclk <= 1'b1; cnt <= cnt + 1; end else if (cnt == 4'b0101) begin cnvst <= 1'b0; sclk <= 1'b0; cnt <= cnt + 1; end else if (cnt == 4'b0110) begin cnvst <= 1'b1; sclk <= 1'b1; cnt <= cnt + 1; end else if (cnt == 4'b0111) begin cnvst <= 1'b0; sclk <= 1'b0; cnt <= cnt + 1; end else if (cnt == 4'b1000) begin cnvst <= 1'b1; sclk <= 1'b1; cnt <= cnt + 1; end else if (cnt == 4'b1001) begin cnvst <= 1'b0; sclk <= 1'b0; cnt <= cnt + 1; end else begin state <= CONVERT; cnt <= 4'b0; sclk <= 1'b0; end end CONVERT: begin cnvst <= 1'b0; sclk <= 1'b0; state <= IDLE; data <= din; end endcase end end endmodule ``` 上述代码中,我们定义了一个 AD7985 时序逻辑控制模块,包括系统时钟 clk、系统复位 rst、片选信号 cs_n、时钟信号 sclk、启动转换信号 cnvst、数据输入 din 和数据输出 dout。同时,我们还定义了一个状态寄存器 state、一个数据寄存器 data 和一个计数器 cnt。 控制模块的状态分为三种:IDLE(空闲状态)、ACQUIRE(采集状态)和CONVERT(转换状态)。在空闲状态下,片选信号 cs_n 为高电平,时钟信号 sclk 为低电平。当启动转换信号 cnvst 为高电平时,控制模块进入采集状态,此时片选信号 cs_n 为低电平,时钟信号 sclk 为高电平。在采集状态下,控制模块按照 AD7985 的时序要求控制启动转换信号 cnvst 和时钟信号 sclk 的变化,以实现对 AD7985 的采集控制。在转换状态下,控制模块将数据输入 din 存入数据寄存器,并将状态寄存器置为 IDLE,同时输出数据输出 dout。 控制模块的实现采用了 Verilog HDL 语言,通过状态机和计数器的方式实现了对 AD7985 时序逻辑的精确控制。在实际应用中,我们需要根据 AD7985 的具体规格和接口要求进行修改,并添加适当的时序控制逻辑,以实现对 AD7985 的精确控制和数据采集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值