【发布时间】:2014-07-16 01:24:36
【问题描述】:
我正在尝试使用 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;
-------------------------------------------------
这是一个声明的例子,我想实现三个状态,每个状态实现一个组件。
【问题讨论】:
-
“每个状态都实现一个组件”是什么意思?您希望每个州会发生什么?
-
每个状态实现一个组件瞬间.. state0 实现 u1,state1 实现 u2,state2 实现 u3。
-
您希望发生什么操作?您希望改变哪些价值观?你想驱动什么信号?您还没有说明您要完成的功能。
-
我的目标是如何学习如何使用有限状态机的端口映射,我以这段代码为例,,,,
-
假设我想添加 4 个信号 a、b、c、d,并且我想使用 adder_2 添加它们,它只添加到信号中......我想以加法器树格式实现它们,所以在第一个状态 a 和 b 将被添加并保存在信号 y 和 c 和 d 也将被添加并保存在信号 z 然后在下一个状态 y 和 z 将被添加并且结果将在输出 x..
标签: vhdl state-machine