/********************************************** _ _ Cook Darwin __
_ descript: author : Cook.Darwin Version: VERA.0.0 creaded: 2017/2/28 madified: ***********************************************/ `timescale 1ns/1ps `include “define_macro.sv” module video_stream_2_axi_stream #(
`parameter_string MODE = "LINE" //LINE FRAME
)(
video_native_inf.compact_in video_inf, axi_stream_inf.master axis_out
);
logic clock,rst_n;
assign clock = video_inf.pclk; assign rst_n = video_inf.prst_n;
logic stream_en;
generate if(MODE == “FRAME”)begin always@(posedge clock,negedge rst_n)
if(~rst_n) stream_en <= 1'b0; else begin if(video_inf.vs_falling) stream_en <= 1'b1; else if(axis_out.axis_tvalid && axis_out.axis_tready && axis_out.axis_tlast) stream_en <= 1'b0; else stream_en <= stream_en; end
end else begin
always@(posedge clock,negedge rst_n)
if(~rst_n) stream_en <= 1'b0; else begin if(video_inf.hs_falling && video_inf.v_index < video_inf.vactive) stream_en <= 1'b1; else if(axis_out.axis_tvalid && axis_out.axis_tready && axis_out.axis_tlast) stream_en <= 1'b0; else stream_en <= stream_en; end
end endgenerate
always@(posedge clock,negedge rst_n)
if(~rst_n) axis_out.axis_tvalid <= 1'b0; else begin axis_out.axis_tvalid <= stream_en && video_inf.de; end
logic burst_eq_1; always@(posedge clock,negedge rst_n)
if(~rst_n) burst_eq_1 <= 1'b0; else begin if(MODE=="LINE") burst_eq_1 <= video_inf.hactive == 1; else if(MODE=="FRAME") burst_eq_1 <= video_inf.hactive == 1 && video_inf.vactive; else burst_eq_1 <= burst_eq_1; end
always@(posedge clock,negedge rst_n)
if(~rst_n) axis_out.axis_tlast <= 1'b0; else begin if(burst_eq_1) axis_out.axis_tlast <= 1'b1; else begin if(axis_out.axis_tvalid && axis_out.axis_tready && axis_out.axis_tlast) axis_out.axis_tlast <= 1'b0; else if(axis_out.axis_tvalid && axis_out.axis_tready && axis_out.axis_tcnt == (video_inf.hactive-2)) axis_out.axis_tlast <= 1'b1; else axis_out.axis_tlast <= axis_out.axis_tlast; end end
always@(posedge clock,negedge rst_n)
if(~rst_n) axis_out.axis_tdata <= 1'b0; else begin axis_out.axis_tdata <= video_inf.de? video_inf.data : axis_out.axis_tdata; end
endmodule