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

📄 line_fifo_control.v

📁 采用快速中指滤波算法实现图像的中值滤波
💻 V
字号:
/*************************************************************************************
/模块功能:产生两个scfifo的读写控制信号
/信号说明:为避免对scfifo写满后继续写入,令其rdreq比wrreq提前一个周期有效
           line2_wrreq,line1_wrreq与有效数据同步;
           line2_rdreq从第二个有效行的前一个周期开始有效;
           line1_rdreq从第三个有效行的前一个周期开始有效;
/存储顺序:在第一有效行期间,line2的写使能有效,将第一行数据写入line2,
                 此时,line2的读使能信号为低,不进行读取,line2被写满;
           在第二有效行到来的前一个周期,line2的读使能有效,开始读取(fifo状态由满
                 变为未满),一个周期之后,line2的写使能有效,开始同时读写过程
           在line2读取的同时,line1的写使能信号有效,开始写入数据,经过第二有效行后,
           line1被写满;
           在第三有效行到来的前一个周期,line1的读使能信号有效,开始读取数据,一个周
                 期后,line1的写使能信号有效,开始同时读写的过程
/时序描述:
/               _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
/时钟信号clk  _| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_|
/              __________  _______________ _ _ _ ____________  _______
/像素数据        D.C.    \/        有   效      数   据      \/  D.C.
/              __________/\_______________ _ _ _ ____________/\_______
/
/                          __________________________________
/data_valuable____________|                                  |_____________
/                      __________  _______________ _ _ _ ____________  _______
/data_delay_out          D.C.    \/        有   效      数   据      \/  D.C.
/                      __________/\_______________ _ _ _ ____________/\_______
 
/

/
/
/
*************************************************************************************/



module line_fifo_control(
    clk,
    rstn,
    data_in,
    data_valuable,
    data_delay_out,
    line2_wrreq,
    line2_rdreq,
    line1_wrreq,
    line1_rdreq,
    row_cnt
    );
 
input  [7:0]   data_in;
input          data_valuable;
input          clk,rstn;


output [7:0]   data_delay_out;
output         line2_wrreq,  line2_rdreq;
output         line1_wrreq,  line1_rdreq;
output [9:0]   row_cnt;


reg    [7:0]   data_delay_out;
reg            line2_wrreq, line1_wrreq;
reg            line2_rdreq, line1_rdreq;

//延时
reg [7:0] data_reg;
reg data_valuable_delay;
always@(posedge clk)
begin
  data_reg <= data_in;
  data_delay_out <= data_reg;
  data_valuable_delay <= data_valuable;
end

//产生行计数器row_cnt
reg[9:0] row_cnt;
always@(posedge data_valuable or negedge rstn)
  if(!rstn)
    row_cnt <= 0;
  else
    row_cnt <= row_cnt + 1'b1;

//产生line2的写使能信号line2_wrreq,产生line1的写使能信号line1_wrreq
always@(posedge clk or negedge rstn)
  if(!rstn)
    begin
      line1_wrreq <= 0;
      line2_wrreq <= 0;
    end
  else
    begin
      line2_wrreq <= data_valuable_delay;
      line1_wrreq <= data_valuable_delay;
    end



//产生line2的读使能信号line2_rdreq,产生line1的读使能信号line1_rdreq
always@(posedge clk or negedge rstn)
  if(!rstn)
    begin
      line2_rdreq <= 1'b0;
    end
  else 
    begin
      if(row_cnt > 1)//从第二行开始有效
        line2_rdreq <= data_valuable;
      else
        line2_rdreq <= 1'b0;
    end

always@(posedge clk or negedge rstn)
  if(!rstn)
    begin
      line1_rdreq <= 1'b0;
    end
  else 
    begin
      if(row_cnt > 1)//从第三行开始有效
        line1_rdreq <= data_valuable;
      else
        line1_rdreq <= 1'b0;
    end

endmodule

⌨️ 快捷键说明

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