Synchronization VHDL多进程

Synchronization VHDL多进程,synchronization,vhdl,Synchronization,Vhdl,我在同步代码时遇到问题。首先,我试图将所有函数放在一个进程中,但要将指令检查到另一个进程,这将需要一个额外的周期,我不希望发生这种情况,因此我将所有指令放在一个进程中,以便所有函数都可以在同一个周期中处理。但我发现使用多进程时存在问题在一个变量中做一个运算,它会给这个变量一个“xxxx”值,尽管我没有在同一个循环中使用它们 Process ( T ) begin If ( T(0)='1' )Then AR <= PC; End If ;

我在同步代码时遇到问题。首先,我试图将所有函数放在一个进程中,但要将指令检查到另一个进程,这将需要一个额外的周期,我不希望发生这种情况,因此我将所有指令放在一个进程中,以便所有函数都可以在同一个周期中处理。但我发现使用多进程时存在问题在一个变量中做一个运算,它会给这个变量一个“xxxx”值,尽管我没有在同一个循环中使用它们

 Process ( T )
  begin
      If ( T(0)='1' )Then
          AR <= PC;
      End If ; 
end process;
process ( T )
begin
      If ( T(1)='1' )Then
          IR<=Data;
          PC<=PC+1;
      End If ;
End process;
process ( T )
begin
      If ( T(2)='1' )Then
          I<=IR(15);
          AR<=IR( 11 downto 0 );
      End If ;
End Process ;
过程(T)
开始
如果(T(0)='1'),则

很抱歉,这里有太多的错误,我不知道从哪里开始

让我们首先说明您只提供了一小部分代码。为了更好地进行评估,您应该提供完整的代码加测试台。所以我必须在这里和那里做一些猜测

其次,这里没有“周期”,因为没有时钟。您只有一组三个过程。如果你真的想有“周期”,你应该添加一个时钟和时钟边缘(有很多例子)

然后:流程没有正确的灵敏度列表。您只使用T:
进程(T)
。将忽略
数据
Ir
PC
中的任何更改。您的代码可能会模拟,但与硬件的功能不匹配

至于“t(2)AR值为‘xxxx’”,您有两个过程改变AR。这是一个竞争条件。你不知道这两者中的哪一个会赢(你的合成工具将拒绝为此构建逻辑)。我也希望你的VHDL模拟器会对此抱怨。你有没有做些什么来规避这一点

若要修复某些问题,请停止编写,好像VHDL是一种标准的顺序编程语言。在HDL中,一切都是同时发生/变化的,您的代码应该能够应对这种情况。
例如:您的T至少有三个“位”?可能有更多或不同的值,但我们无法看到,因为您忽略了定义。所以你的T可以有八个!价值观

用正确的敏感度列表将所有代码放在一个流程中,并完成八个T组合。决定八个案例中的每一个的结果应该是什么


我重复我自己的话:以上是我对您需要的最好猜测,缺少很多信息。

IEEE Std 1076-2008 14.7.2驱动程序“过程语句中的每个信号分配语句都定义了一组特定标量信号的驱动程序。”14.7.3.2驱动值“14.7.3.2驱动值”如果S是一个已解析的信号且具有一个或多个源,则检查S源的驱动值。”…“…通过执行与S相关联的解析函数来获得S的驱动值,其中该函数由一个输入参数调用,该输入参数由S源的驱动值串联而成,…”,。。。。“AR的类型是什么?4.6分辨率函数“分辨率函数是定义如何将给定信号的多个源的值解析为该信号的单个值的函数。解析函数通过在信号声明或信号子类型声明中包含解析函数的名称,与需要解析的信号相关联。“对于std_逻辑_向量,后者在IEEE软件包std_逻辑_1164中进行功能解析。在包体中,您将找到一个解析表,用于解析多个驱动程序,一次解析两个值。提供一个。