gpt4 book ai didi

process - VHDL中如何处理多个进程中的控制信号

转载 作者:行者123 更新时间:2023-12-04 03:05:00 25 4
gpt4 key购买 nike

有时我们需要使用来自流程外部的一些条件来执行一些顺序流程。我们可以为这种情况声明一些控制信号,例如:

Architecture ...
Signal C : std_logic;
begin
Process(SomeInputs)
begin
C <= '1';
end Process;

Process(Clock)
Variable Counter : Integer := 0;
begin
if (Clock'Event and Clock = '1') then
if C = '1' then
Counter := Counter + 1;

if Counter = 10 then
Counter := 0;
C <= '0';
end if;
end if;
end if;
end Process;
end;

end ... ;

在这种情况下,信号C是多源的,无法合成。

另一个例子是重置信号,当重置来自进程外部或组件外部时,我们无法反转它。

一种方法是制作这样的状态机:

Process(Clock)
begin
if (Clock'Event and Clock = '1') then
case Current_State is
when State_X =>
Current_State <= State_Y;
when State_Y =>
if C = '1' then
Current_State <= State_X;
else
Current_State <= State_Y;
end if;
...
end case;
end if;
end Process;

或者另一种处理这种情况的方法是像这样声明临时信号:

Architecture ...
Signal MySignal, MyTempSignal : std_logic_vector(N downto 0);
begin

Process(Clock)
Variable Counter : Integer := 0;
begin
if (Clock'Event and Clock = '1') then
if MySignal /= MyTempSignal then
Counter := Counter + 1;

if Counter = 10 then
Counter := 0;
MyTempSignal <= MySignal;
end if;
end if;
end if;
end Process;

end ...;

有了临时信号,我们可以在某些信号发生变化时进行一些处理。

另一种方法是在进程的敏感列表中添加条件信号,但是当进程与时钟顺序时,很难处理。

主要问题是每个信号都必须从 1 个源驱动(在一个进程中),问题是:

当我们需要一些控制信号(如“重置”)时,处理这种情况的最佳综合方法是什么?

最佳答案

要处理多个进程与同一个信号交互,我通常会这样做:

  • 首先,定义信号本身,以及设置和重置信号。例如。 sig、sig_reset 和 sig_set,
  • 然后,定义一个进程,负责使用 sig_set 和 sig_reset 信号影响要 sig 的值,
  • 最后,您可以影响来自不同进程的 sig_set 和 sig_reset 信号的值。

如果多个进程必须执行相同的操作(例如重置),只需为每个进程声明一个信号,然后将它们或或将它们全部置于条件中。

例子:

architecture ar of comp is
signal sig, sig_rst1, sig_rst2, sig_set : std_logic;
begin
sig_management:process(clk)
begin
if rising_edge(clk) then
if sig_rst1 = '1' OR sig_rst2 = '1' then
sig <= '0';
elsif sig_set = '1' then
sig <= '1';
end if;
end if;
end process;

set_proc:process(clk)
begin
if rising_edge(clk) then
sig_set <= '0';
if (condition) then
sig_set <= '1';
end if;
end if;
end process;

-- Do the same for sig_rst signals

end architecture;

关于process - VHDL中如何处理多个进程中的控制信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45421397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com