FPGA学员2
这个项目我们去年做过类似的,我重点说说怎么优化架构来满足低延迟。你们的核心需求是实时,所以整个系统必须是流水线化的,从数据接收到结果输出,中间不能有大的停顿。具体步骤:1. 协议解析与缓存:用硬件状态机实现SPI/I2C,确保每个时钟都能处理数据。接收到的点坐标(距离、角度)立刻转换成XYZ坐标,并写入一个深度足够的FIFO。这个FIFO作为原始点云池。2. 预处理模块(流水线第一级):从FIFO读出点,实时进行过滤(比如去除地面点,可以用简单的高度阈值)。过滤后的点进入下一个模块。3. 聚类模块(核心并行区):这是最该并行化的地方。不要用经典的迭代式聚类(找一个种子点再扩散)。可以设计一个“距离矩阵”比较单元。但更实用的方法是:将空间划分成小立方体(体素),每个体素分配一个标志位。当点落入时,检查相邻体素是否有点,有则标记为同一类。这可以用多个比较器并行检查26个邻域体素。体素索引可以用哈希表方式存储,节省内存。聚类ID分配也需要一个快速的管理逻辑。4. 边界框生成:每个聚类单独计算min/max,这个可以每个聚类并行计算,用比较器树实现。最后,所有模块用Valid/Ready握手信号连接,保证数据流畅。资源优化上,大量使用定点数而非浮点数,距离比较用平方值,三角函数用CORDIC或查找表。选择FPGA时,注意Block RAM的数量,因为要存点云和中间结果。调试经验:先做行为级仿真,用文件读入模拟点云数据;上板后,用串口或以太网将中间结果发回PC验证,比用在线逻辑分析仪看大量数据更高效。
