1、先看下BD设计文件如下图,本设计的技巧就是AXI4-Slave协议的应用,可以看到箭头所指的3个信号。
2、当上位机发起的取命令后,实际上数据并不会里面传输到上位机软件的,必须等到,pkg_rdy为1数据才会通过AXI4-Slave总线搬运到上位机软件。那么 assign pkg_rdy = wr_data_count[11];说明pkg_rdy 和FIFO计数器的wr_data_count[11]是有关系的,这里写通道是64bit存放了4个ADC的数据,你可以计算下,当2^11=次方2048,代表最大的采样深度是2K.
3、ad7606_ctrl 就是AD7606采样代码负责采样并把数据写入FIFO,下面再贴出接口代码方便以上解释
ad7606_ctrl ad7606_ctrl_inst
(
.clk_i (Clk50m),
.reset_i (!Rstn),
.ad_data (ad_data),
.ad_busy (ad_busy),
.first_data (first_data),
.ad_os (ad_os),
.ad_cs (ad_cs),
.ad_rd (ad_rd),
.ad_reset (ad_reset),
.ad_convsta (ad_convsta),
.ad_convstb (ad_convstb),
.ad_range (ad_range),
.ad_ch1_o (ad_ch1),
.ad_ch2_o (ad_ch2),
.ad_ch3_o (ad_ch3),
.ad_ch4_o (ad_ch4),
.ad_ch5_o (),
.ad_ch6_o (),
.ad_ch7_o (),
.ad_ch8_o (),
.ad_data_valid_o (ad_data_valid)
);
assign pkg_rdy = wr_data_count[11];
fifo_generator_0 fifo_daq7606 (
.wr_clk(Clk50m), // input wire wr_clk
.wr_rst(!Rstn), // input wire wr_rst
.rd_clk(axi_aclk), // input wire rd_clk
.rd_rst(!Rstn), // input wire rd_rst
.din({ad_ch4,ad_ch3,ad_ch1,ad_ch1}), // input wire [63 : 0] din
.wr_en(ad_data_valid), // input wire wr_en
.rd_en(pkg_rd_en), // input wire rd_en
.dout(pkg_data), // output wire [63 : 0] dout
.wr_data_count(wr_data_count) // output wire [11 : 0] wr_data_count
);
|