一、系统结构
分为四个模块。外部控制单元,SWR_fifo,AXI_fifo,SRIO IP核。之间的主要连线关系如图所示。
二、外部控制单元。
此单元用来产生需要发送的数据data以及写使能信号wen。主要产生的过程比较简单。这里发送720*576byte的数据,由于SRIO是64bit的数据 因此,将数据进行组合发送,共发送64bit的数据个数为 720*576/8 = 51480
always @(posedge sys_clk)
begin
if (~sys_rstn)
begin
k7_srio_dma_wren <= 1'b0;
cnt_data <= 16'd0;
end
else
begin
if ((cnt_40ms >= 24'd1) && (cnt_40ms <= 24'd51840))
begin // 720x576=414720 byte
k7_srio_dma_wren <= 1'b1;
cnt_data <= cnt_data + 1; //发送的数据++
end
else
begin
k7_srio_dma_wren <= 1'b0;
cnt_data <= 16'd0;
end
end
end
assign k7_srio_dma_data = {4{cnt_data[7:0], cnt_data[15:8]}}; //64bit SRIO要发送的数据
三、SWR_fifo
用于缓存输入的数据,在状态机进入SWRITE之后,读取出数据。
fwft_fifo_w64 swr_fifo
(
.rst (inner_log_rst ),
.wr_clk (user_dma_clk ),
.wr_en (user_dma_en ),
.din (user_dma_data ),
.prog_full_thresh (9'd470 ),
.prog_full (user_dma_full ),
.full ( ),
.rd_clk (log_clk ),
.rd_en (dma_read_en ), //swr fifo读使能
.dout (dma_data_out ), //swr fifo读数据
.empty (user_dma_emtpy),
.prog_empty_thresh (9'd29 ),
.prog_empty (dma_fifo_empty),
.rd_data_count ( )
);
四、AXI_fifo
SWR_fifo输出的数据dma_data_out在传输过程中赋值给ireq_tdata。ireq_tvalid, ireq_tdata, ireq_tlast再组合成64bit的数据axi_fifo_din输入fifo
assign axi_fifo_din = {ireq_tvalid, ireq_tdata, ireq_tlast}; //axi fifo输入数据 ireq_tdata位主要部分 是将要发送的数据
// ================================== 发送数据的fifo