设为首页 加入收藏

TOP

基于ZYNQ的OV5640摄像头的sobel算子边缘检测(二)
2023-07-23 13:25:05 】 浏览:168
Tags:基于 ZYNQ OV5640 sobel 边缘检
_n) begin if(rst_n == 0) cam_fifo_data_rd_en <= 0; else if(rd_data_count >= LINE_LENGTH/2)//当cam_fifo里的数据大于400个的时候,就进行读取 cam_fifo_data_rd_en <= 1; else if(rd_data_count <= 2) //当cam_fifo里的数据小于两个的时候,就暂停读取 cam_fifo_data_rd_en <= 0; else cam_fifo_data_rd_en <= cam_fifo_data_rd_en; end always @(posedge m_clk) cam_fifo_data_rd_en_r <= cam_fifo_data_rd_en; //延一拍,作为写入同步fifo的写信号 always@(posedge m_clk or negedge rst_n) begin if(rst_n == 0) m_axis_act <= 0; else if(fifo_data_count0 >= LINE_LENGTH/2 - 1 ) //当同步fifo0的数据有400个的时候就使axi_stream接口活动 m_axis_act <= 1; else if(fifo_data_count1 <= 1 )//当同步fifo1的数据小于1个的时候就使axi_stream接口暂停活动 m_axis_act <= 0; else m_axis_act <= m_axis_act; end always@(posedge m_clk) m_axis_tvalid <= m_axis_act;//延一拍作为tvalid信号与数据同步 always@(posedge m_clk or negedge rst_n) begin//每行数据的最后一个拉高tlast信号 if(rst_n == 0) m_axis_tlast <= 0; else if(out_data_count == LINE_LENGTH - 2 & m_axis_tvalid) m_axis_tlast <= 1; else m_axis_tlast <= 0; end always@(posedge m_clk or negedge rst_n) begin//场计数器,为给出帧同步信号而设置的。 if(rst_n == 0) line_cnt <= 0; else if(line_cnt == LINE_NUM - 1 & out_data_count == LINE_LENGTH - 1) line_cnt <= 0; else if(out_data_count == LINE_LENGTH - 1) line_cnt <= line_cnt + 1'b1; else line_cnt <= line_cnt; end always@(posedge m_clk or negedge rst_n) begin//输出计数器,为给出tlast,切换fifo,给出帧同步信号而设置的。 if(rst_n == 0) out_data_count <= 0; else if(out_data_count == LINE_LENGTH - 1) out_data_count <= 0; else if(m_axis_tvalid & m_axis_tready) out_data_count <= out_data_count + 1'b1; else out_data_count <= out_data_count; end always@(posedge m_clk or negedge rst_n) begin if(rst_n == 0) line_end <= 0; else if(line_cnt == LINE_NUM - 1 & out_data_count == LINE_LENGTH - 1) line_end <= 1; else line_end <= 0; end assign m_axis_tuser = (out_data_count == 0 & m_axis_tvalid & m_axis_tready & line_cnt == 0)? 1:0; //每个帧的第一个数据拉高tuser,也就是帧同步信号 //-------------------------------------------图像灰度算法------------------------------------------------------ assign sum = {cam_fifo_data_out[15:11],3'b0} + {cam_fifo_data_out[10:5],2'b0} + {cam_fifo_data_out[4:0],3'b0}; always@(posedge m_clk or negedge rst_n) begin if(rst_n == 0) gray_r <= 16'd0; else if(cam_fifo_data_rd_en_r) gray_r <= (sum << 6)+(sum << 4)+(sum << 2)+ sum; else gray_r <= 16'd0; end assign gray_8b_o = gray_r[15:8]; always@(posedge m_clk) begin gray_valid <= cam_fifo_data_rd_en_r; end //------------------------------------------同步fifo的数据切换-------------------------------------------------- always@(posedge m_clk or negedge rst_n) begin if(rst_n == 0) fifo_flag <= 0; else if(out_data_count >= LINE_LENGTH - 1) fifo_flag <= 0; else if(out_data_count >= LINE_LENGTH/2 - 1) fifo_flag <= 1; else fifo_flag <= fifo_flag; end assign m_axis_tdata = (fifo_flag) ? fifo_data1 : fifo_data0; //---------------------------------------------------------------------------------------------------------- fifo_generator_1 cam_data_fifo ( .rst(~rst_n), // input wire rst .wr_clk(pclk), // input wire wr_clk .rd_clk(m_clk), // input wire rd_clk .din(cam_data), // input wire [15 : 0] din .wr_en(data_valid), // input wire wr_
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数字分频器设计(偶数分频、奇数.. 下一篇CoaXpress downlink数据解析方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目