모든 행위 수준 문장은 반드시 initial, always 블록 안에 있어야 한다.
각 initial, always 블록은 분리되어 수행되며, 서로 중첩될 수 없다.
여러 문장은 begin, end를 통해 묶어준다.(C에서의 중괄호와 같은 역할)
- initial
initial 블록은 시간 0에서 시작되고, 시뮬레이션동안 단 한 번만 수행된다.
여러개의 initial 블록이 있다면 동시에 시간 0에서 시작되며 각각 독립적으로 실행을 마치게 된다.
initial
m = 1'b0;
initial
begin
#5 a = 1'b1; // #<지연>은 문장을 만나고 수행되기까지의 지연시간
#25 b = 1'b0;
end
// 시간 0일 때 m = 1'b0 수행
// 시간 5일 때 a = 1'b1 수행
// 시간 30일 때 b = 1'b0 수행
변수에 초기값을 할당할 때에는 두가지 방법을 사용할 수 있다.
//방법 1
reg clock;
initial clock = 0;
//방법 2
reg clock = 0;
- always
always 구문 역시 시간 0에서 시작하고, 블록 내의 문장을 루프 형식으로 수행한다.
always 블록은 전원이 들어오면 계속해서 지속적으로 반복되는 활동과 연관이 있다.
문장 수행은 $finish(전원 꺼짐), $stop(인터럽트)에 의해서만 멈춘다.
Reference: Samir Palnitkar - Verilog HDL 2판
'EE > Verilog' 카테고리의 다른 글
[Verilog] 지연 기반 타이밍 제어 (0) | 2023.01.17 |
---|---|
[Verilog] 절차적 할당 - 블록킹과 논블록킹 (0) | 2023.01.17 |
[Verilog] 연산자 정리 (0) | 2023.01.11 |
[Verilog] 데이터 플로우 모델링, assign 연속 할당문 (0) | 2023.01.11 |
[Verilog] 게이트 지연 (0) | 2023.01.06 |