这个问题应该从CycloneV时代就开始存在,主要是因为FPGA逻辑资源中LAB模块的位置定义的XY坐标对应的资源有差异。LAB资源的这种差异体现在纵向坐标,即X列。我们在Assignment Editor里查找节点的时候,如图1所示 图1:在AE中进行Location约束的时候查找约束节点 此时在图1所示的动作中,弹出查找约束的定位节点时,回发现在“Element”中可以找到很多资源,这里我们只关心LAB有关的,这时候LAB相关的资源有两种,一种时LAB combinational cell,另一种测试如图1所示的MLAB combinational cell。点开X coordinate可以发现,不同列对应的逻辑资源是不一样的,但是某一列整列的LAB资源类型是一致的。所以在使用TCL对位置进行约束的时候,如果忽略了这种差异,就很可能会造成位置约束在Fit的时候报错。如果缺乏上述知识点,在出现报错的时候,往往疑惑Quartus为何有的时候报错,有点时候又正常。 所以正常的做法是,先确认被约束节点被约束位置的资源类型,当资源为MALB combinational cell时,正确约束代码为: set_location_assignment MLABCELL_X84_Y49_N0 -to "inst1|u_TDL_CC_Top|u_CarryChainInC10GX|gen .mycarry|s" 当资源为LAB combinational cell时,正确约束代码为: set_location_assignment LABCELL_X84_Y49_N0 -to "inst1|u_TDL_CC_Top|u_CarryChainInC10GX|gen .mycarry|s"