2

在这里提到我之前的问题,我一直在利用三态与公共总线一起工作。我似乎仍然有一些实施问题。

三态使用这种类型的代码:

分配 io [width-1:0] = (re)?rd_out [width-1:0]:{width{1'bz}};

合成和翻译进展顺利。没有我没想到的警告或错误(我期待一些,因为这只是一次试运行,大多数组件没有做任何事情,因此将保持未连接状态)。但是当我真正尝试实现它时,所有总线(共有三个)输出一个 1111111111111111 或 -1,由我的二进制到 BCD 转换器转换。如果总线上接收到的指令为-1,我通过指示控制矩阵停止来检查是否确实如此,并且它确实停止了。

我收到的关于将三态转换为逻辑的警告是:

Xst:2040 - Unit Neptune_I: 16 个多源信号被逻辑替换(上拉是)

Xst:2042 - 单元 alu:16 个内部三态被逻辑替换(上拉是):

等等。Neptune_I 是顶级模块,我相信它所指的多源信号是总线。

我怀疑上拉是不是这个问题的根源。它只是简单地把所有东西都拉起来,导致它一直是-1吗?但这对我来说没有意义,因为当三态被激活时,信号应该由它应该被控制的任何实体控制。

我想花时间用逻辑而不是三态替换代码,但我不确定如何继续。

任何帮助,将不胜感激。

4

1 回答 1

3

这些信号是否在芯片外?还是它们在您的 FPGA 内部?如果答案是后者,则需要更改代码。现代 FPGA(如 Spartan 6)不再支持内部三态缓冲器。它们只存在于片外信号。

您需要编写所有内部代码以避免三态缓冲区。在组件之间创建专用路径,没有双向接口。

于 2014-07-29T13:06:57.497 回答