프로세스_레이블: process(감지리스트)
{선언문}
begin
{순차문}
End process 프로세스_레이블;
Wait for type_expression; ->시간대기
Wait on sensitivity_list; ->신호대기
- 감지리스트는 wait on문이 있을 경우에 process에서 써주지 않는다.
Process(signal1,signal2,signal3)
Begin
Sequence1;
Signal3<=signal1+5; <-신호는 이process를 다 실행한후에 signal3에 값을 할당
Sequence2;
End process;
- 변수는 현재 할당되는 값이 지연 없이 전달된다.
- 한 개의 아키텍처 안에 여러 개의 프로세스문이 존재할수 있다.
* if문
예)
If s1=’1’ then out<=cs;
End if;
If(x=’0’ and y=’0’) then z<=’1’;
elseif (x=’X’ or y=’X’) then z<=’1’;
else z<=0;
End if;
*case문
예)
Case sel is
When “00” => z <=in0;
When “00” => z <=in1;
When “00” => z <=in2;
When others => z <=in3;
End case;
*반복문
Ex1) 변수범위
Loop1:for a in 1 to 10 loop
B:=B+A;
End loop loop1;
Ex2)
Loop2:while a<=10 loop
A:=A+1;
B:=B+A;
End loop loop2;
exit 루프_레이블 [when 조건]; <-루프를 벗어날 때 사용
next 루프_레이블 [when 조건]; <-특정 조건하에서 연산을 건너뛸 때 사용
null <- 아무 것도 수행하지 않는다.
Return 리턴값 <- 값을 돌려준다.
* 신호할당
- 병행신호 할당문 (concurrent signal assignment)
: 아키텍처 안에서 다른 프로세스문들과 동일하게 서로 병행적으로 수행된다.
- 조건적 병행 신호 할당문
신호_이름 <= 값1 when 조건1 else
값2 when 조건2 else
값3 when 조건3 else
값4;
- 선택적 병행 신호 할당문
With 선택신호 select
신호_이름 <= 값1 when 선택신호값1,
값2 when 선택신호값2,
값3 when others;
** 구조적 표현
선언
Component identifier_name
Generic (local_generic_list);
Port (local_port_list);
End component
개체화
개체_이름:entity work.엔티티_이름(아키텍처_이름)
Ex)
Gate: entity work.and2(beh)
포트연결
Arcjotecture design of gate is
Component and
Port(a,b,c:in std_logic;
o:out std_logic);
end component;
n1:and port map(s1,s2,s3)
end design
** 테스트 벤치(test bench)
-테스트 벤치의 목적
1.시뮬레이션을 위한 데이터를 발생
2.테스트중인 데이터를 엔티티에 적용하고 출력치를 수정
3.출력치를 예측 값과 비교
== 일종의 테스트 개념과 같음
- assert문
Assert 조건문장
Report “텍스트문장”
Severity severity_level;
Severity-level ????
Note : 메시지가 화면에 출력
Warning : 시뮬레이션은 계속되지만 일반적인 상태가 아니므로 결과는 예측할 수 없다
Error : 시뮬레이션 중단
Failure : 치면적인 오류 상태이므로 즉시 시뮬레이션 끝낸다.
** library와 package
- library : 이미 모델링 했던 것들을 저장하여 필요한 경우 불러 사용할 수 있도록 하는 일종의 저장 장소
-> library를 가시화 시키고 use구문을 이용하여 package를 가시화 시킨다.
Ex)
Library Ieee;
Use.Ieee.std_logic_1164.all;