AXIS 视频缩放代码

`timescale 1ns / 1ps
module vx_img_resize_axis#(
parameter DATA_WIDTH = 64
)(
input wire axis_aclk,
input wire axis_aresetn,
input wire [7:0] zoom_coef, //0表示不做缩放,1表示缩放2倍,2表示缩放4倍,3表示缩放8倍 4表示缩放16倍
input wire s00_axis_tuser,
input wire [DATA_WIDTH-1 : 0] s00_axis_tdata,
input wire [7 : 0] s00_axis_tstrb,
input wire s00_axis_tlast,
input wire s00_axis_tvalid,
output reg s00_axis_tready,

output reg m00_axis_tuser,
output reg m00_axis_tvalid,
output reg [DATA_WIDTH-1 : 0] m00_axis_tdata,
output reg [7 : 0] m00_axis_tstrb,
output reg m00_axis_tlast,
input wire m00_axis_tready  ,

output reg [31:0] line_data_cnt_r,
output reg [31:0] line_cnt_r


);

always @(posedge axis_aclk or negedge axis_aresetn) begin
    if (~axis_aresetn) begin
        line_data_cnt_r <= 'b0;
        line_cnt_r <= 'b0;
    end else begin
       // line_data_cnt_r <= (s00_axis_tuser||s00_axis_tlast) ? 'b0 : s00_axis_tvalid ? (line_data_cnt_r + 1'b1) : line_data_cnt_r;
       // line_cnt_r <= s00_axis_tuser ? 'b0 : s00_axis_tlast ? (line_cnt_r + 1'b1) : line_cnt_r;              
	    line_data_cnt_r <= ( ( s00_axis_tuser && s00_axis_tvalid && m00_axis_tready ) || ( s00_axis_tlast && s00_axis_tvalid && m00_axis_tready  ))   ? 'b0 : ( s00_axis_tvalid  && m00_axis_tready )  ? (line_data_cnt_r + 1'b1) : line_data_cnt_r;
        line_cnt_r <= ( s00_axis_tuser && s00_axis_tvalid && m00_axis_tready )  ? 'b0 : ( s00_axis_tlast && s00_axis_tvalid && m00_axis_tready ) ? (line_cnt_r + 1'b1) : line_cnt_r;              
    end
end

reg s00_axis_tvalid_d1;
reg [63:0] s00_axis_tdata_d1;
reg s00_axis_tstrb_d1;
reg s00_axis_tlast_d1;
reg s00_axis_tuser_d1;

reg m00_axis_tready_d1;

//输出计算结果
always @(posedge axis_aclk or negedge axis_aresetn) begin
    if (~axis_aresetn) begin
        s00_axis_tready <= 'b0;
        m00_axis_tuser <= 'b0;
        m00_axis_tvalid <= 'b0;
        m00_axis_tdata <= 'b0;
        m00_axis_tstrb <= 'b0;
        m00_axis_tlast <= 'b0;
    end else begin
        m00_axis_tready_d1 <= m00_axis_tready;
        s00_axis_tuser_d1 <= s00_axis_tuser;

        s00_axis_tready <= m00_axis_tready_d1;
        m00_axis_tuser <= s00_axis_tuser_d1;
		
		s00_axis_tvalid_d1	<=s00_axis_tvalid;
		s00_axis_tdata_d1	<=s00_axis_tdata	;	
		s00_axis_tstrb_d1	<=s00_axis_tstrb	;	
		s00_axis_tlast_d1	<=s00_axis_tlast	;   

        case(zoom_coef)
        8'd0: begin
            m00_axis_tvalid <=s00_axis_tvalid_d1;
            m00_axis_tdata <= s00_axis_tdata_d1;
            m00_axis_tstrb <= s00_axis_tstrb_d1;
            m00_axis_tlast <= s00_axis_tlast_d1;
         end
        8'd1: begin				
			if ( line_cnt_r[0]== 1'b0) begin 
				m00_axis_tlast <= s00_axis_tlast_d1;
                if(s00_axis_tvalid_d1 && ( line_data_cnt_r[0] == 'b0) ) begin
                    m00_axis_tvalid     <= s00_axis_tvalid_d1;
                    m00_axis_tdata      <= s00_axis_tdata_d1;
                    m00_axis_tstrb      <= s00_axis_tstrb_d1;
                end else begin
                    m00_axis_tvalid <= 1'b0;
                    m00_axis_tdata <= 'b0;
                    m00_axis_tstrb <= 'b0;     					
                end					
			end else begin 
				m00_axis_tlast <= 1'b0;
                m00_axis_tvalid <= 1'b0;
                m00_axis_tdata <= 'b0;
                m00_axis_tstrb <= 'b0;     					
			end 
          end
        8'd2: begin				
			if ( line_cnt_r[1:0]== 2'b0) begin 
				m00_axis_tlast <= s00_axis_tlast_d1;
                if(s00_axis_tvalid_d1 && ( line_data_cnt_r[1:0] == 2'b0) ) begin
                    m00_axis_tvalid     <= s00_axis_tvalid_d1;
                    m00_axis_tdata      <= s00_axis_tdata_d1;
                    m00_axis_tstrb      <= s00_axis_tstrb_d1;
                end else begin
                    m00_axis_tvalid <= 1'b0;
                    m00_axis_tdata <= 'b0;
                    m00_axis_tstrb <= 'b0;     					
                end					
			end else begin 
				m00_axis_tlast <= 1'b0;
                m00_axis_tvalid <= 1'b0;
                m00_axis_tdata <= 'b0;
                m00_axis_tstrb <= 'b0;     					
			end 
          end			  
        8'd3: begin				
			if ( line_cnt_r[2:0]== 3'b0) begin 
				m00_axis_tlast <= s00_axis_tlast_d1;
                if(s00_axis_tvalid_d1 && ( line_data_cnt_r[2:0] == 3'b0) ) begin
                    m00_axis_tvalid     <= s00_axis_tvalid_d1;
                    m00_axis_tdata      <= s00_axis_tdata_d1;
                    m00_axis_tstrb      <= s00_axis_tstrb_d1;
                end else begin
                    m00_axis_tvalid <= 1'b0;
                    m00_axis_tdata <= 'b0;
                    m00_axis_tstrb <= 'b0;     					
                end					
			end else begin 
				m00_axis_tlast <= 1'b0;
                m00_axis_tvalid <= 1'b0;
                m00_axis_tdata <= 'b0;
                m00_axis_tstrb <= 'b0;     					
			end 
          end				  
        8'd4: begin				
			if ( line_cnt_r[3:0]== 4'b0) begin 
				m00_axis_tlast <= s00_axis_tlast_d1;
                if(s00_axis_tvalid_d1 && ( line_data_cnt_r[3:0] == 4'b0) ) begin
                    m00_axis_tvalid     <= s00_axis_tvalid_d1;
                    m00_axis_tdata      <= s00_axis_tdata_d1;
                    m00_axis_tstrb      <= s00_axis_tstrb_d1;
                end else begin
                    m00_axis_tvalid <= 1'b0;
                    m00_axis_tdata <= 'b0;
                    m00_axis_tstrb <= 'b0;     					
                end					
			end else begin 
				m00_axis_tlast <= 1'b0;
                m00_axis_tvalid <= 1'b0;
                m00_axis_tdata <= 'b0;
                m00_axis_tstrb <= 'b0;     					
			end 
          end		
		default :begin 
            m00_axis_tvalid <=s00_axis_tvalid_d1;
            m00_axis_tdata <= s00_axis_tdata_d1;
            m00_axis_tstrb <= s00_axis_tstrb_d1;
            m00_axis_tlast <= s00_axis_tlast_d1;						
		end 
		
    endcase
end

end

endmodule

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值