我可以重用在不同进程中分配值的信号吗?
Can I reuse a signal that is assigned values within a different process?
我创建了一个为信号赋值的进程,目的是在不同的进程中重复使用该信号:
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;
我重新使用这个信号的另一个进程是:
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;
请忽略此 if 语句的内容我知道它没有意义但我只是在测试信号值是否在此过程中可见!
输出不符合预期,似乎第二个进程没有响应信号内的变化!
您可以在一个进程中写入信号并在一个或多个其他进程中读取它。但是,您永远不能从多个进程写入同一信号,这里不是这种情况。
简短回答:是的。根据经验,只在一个进程中写入您的信号(这是信号 'driver'),并在任何其他进程中读取它。
它比这复杂一点,但你可以忽略开始时的复杂性。您实际上在 'effective process' 中写入信号(例如,它可以是并发分配,而不是进程),如果您想处理解析函数,您可以有多个驱动程序。
不过你的代码全乱了。首先,你有严重的种族问题。这两个进程都对相同的信号敏感,并且您不知道它们将按什么顺序执行。其次,您的第一个进程可以完全替换为一个简单的并发分配(您的 else 分支中的那个)。你的第二道工序也太复杂了
我创建了一个为信号赋值的进程,目的是在不同的进程中重复使用该信号:
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;
我重新使用这个信号的另一个进程是:
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;
请忽略此 if 语句的内容我知道它没有意义但我只是在测试信号值是否在此过程中可见!
输出不符合预期,似乎第二个进程没有响应信号内的变化!
您可以在一个进程中写入信号并在一个或多个其他进程中读取它。但是,您永远不能从多个进程写入同一信号,这里不是这种情况。
简短回答:是的。根据经验,只在一个进程中写入您的信号(这是信号 'driver'),并在任何其他进程中读取它。
它比这复杂一点,但你可以忽略开始时的复杂性。您实际上在 'effective process' 中写入信号(例如,它可以是并发分配,而不是进程),如果您想处理解析函数,您可以有多个驱动程序。
不过你的代码全乱了。首先,你有严重的种族问题。这两个进程都对相同的信号敏感,并且您不知道它们将按什么顺序执行。其次,您的第一个进程可以完全替换为一个简单的并发分配(您的 else 分支中的那个)。你的第二道工序也太复杂了