Vhdl 我可以重用在不同流程中分配值的信号吗?

Vhdl 我可以重用在不同流程中分配值的信号吗?,vhdl,hardware,Vhdl,Hardware,我创建了一个为信号赋值的过程,目的是在不同的过程中重复使用信号: Signaling : process(button0, button1) begin if (button1= '0') AND (button0 = '0') then -- if both buttons are pressed BothButtons <= "00"; elsif (button1 = '0') AND (button0 = '1') then -- if button1 is

我创建了一个为信号赋值的过程,目的是在不同的过程中重复使用信号:

Signaling : process(button0, button1)
begin

  if (button1= '0') AND (button0 = '0') then  -- if both buttons are pressed
    BothButtons <= "00";
  elsif (button1 = '0') AND (button0 = '1') then  -- if button1 is pressed
    BothButtons <= "01";
  elsif (button1 = '1') AND (button0 = '0') then  -- if button0 is pressed
    BothButtons <= "10";
  elsif (button1 = '1') AND (button0 = '1') then -- if no button are pressed
    BothButtons <= "11";
  else
    --BothButtons <= "11";
    BothButtons <= button0 & button1;
  end if;

end process;
请忽略此if语句的内容我知道它没有意义,但我只是测试信号值在此过程中是否可见


输出不符合预期,第二个进程似乎没有响应信号内的变化

您可以在一个进程中写入信号,在一个或多个其他进程中读取信号。但是,决不允许从多个进程写入同一信号,这里的情况并非如此。

允许在一个进程中写入信号,在一个或多个其他进程中读取信号。但是,决不允许从多个进程写入同一信号,这里的情况并非如此。

允许在一个进程中写入信号,在一个或多个其他进程中读取信号。但是,决不允许从多个进程写入同一信号,这里的情况并非如此。

允许在一个进程中写入信号,在一个或多个其他进程中读取信号。但是,决不允许您从多个进程写入同一信号,这里的情况并非如此。

简短回答:是。根据经验,只在一个进程中写入信号(这是信号“驱动程序”),然后在任何其他进程中读取

这比这要复杂一点,但你可以先忽略其中的复杂性。实际上,您在“有效进程”(例如,可以是并发分配,而不是进程)中写入信号,如果您想处理解析函数,您可以有多个驱动程序


不过,你的代码全搞乱了。首先,你有严重的种族问题。这两个进程对相同的信号都很敏感,您不知道它们的执行顺序。第二,您的第一个进程可以完全替换为一个简单的并发分配(else分支中的那个)。你的第二个过程也太复杂了。

简短回答:是的。根据经验,只在一个进程中写入信号(这是信号“驱动程序”),然后在任何其他进程中读取

这比这要复杂一点,但你可以先忽略其中的复杂性。实际上,您在“有效进程”(例如,可以是并发分配,而不是进程)中写入信号,如果您想处理解析函数,您可以有多个驱动程序


不过,你的代码全搞乱了。首先,你有严重的种族问题。这两个进程对相同的信号都很敏感,您不知道它们的执行顺序。第二,您的第一个进程可以完全替换为一个简单的并发分配(else分支中的那个)。你的第二个过程也太复杂了。

简短回答:是的。根据经验,只在一个进程中写入信号(这是信号“驱动程序”),然后在任何其他进程中读取

这比这要复杂一点,但你可以先忽略其中的复杂性。实际上,您在“有效进程”(例如,可以是并发分配,而不是进程)中写入信号,如果您想处理解析函数,您可以有多个驱动程序


不过,你的代码全搞乱了。首先,你有严重的种族问题。这两个进程对相同的信号都很敏感,您不知道它们的执行顺序。第二,您的第一个进程可以完全替换为一个简单的并发分配(else分支中的那个)。你的第二个过程也太复杂了。

简短回答:是的。根据经验,只在一个进程中写入信号(这是信号“驱动程序”),然后在任何其他进程中读取

这比这要复杂一点,但你可以先忽略其中的复杂性。实际上,您在“有效进程”(例如,可以是并发分配,而不是进程)中写入信号,如果您想处理解析函数,您可以有多个驱动程序


不过,你的代码全搞乱了。首先,你有严重的种族问题。这两个进程对相同的信号都很敏感,您不知道它们的执行顺序。第二,您的第一个进程可以完全替换为一个简单的并发分配(else分支中的那个)。您的第二个过程也太复杂。

也许我应该创建一个函数,在同一个过程中分配信号值!是的,您可以在一个进程中分配一个信号,然后在另一个进程中读取它。你的问题还有别的吗?@谢谢,有什么建议解释为什么它不起作用吗?定义“不起作用”,我们不是通灵者。首先,它在模拟中是否达到了预期效果?那么-如果是这样,它在硬件上有什么不同?@BrianDrummond输出不符合预期,第二个进程似乎没有响应信号内的变化,我使用button0模拟时钟,因为板载FPGA时钟太快,我已经用一个并发语句替换了第一个进程,如下所示,但是还有一些我没有发现的东西!谢谢,也许我应该创建一个函数,在同一个过程中分配信号值!是的,您可以在一个进程中分配一个信号,然后在另一个进程中读取它。你的问题还有别的吗?@谢谢,有什么建议解释为什么它不起作用吗?定义“不起作用”,我们不是通灵者。首先,它在模拟中是否达到了预期效果?那么-如果是这样的话,它在硬件上有什么不同?@BrianDrummond输出不符合预期,第二个进程似乎没有响应信号内的变化,我使用button0模拟时钟,因为板载FPGA时钟太快,我已经更换了
Counting : process(button0, BothButtons) 

  variable count0 : integer range 0 to 9; -- to hold the counter value

begin 

  if falling_edge(Button0) then -- I am using button0 as a clock because the onboard clock is too fast  

    if BothButtons = "00" then
      count0 := 0;
    elsif BothButtons = "01" then
      count0 := count0 + 1;
    elsif BothButtons = "10" then
      count0 := count0 + 1;
    else
      count0 := count0 + 1; -- when i have included this i have discovered that the signal value is not visible within this process
  end if;

end process;