Concurrent Processing
동시성 처리
- 실제 회로에서는 입력 포트에서 출력 포트로의 신호 전달이 동시에 처리되므로,
VHDL은 기본적으로 Concurrent Processing에 기반하고 있다.
- 즉, VHDL의 \(\texttt{ARCHITECTURE}\) Statement내에서
\(\texttt{PROCESS}\) Statement의 내부를 제외한 모든 Statement들은 Concurrent하게 처리된다.
(즉, VHDL은 Concurrent가 Default이다.)
\(\texttt{PROCESS}\) Statement
- \(\texttt{wait, if, case, for-loop}\) Statement와 같은 순차적 처리를 요하는 Statement들은 \(\texttt{PROCESS}\)내에 위치되어야 한다.
(VHDL의 Default는 Concurrent Processing이기 때문이다.)
\(\texttt{PROCESS ( sensitive_list )}\)
- \(\texttt{PROCESS}\)문은 \(\texttt{sensitive_list}\)의 신호들에 변화가 생길 때 수행된다.
- \(\texttt{sensitive_list}\)는 \(\texttt{PROCESS}\)문의 입력 신호들로 구성된다.
Example. Process Statement for NAND Gate
USE work.std_logic_1164.all
ENTITY nand2 IS
PORT( a, b : IN std_logic;
c : OUT std_logic );
END nand2;
ARCHITECTURE sequential OF nand2 IS
BEGIN
PROCESS(a, b)
VARIABLE temp : std_logic;
BEGIN
temp := NOT(a AND b);
IF(temp = '1') THEN -- Signal Rising
c <= temp AFTER 6 ns;
ELSIF(temp = '0') THEN -- Signal Falling
c <= temp AFTER 5 ns;
ELSE
c <= temp AFTER 6 ns;
END IF;
END PROCESS;
END sequential;
Example. Concurrent Statement and Process Statement
library ieee;
use ieee.std_logic_1164.all;
entity bool_func is
port ( A, B, C : in std_logic;
D : out std_logic );
end bool_func;
architecture dataflow of bool_func is
signal and_out : std_logic;
signal xor_out : std_logic;
begin -- Concurrent (아래와 같이 Data Dependency가 있는 환경에서 Concurrent 방식은 정확히 동작하지 않을 수 있다.)
and_out <= A and B;
xor_out <= C xor and_out;
D <= xor_out;
end dataflow;
-- using SIGNAL
architecture behave_signal of bool_func is
signal and_out : std_logic;
signal xor_out : std_logic;
begin -- Sequential
U1_PROCESS:
process ( A, B, C, and_out, xor_out )
begin
and_out <= A and B;
xor_out <= C xor and_out;
D <= xor_out;
end process;
end behave_signal;
-- using VARIABLE
architecture behave_variable of bool_func is
begin
process ( A, B, C)
variable and_out : std_logic;
variable xor_out : std_logic;
begin
and_out := A and B;
xor_out := C xor and_out;
D <= xor_out;
end process;
end behave_variable;