EE/Verilog HDL

[verilog HDL] Syntax 5. Behavioral/Algorithmic Level Design

아이스얼그레이 2022. 2. 27. 14:26

verilog의 추상화 level중 가장 높은 수준의 design level입니다. C와 거의 흡사한 구조를 가집니다.

 

initial statements

- initial statement를 사용하면 simulation time 0에서 시작하며, simulation에서 한 번만 실행합니다.

- 만약 여러 개의 initial statement가 있다면, simulation time 0에 동시에 실행됩니다.

- 여러 statement를 묶어주기 위해 begin - end 와 함께 쓰입니다.(initial begin - end)

 

보통 RTL을 설계할 때는 initial statement를 잘 쓰지 않습니다.

 

always statements

- simulation time 0에서 시작합니다.

- loop 형식으로 statement를 연속적으로 실행합니다.

- 반복적으로 반복되는 block을 설계하기 위해 사용합니다.


Procedural Assignment(절차적 할당문)

- procedural assignments는 reg, integer, real 변수의 value를 update하는 statement 입니다.

 

변수가 가지고 있는 value는 procedural assignment를 만나지 전까지 보존됩니다.

RTL 설계에서는 assign statement를 사용하며, tb에서는 blocking assignments를 이용해 값을 할당합니다.

 

Blocking assignment

sequential block에서 명시된 순서대로 실행됩니다.

'=' keyword를 써서 blocking assignment를 실행합니다.

 

Non-blocking assignment

non-blocking assignment는 명시된 순서대로가 아닌, 병렬적으로 실행됩니다. 즉 block(begin - end)내의 statements들이 동시에 실행됩니다.

'<=' keyword를 써서 non-blocking assignment를 실행합니다.

 

- 보통 non-blocking assignment는 time step의 마지막에 실행됩니다.(모든 blocking assignment이 실행된 후에 실행)

- 같은 always block내에 blocking과 non-blocking을 혼용해서 사용하는 syntax는 추천하지 않습니다.