我正在为Spartan 3E FPGA设计以太网MAC控制器。 IOB已达到109%。我仍然继续生成比特流。然后我遇到了这个错误:
太多的类型" BUFGMUX"发现适合这个设备。 这是什么意思?
(我很确定运行Spartan 3e可以运行以太网,因为Spartan 3e已经有一个以太网精简版MAC。而且,它的引脚比我模块中的引脚多。为什么呢那么有109%的IOB?)
我还尝试评论实例化的mac_transmit_module和mac_receive_module。它成功生成了比特流。我哪里出错了?
答案 0 :(得分:1)
您的设计太大而无法放在目标FPGA上。存在类似IP的事实表明,您的实现效率较低或具有其他IP不具备的功能。对于这个问题,没有简单的,一刀切的解决方案。
我可以建议您将来不仅仅将屏幕截图作为文档包含在内吗?它们很难阅读,大部分图像都无关紧要。如果您希望我们看到特定的错误消息,请复制粘贴到您的问题中。
答案 1 :(得分:1)
首先,您使用232个IOB中的255个。您选择了xs3s500e-4fg323,它实际上只有232个用户IO,其中56个仅用于输入。也许你选择了错误的合成部分?
如果您相对确定选择了正确的部件,请检查“IOB属性”报告ISE。在那里,您将获得所有使用过的IOB的列表。如果这不起作用(因为可能在生成此错误之前发生错误),您可以随时检查UCF文件中的布局规划工具,以确定某些LOC是否完全错误。只需要你的UCF和平面布置器就可以在虚拟设计上做到这一点。
其次,BUFGMUX消息告诉您一般使用太多的全局时钟缓冲区(或者实际上太多的多路复用时钟,不太可能)。当设计具有许多时钟时,除了BUFG原语之外,ISE还必须使用BUFGMUX原语来路由所有时钟。现在,如果你超过了设计中BUFGMUX / BUFG的数量,你就会收到这个错误。
因此,这两个错误都指向您的设计太大或部件选择错误。
答案 2 :(得分:0)
BUFGMUX用于缓冲用作时钟的信号。
在大多数设计中,特别是作为初学者,你应该只有一个时钟。并且您的所有进程应该采用相同的形式,时钟信号位于灵敏度列表中,并且其中包含if rising_edge(clock) then
行。这称为同步设计,如果您不这样做,当您在真实芯片中尝试代码时,可能会出现各种各样的错误结果。在你有足够的经验之前不要这样做。你可以告诉你什么时候有足够的经验,因为当你想到使用另一个时钟信号时,你会想到“我肯定能找到一种方法来坚持一个时钟信号”:)
听起来像你有if rising_edge(all sorts of different signals in different processes)
- 这使得这些工具产生了许多它认为是时钟的信号,然后将BUFGMUX挂掉它们中的每一个,不仅耗尽了时钟路由资源很快,但你会得到不可预测的行为。