热度 4
2024-5-19 10:42
478 次阅读|
0 个评论
ALTERA Cyclone 10器件的使用-5:模块复用在导入时遇到的问题 概述 复用模块导入时,该复用模块的输入端口在设计者侧被接入到物理I/O,而在使用者侧导入QDB文件后,FIT时报错。 导入QDB后布局布线报错 使用者一侧导入设计者一侧传导来的QDB文件,然后进行工程全编译,在开始Fit不久后出现了如图1所示的错误提示。出错的是子模块中的一个16-bit的数据总线,从错误信息可以看出,编译器认为该总线在之前编译的时候是连接到器件I/O引脚上的,导入后该总线用于内部逻辑互联通讯,所以给出了冲突报错提示。 图1:使用者侧导入QDB后编译时遇到的错误 上述错误提取一条打印如下: Error ( 18568 ): Output port "SEP_2BLK_CORE_|HostDataOut(0)~pad" in partition "SEP_2BLK_CORE_" was implemented as a device I/O in an earlier compile, but is now being used to drive other logic. Output ports that have previously be implemented as device I/O may only be used as device I/O in future compiles. 设计者侧对分区端口的处理 上述报错信息在设计者一侧也出现类似情况,Quartus在布局布线的时候,对于这个输出的数据总线要求将其接入到器件的I/O引脚,否则编译不通过,错误信息如图2所示。所以设计者一侧就将该数据总线连接到器件I/O引脚上,然后使用者这一侧其它逻辑模块会使用到该数据总线,所以在使用者一侧来说,该数据总线仅为内部逻辑模块内部连接的总线,由此在使用者一侧Quartus给出如图1所示的错误信息。 图2:同样的数据总线在设计者一侧遇到的错误 问题分析与解决 根据很久之前ALTERA对于增量编译的培训,三态端口或总线不能划分为分区输入输出端口,必须(must be)接入顶层I/O引脚,图2所示错误,就是这样的原因。上述出问题的数据总线确实是与其它模块中的三态总线相关,不过在复用模块设计者一侧,该总线分离为独立的输入和输出总线,已经不属于“三态”总线了,但是为何还是会出现上述让双方矛盾的问题呢? 通过检查代码,发现模块复用修改的时候是基于之前使用三态总线的源文件,所以该总线输出方向保留了三态描述,即: HostDataOut <= ( others 'Z' ); 只需将上述代码描述修改为如下所示即可。 HostDataOut <= ( others '0' );