使用端口映射的VHDL FSM实现

时间:2014-07-16 01:24:37

标签: vhdl state-machine

我正在尝试使用Finite state machine和端口映射到组件

来实现VHDL代码

是否有人知道如何操作,因为不允许在进程语句中包含端口映射?

------ and_2.vhd (component): --------- 
LIBRARY ieee; 
USE ieee.std_logic_1164.all; 
--------------------------------------- 
ENTITY and_2 IS 
PORT ( a, b: IN STD_LOGIC; 
y:OUT STD_LOGIC); 
END and_2; 
--------------------------------------- 
ARCHITECTURE and_2 OF and_2 IS 
BEGIN 
y <= a AND b; 
END and_2; 
---------------------------------------
LIBRARY ieee; 
USE ieee.std_logic_1164.all; 
USE work.my_data.all;
ENTITY FSM_PORTMAPP IS
PORT(
   clk,reset : IN STD_LOGIC;
   A,b,c,d: IN STD_LOGIC;
    x: out STD_LOGIC
);
END FSM_PORTMAPP; 
ARCHITECTURE Flow OF FSM_PORTMAPP IS 
----------------------- 
COMPONENT and_2 IS 
PORT ( a, b: IN STD_LOGIC; y: OUT STD_LOGIC); 
END COMPONENT; 
-----------------------
TYPE state IS (state0, state1, state2); 
SIGNAL pr_state, nx_state: state;
signal y,z :std_logic;
BEGIN
U1:and_2 PORT MAP(a,b ,y);
U2:and_2 PORT MAP(c,d,z);
U3:and_2 PORT MAP(y,z,x);
process(clk,reset)
BEGIN 
IF (reset='1') THEN 
        pr_state <= state0;
ELSIF (clk'EVENT AND clk='1') THEN 
        pr_state <= nx_state; 
END IF;
end process;
process(pr_state)
BEGIN 
case pr_state IS
WHEN state0 => 
nx_state <= state1;
WHEN state1=> 
nx_state <= state2;
WHEN state2 => 
nx_state <= state0;
END CASE;
end process;
END Flow;
-------------------------------------------------

这是声明的一个例子,我想实现三个状态,每个状态实现一个组件。

1 个答案:

答案 0 :(得分:0)

首先,将组件实例化和端口映射视为接线电路组件,而不是执行操作。映射本身不执行任何操作 - 组件中的逻辑与驱动到组件中的信号相结合。这也是您无法在流程中映射组件的原因 - 布线是固定连接,而不是您可以作为运行时操作执行的操作。它不是执行代码 - 它是并发逻辑。

在您的示例代码中,组件and_2有三个实例,在任何进程之外。这种映射基本上是您所需要的(前提是您将组件和信号类型更改为您的特定功能)。 然后,在状态机中,您可以选择性地驱动输入,或读取输出,或任何您需要的输入。你可能需要一些中间信号,你需要改变你的布线,你第一次尝试时最有可能获得的是带有锁存器的有问题的代码,你不需要它们和那样的好东西。您可以做什么而不是只是注册加法器输出:

U1 : adder_2 port map (a, b, y);
U2 : adder_2 port map (c, d, z);
U3 : adder_2 port map (y_r, z_r, x);

adder_regs : process (clk)
begin
  if rising_edge(clk) then
    y_r <= y;
    z_r <= z;
  end if;
end process adder_regs;

或者你是否有其他原因想要按照自己的方式去做?