1、查找表定义
在计算机科学中,查找表是用简单的查找工作代替计算的数组或者是associative array的数据结构。由于从内存中提取数值,要比复杂的简单计算速度快很多,所以可以提升计算速度。
例如计算三角函数时,每次计算的正弦值会变得越来越复杂,为了避免这种情况,在程序开始前先将各个角度的正弦值存储到内存中,在后面程序中用到正弦值的时候,使用查找表从内存中提取临近的各个角度的正弦值。由于查找表的高效率与方便性,他在实时要求比较高的嵌入式系统中得到广泛应用。在FPGA中,主要有两种情况会要到此查找表:一种是逻辑时序要求非常高的,使用其他计算方式不能满足实时的要求;另一种是计算复杂度非常高的,需要消耗相当一部分逻辑资源,而查找表只需要建立一块存储器,这可以使用FPGA的片内存储资源来进行构建,仅仅消耗一部分逻辑资源。
2、查找表的构建
使用查找表的第一步是构建输入表。构建输入表首先是得到输入函数的的有效定义域,其次将输入的定义域进行等分(需要根据项目情况考虑步长,在计算精度和表的大小之间做一个最佳权衡),最后还要考虑数据格式的问题,待求函数通常是实数表示,在计算时要将其转换为整形,但是这个过程会带来误差。
查找表在特定值下精度有效,但是随着输入值宽度的增加,表的尺寸呈现指数倍的增长,实用的查找表尺寸需要减少查找精度,一个简单的方法就是简单的删除最低位,不需要对数据进行四舍五入,因为表的内容可以根据保留为作用域中函数的适当值设置获得最好的结果。
3、查找表的使用
查找函数可以通过MATLAB或者VC等软件来实现,对于Altera的器件可以使用生成的mif或hex格式的文件实现。
参考资料:基于FPGA的数字图像处理以及应用