今天在查找一些case的max density降不下去的原因的过程中,发现了3个问题:
1. 在判断坐标相等的时候,一些cell的double类型的坐标只有最后一两位不相等,我怀疑在计算坐标的时候有一些操作涉及到float类型,产生了误差。
解决方法:先将坐标都转换成float类型,再判断是否相等。
2. 当坐标重叠的cell个数达到8个以上时,我才会做随机扰动。然而一个bin最多只能放4个SLICE,也就是说当SLICE重叠数量达到4个以上时,就该做随机扰动。
解决方法:根据重叠cell的类型选择做随机扰动的重叠cell数量的下限。
3. 在计算density的时候,一个塞满的SLICE(0.5*0.5)会同时等效成2个LUT(0.35*0.35,实际计算时当成一个0.35*0.7的LUT处理)和2个FF(0.35*0.35);在计算梯度的时候,当LUT的梯度作用到一个塞满的SLICE上时,SLICE当成2个LUT(0.25*0.5)来处理。这里有一个问题,虽然2个LUT在SLICE中的面积是一半,但是对LUT来说,2个LUT的面积是0.35*0.7(相当于一个SLICE的面积),和density等效不匹配,会导致LUT梯度对SLICE的推动力减小。
解决方法:在计算梯度的时候,当LUT的梯度作用到一个塞满的SLICE上时,SLICE当成2个LUT(0.35*0.7)来处理。SLICE梯度作用到LUT/FF上同理。
仍有case的max density出现异常,正在debug。