FPGA驱动adc128s052的几个问题
FPGA驱动adc128s052的若干细节问题
usbblaster最好是直接与电脑USB口衔接, 运用拓宽坞会呈现古怪驱动问题.
adc数据手册阐明
附上adc128s052时序手册
ADC芯片cs引脚持续拉低,则每次采完16bit后持续新的16bit
留意 : adc128s052数据手册信号针对于芯片自身,而非外部接口,即adc芯片DIN芯片引脚需求外接控制板输出引脚, DOUT引脚接控制板din引脚,adc芯片时序也仅针对芯片作业自身!!!
规划原理图
因为之前遗留问题, 故特规划次板用于adc验证, 图中可知, IN0与IN7均为地电平, 因而通道数据为16'h0000
ADC收集数据通道数据通道不对齐
signaltap 波形抓取图画
此为通道数据与通道不对齐状况
依据测验板规划结构, 通道0与通道7接gnd, 因而adc采纳数据为零. 可是在代码编写过程中, adc收集数据与通道数据产生不一致
代码剖析
原规划代码如下
assign done = (cnt == CNT_MAX) ? 1'b1 : 1'b0;
// done为第16个上升沿时钟
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
data <= 16'h5a5a;
cnt_channel <= 'd0;
end else if(done) begin
data <= t_data;
cnt_channel <= cnt_channel + 1'b1;
end else begin
data <= data;
cnt_channel <= cnt_channel;
end
end
在代码中, 当完结信号来暂时, 将数据更新到data之中, 在此刻通道数也进行加1, 正是因为这个操作导致了通道数与通道数据不对齐.即数据更新与通道更新同步进行,可是此刻的数据是上一个通道的数据,例 : 当通道0数据收集完后, 数据更新到寄存器, 可是此刻,通道数却变成了1.
通道数据与通道不对齐批改
既然是因为数据与通道同步更新导致不对齐问题, 那么就运用adc时序中,DIN在前俩bit不必赋值来进行修正 : 现在将通道数自加的操作向后延时, 代码如下
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
channel_d <= 2'd0;
else
channel_d <= {channel_d[0], done};
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
cnt_channel <= 'd0;
else if(channel_d[1])
cnt_channel <= cnt_channel + 1'b1;
else
cnt_channel <= cnt_channel;
end
先将done信号进行二级打拍处理, 运用延时标志信号进行通道数自加的规范,以此完结了不对齐问题
现在只需求在done信号降临的时分进行数据读取即可得到正确的通道数以及对那个的通道数据
代码规划部分
全体思路仍是运用计数器驱动时钟信号, 剩余的便是依据芯片时序图进行编写代码.
code url : click here.