数字系统初学者
重点规划好数据流和存储层次。摄像头数据流是源源不断的,你的处理流水线必须跟得上输入速率(比如PCLK)。设计时,先确定摄像头接口(如DVP或MIPI)的像素时钟频率。然后,在FPGA内部用这个时钟(或倍频后的时钟)作为处理流水线的驱动。每一级流水线模块之间,用FIFO(由Block RAM实现)缓冲。这样,即使某一级处理偶尔需要多个周期,也不会阻塞前面。对于边缘检测和中线拟合这类需要上下行数据的操作,提前用行缓冲(Line Buffer)缓存前几行图像。通常缓存2-3行就够用Sobel等算子。行缓冲也用Block RAM实现,深度就是图像宽度。整个架构就像一条高速公路,数据是车辆,一路不停车通过各个收费站(处理单元),最终到达出口(结果输出)。只要收费站不堵车,整体延迟就只是车辆通过整条路的行驶时间,非常短。注意:控制逻辑要简单,避免复杂分支;片上Block RAM资源是有限的,合理分配;最终给MCU的参数可以用一个小的FIFO缓冲,避免MCU读取慢而阻塞FPGA。
