我在同步代码时遇到问题。首先,我尝试将所有函数放在一个进程中,但要检查一条指令到另一个进程,则将需要一个额外的周期,而且我不希望发生这种情况,因此我将每个指令在一个进程中,以便所有功能都可以在同一周期内处理。但是我发现使用多进程并在变量中执行操作时遇到了问题,尽管我没有使用它们,但仍会为该变量提供“ xxxx”值在同一周期内
Pronunciations
在t(0)和t(1)的情况下,此代码运行良好,但在t(2)的情况下,AR值是“ xxxx”。
为什么在t(2)中给我这个值?
答案 0 :(得分:0)
很抱歉,但是这里有太多错误,我不知道从哪里开始。
让我们开始说明您只提供了一小段代码。为了更好的评估,您应该提供完整的代码以及测试平台。所以我必须在这里和那里做一些猜测。
接下来,这里没有时钟,因为没有时钟。您只有一组三个过程。如果您确实想拥有“周期”,则应该添加一个时钟并使用时钟沿(有很多示例)。
然后:进程没有正确的敏感度列表。您仅使用T:Process ( T )
。 data
或Ir
或PC
中的任何更改都将被忽略。您的代码可能会模拟,但与硬件的功能不匹配。
关于“ t(2)AR谷是'xxxx'”。您有两个更改AR的过程,这是竞争条件。您不知道两者中的哪一个会赢(您的综合工具将拒绝为此构建逻辑)。我也希望您的VHDL模拟器对此有所抱怨。您有做些什么来规避吗?
要修复一些问题,以使其停止编写,就像VHDL是标准顺序编程语言一样。在HDL中,所有同时发生/更改了 ,您的代码应该能够应对。
例如:您的T至少有三个“位”?可能有更多或不同的值,但由于您省略了定义,因此我们看不到。因此,您的T可以具有八个!值。
使用正确的敏感度列表将所有代码放入一个进程中,并通过T的八个组合进行工作。确定八种情况下每种情况的结果。
我再说一遍:以上是我对您所需要的最好的猜测,缺少很多信息。