ddaq_read_ad调试_20251125

F29_CZ11_7030字卡数据采集传输

根据上周讨论的内容,调整了ad采集数据编码时的逻辑,现在编码状态机状态跳转不需要ad_en信号控制,而是直接根据采集模块中的信号ad_cap_en控制。该信号表示采集模块已经完成一次采样点的采样,并可以读取采集模块输出的采集数据。

调整了数据采集与编码的代码,之后进行测试,可以实现采集数据通过gt高速收发器,从子卡传输到主卡的任务。

ddaq_read_ad程序测试

该程序是杰哥根据之前DDAQ PL端的相关程序修改的,将旧程序的假数据源换成了ad7606的数据采集模块。

上板子测试程序的ad7606数据采集功能,抓取采集的数据以及相关控制输出的信号,发现采集的数据里面,并没有数据到来,各个通道数据均保持16'hffff,且相关信号也持续处于低电平。

进行仿真测试。抓取ad7606采集数据的读取相关信号,相关模块程序如下:

//SPI采样
reg [7 : 0] nbits;
wire ad_cap_en_r1 = (nbits==8'd64);
reg  ad_cap_en_r2 = 1'b0;
assign ad_cap_en = ({ad_cap_en_r1,ad_cap_en_r2}==2'b10);

always@(posedge ad_clk_i) begin
    ad_cap_en_r2 <= ad_cap_en_r1;
end

wire cap_en  = (!ad_cs_o)&&clk_en1&&(nbits<8'd64);
//read spi adc data
always@(posedge ad_clk_i) begin
    if(ad_rst_o) begin
        ad_out_a <= 64'd0;
        ad_out_b <= 64'd0;
        nbits    <= 8'd0;
    end 
    else if(ad_cs_o)begin     
        nbits   <= 8'd0;                       
    end   
    else if(cap_en)begin//read data at sclk falling edge
        nbits    <= nbits + 1'b1; 
        ad_out_a <= {ad_out_a[62:0],ad_out_a_i};
        ad_out_b <= {ad_out_b[62:0],ad_out_b_i};
    end                                                                                                                                    
end

ad7606的采集数据,通过ad_out_a_i、ad_out_b_i,逐位传输至对应的ad_out中。由于采集4通道16位数据,因此总共需要进行4*16次移位操作才能实现数据的完整移入。程序中使用nbits作为移位计数器,通过相关逻辑控制移位使能信号cap_en,从而实现将采集数据完整存入对应ad_out中。

完成本次采样的采集数据缓存后,相关的ad_cap_en信号会拉高,提示ad_out信号可以进行读取。

因此相关信号变化逻辑应该为,在cap_en高电平时,持续将ad_out_i的当前值移入ad_out低位,直到移入64位,nbits = 8'd64,结束移位操作,ad_out保持当前值,同时拉高ad_cap_en信号,外部通过该信号读取采集数据。

相关模块仿真测试发现,ad_cap_en信号始终为低电平,原因是nbits一直没有到达8'd64,便复位为0。在程序中,nbits复位受ad_cs_o控制,即ad_cs_o没有提供足够的高电平即被拉高。

程序中,ad_cs_o = ~((AD_S == 2'd3)&&ad_busy_i),其中AD_S为采集卡工作状态机,ad_busy_i信号为采集卡输入的信号,高电平表示当前采集卡正在通过ad_out_i将采集数据逐位输出。每次进行移位操作需要60ns,因此完整进行64位移位操作,需要64*60 = 3840ns。再阅读仿真文件内的相关信息,ad_busy_i相关信号只提供了2000ns的高电平时间,因此仿真操作中,并没有提供足够的时间输出采集数据。对照米联客例程,提供的高电平时间为4100ns,因此可以针对进行修改。

目前测试的内容还只能说明仿真测试文件编写逻辑存在问题,还需要完成修改后,再继续阅读仿真文件和程序逻辑,检查无采集数据的原因究竟是程序原因,还是测试方法错误。另外,由于用作上位机的电脑主机没办法开机,还需要等修好后再继续测试程序能否将数据发送到上位机。


本文章使用limfx的vscode插件快速发布