Verilog三州发行(锡林克斯斯巴达6)

Verilog三州发行(锡林克斯斯巴达6),verilog,xilinx,spartan,xilinx-ise,Verilog,Xilinx,Spartan,Xilinx Ise,关于我前面的问题,我一直在利用三态来处理公共总线。我似乎仍然存在一些实施问题 三个州使用这种类型的代码: 分配io[width-1:0]=(re)?rd_out[width-1:0]:{width{1'bz} 合成和翻译进展顺利。没有我不希望出现的警告或错误(我希望出现一些警告或错误,因为这只是一次试运行,大多数组件不做任何事情,因此将保持未连接状态)。但当我实际尝试实现它时,所有总线(有三条)都会输出一个1111111或-1,这是由我的二进制到BCD转换器转换的。我通过指示控制矩阵在总线上接收

关于我前面的问题,我一直在利用三态来处理公共总线。我似乎仍然存在一些实施问题

三个州使用这种类型的代码:

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

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

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

Xst:2040-单位Neptune_I:16多源信号被逻辑取代(上拉是)

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

等等。Neptune_I是最上面的模块,我相信它所指的多源信号就是总线

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

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


任何帮助都将不胜感激。

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


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

那太可怕了!我确实有一个这样的设计,但我选择重写整个设计,让它使用双向接口,因为它使它更有用。等等,我建议不要使用双向接口。整个设计使用三条公共总线!它基于Magic-I架构。看这里:第7页!哇,太老了。祝你的设计好运。使用双向接口将使事情变得更加困难。此外,您将永远无法三态您的内部总线。但是如果你真的想使用这种架构,那么你必须想办法。这不是我的选择。我相信设计是在2001年完成的。经过一段时间的头脑风暴,我找到了一个适合的体系结构,并且更易于编码。第三次是魅力。无论如何谢谢你!