⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_source.v

📁 采用快速中指滤波算法实现图像的中值滤波
💻 V
字号:
/**********************************************************************************
/模块用途:用于产生数据来测试直方图均衡化模块
/模块功能:产生100行、64列数据,数据范围为1-64(8位)
/          同时产生有效数据标志信号,在数据有效时,为高电平,否则为低电平
/时序描述:若输入时钟信号为50M,数据的时序如下所示:

/mark_cnt:0 1 2 3 ... 31 32 33 34 ... 93  94  95  96  ... 127 0 1 2 3 ... 31 32 33...
/data    :0 0 0 0 ... 0  1  2  3  ... 62  63  64  0   ... 0   0 0 0 0 ... 0  1  2 ...
/data_valuable:__________|-----------|____________________________|---
/
/data_end:于第100行数据最后一个数据结束后的第14个50M周期开始为高电平,此前为低电平
/
/
/
/
/
**********************************************************************************/




module data_source(
    clk50M,
    rstn,
    data,
    data_valuable,
    data_end
    );

input         clk50M,rstn;
output        data_valuable;
output [7:0]  data;
output        data_end;


reg    [7:0]  data;
reg           data_valuable;
reg           data_end;

reg    [6:0]  mark_cnt,row_cnt;

//产生标度信号mark_cnt,其范围为0~127,循环计数。
always@(posedge clk50M or negedge rstn)
  if(!rstn)
    mark_cnt <= 1'b0;
  else if(row_cnt != 'd101)
    mark_cnt <= mark_cnt + 1'b1;
  else
    mark_cnt <= 1'b0;

//产生有效数据data 及有效数据标志信号data_valuable
always@(posedge clk50M or negedge rstn)
begin
  if(!rstn)
    begin
      data_valuable <= 1'b0;
      data <= 1'b0;
    end
  else if(mark_cnt >= 31 && mark_cnt <= 94)
    begin
      data_valuable <= 1'b1;
      data <= data + 1'b1;
    end
  else
    begin
	  data_valuable <= 1'b0;
	  data <= 1'b0;
    end
end
//行计数器row_cnt
always@(posedge clk50M or negedge rstn)
  if(!rstn)
    row_cnt <= 1'b0;
  else
    begin
 	  if(mark_cnt == 127)
        row_cnt <= row_cnt + 1'b1;
      if(row_cnt == 101)
        row_cnt <= 101;
    end

//全部有效数据发送结束标志信号
always@(posedge clk50M or negedge rstn)
  if(!rstn)
     data_end <= 1'b0;
  else if(row_cnt == 101)
     data_end <= 1'b1;

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -