ALTERA Cyclone 10器件的使用-4:模块复用及当前使用所遇到的问题
概述
之前学习了基于Arria10的模块复用教程,并依据该教程在基于Cyclone10GX的测试板上将之前的项目更改为单核模块,并进行了导出和导入操作。通过上述过程,模块复用得到验证,可以应用于我们的项目。本文记录在此过程中遇到的一些问题,作为最近一段时间设计于测试的总结。
设计输入
一直以来笔者习惯于ALTERA的原理图输入方式,至少在顶层均采用模块输入,这样有利于本人对应整个工程的掌控。自从转入Quartus Prime Pro以后,发现QPP无法进行原理图的操作,但是还是可以对以前的原理图文件进行识别,而且能够对其进行编译。
再次之前我们的QPP版本升级到22.4,不过团队中合作伙伴在开发Cyclone10GX使用其PLL于Tranceiver模块的时候遇到问题,在升级到23.4的时候,问题解决,所以团队中不同的人使用了不同的版本。这次在使用模块复用功能后,通过之前发布的教程我们知道,双方需要统一器件、统一Quartus软件版本,否则无法完成QDB文件的导入。
而在升级到QPP23.4后发现Intel进一步对原理图使用进行了限制,这个版本是彻底限死的原理图,因为QPP23.4根本不支持识别原理图,Quartus在编译的时候,如果发现原理图,都会出现如图1所示的错误。
图1:Quartus编译遇到原理图输入时给出的错误提示
QDB文件导出问题
笔者作为单核开发者,之前使用QPP22.4的时候,导出QDB文件时可以选择导出综合后网表文件,也可以选择导出最终网表文件。更新到QPP23.4后,发现选择导出综合后网表时会导致Quartus软件莫名其妙停止操作,并弹出图2所示的错误提示窗口。
图2:QPP23.4导出综合后网表文件时遇到的问题
JTAG识别Cyclone 10GX器件问题
图3:支持低压JTAG口下载电缆
2.解决问题1后,JTAG自动探测的时候偶发识别C10GX器件为UNKNOWN(如图4所示),此时似乎能下载程序,但是无法进行SignalTap调试。
图4:遇到探测到UNKNOWN器件问题
经过排查,上述UNKNOWN事件,一种情况是使用了电脑上低版本Quartus的下载软件,另一种情况是电脑里的JTAGSever指定的可执行路径为低版本,图5为正确的JTAGSever可执行路径指定,即指定为QPP23.4版本。
图5:电脑中有多版本Quartus安装时,确认JTAG Sever可执行路径
延时线锁定问题
延时线与寄存器锁定在同一个ALM的时候,Fit中的Place出现下述错误,如图6所示。
图6:Quartus在place过程当中给出的错误信息
上述第一条错误信息,详列如下:
Error(170208): Cannot place 4 nodes into a single ALM
Info(170017): Cannot place nodes in a single ALM -- the ALM would be illegal because ALM pins can not be routed
Info(170072): List of 4 nodes in the ALM
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|mycarry_in|cout"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102 came from <none>
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[1].mycarry|s"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102 came from <none>
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[1].myffa|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 4 came from User Location Constraints
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[1].myffb|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 5 came from User Location Constraints
上述第二条错误信息,详列如下:
Error(170208): Cannot place 6 nodes into a single ALM
Info(170017): Cannot place nodes in a single ALM -- the ALM would be illegal because ALM pins can not be routed
Info(170072): List of 6 nodes in the ALM
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[2].mycarry|s"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102 came from <none>
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[2].myffa|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 7 came from User Location Constraints
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[2].myffb|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 8 came from User Location Constraints
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[3].mycarry|s"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102 came from <none>
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[3].myffa|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 10 came from User Location Constraints
Info(170000): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen[3].myffb|myff"
Info(170031): LE location constraint: Region lower-left corner: X25_Y102; Region upper-right corner: X25_Y102; Sublocation: 11 came from User Location Constraints
经过验证,出现上述锁定报错,是因为单延迟线使用了双寄存器阵列锁存,如果单寄存器阵列锁存就没问题。但是在建立这个工程之前,一个简单测试工程已经验证过了可以使用双寄存器阵列锁存延时线的TAP输出。为何现在出现上述错误信息呢?
经过回头查看原来工程,首先原来测试工程是QPP22.4版本建立,当前工程是QPP23.4,是否版本原因?经过分析,应该不是。随后在QPP22.4原始测试工程上做了一个简单测试,如下图所示,之前测试工程中将2选1选择器的选择型号固定为“低”,当前工程SEL端口是可控的,如图7右侧所示,修改测试工程如图7右侧所示,那么编译原测试工程后,会出现一样的报错问题。
图7:TDC输入HIT经过2选1的MUX模块
备注1:QDB导出问题解决方法
图2所示问题,笔者在Intel可编程论坛进行了提交,迅速得到了回应,如图8所示。根据他提供的方法,确实将此问题解决了。
图8:Intel论坛对QPP23.4导出综合网表QDB出现问题的解决方法
备注2:模块复用下逻辑约束转移
所谓逻辑约束,在这里特指TDL延迟线的物理位置约束。在项目设计时使用逻辑模块复用功能,那么设计者一侧施加的物理位置约束,是否能够同样导出并传递给使用者一侧呢?事实验证,这是可以的,如图9、图10所示。
图9:设计者一侧6通道TDL位置进行了约束
图10:在使用者一侧导入后,6通道TDL物理位置经过锁定后未发生变化
作者: coyoo, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1010859.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论