Verilog的三态问题(赛灵思Spartan 6)(Verilog Tri-State Issue

2019-10-20 14:03发布

参考我先前的问题在这里 ,我一直在使用三态与普通公交车上班。 我似乎仍然有一些执行问题。

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

分配IO [宽度-1:0] =(重新)RD_OUT [宽度-1:0]:{{宽度1'bz}};

合成和翻译进展顺利。 无警告或错误我没想到(我是有些期待,因为这仅仅是一个试运行和大多数组件没有做任何事情,并会因此被悬空)。 但是,当我真正尝试实现它,所有的公共汽车(有三个)输出1111111111111111,或-1,换算我的二进制到BCD转换器。 我检查它是否真的通过指示控制矩阵,如果总线上接收指令停止的情况下是-1,它没有停止。

我接收对所述三态警告被转换为逻辑是:

XST:2040 - 单元Neptune_I:16多源信号是由逻辑替换(上拉是)

XST:2042 - 单元ALU:16个内部三态由逻辑替换(上拉是):

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

我有一个疑问拉肯定是这个问题的根源。 它是简单地拉动了一切,从而导致无法-1所有的时间? 但是,这没有任何意义对我来说,因为当三态被激活,信号应该由任何实体它应该通过控制控制。

我想花时间,以取代逻辑,而不是三态的代码,但我不知道该如何继续。

任何帮助,将不胜感激。

Answer 1:

难道这些信号去片? 抑或是他们内部的FPGA? 如果答案是后者,你需要改变你的代码。 现代的FPGA(如斯巴达6)不再支持内部三态缓冲器。 它们只存在于片外信号。

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



文章来源: Verilog Tri-State Issue (Xilinx Spartan 6)