공부/Verilog

Verilog - Assign & Always 차이

오비루 2022. 8. 22. 17:04
728x90
728x90

Variable Assignment

디지털에는 두가지 타입의 element가 있다.

Combination , Sequential

 

Combination Logic(조합 논리 회로)

ð  출력이 단지 현재의 입력 값에 의해서만 결정된다.

ð  ex) 가산기, 비교기, 디코더, 인코더, Mux & DeMux

ð  and, or , not gate

ð  만약 reg type으로 구현하면 현재 값을 유지할 필요가 없기에 wire처럼 합성.

 

Sequential Logic(순차 논리 회로)

ð  현재의 입력과 기억 소자에 기록된 과거 출력들 과의 조합에 의해 현재의 출력 값이 결정된다. (‘시간 개념도입)

ð  정보를 저장하는 기억소자, 혹은 데이터 정보를 전송하는 회로에도 사용.

è  Latch = 신호의 level에서 동작하는 비동기식 ( Verilog 설계에서 사용 x)

è  Flip-Flop = 신호의 edge 에서 동작하는 동기식. (clock 신호와 동기 되며, Verilog 설계에서 주로 사용)

 

728x90

Always

always@( ) = @뒤에 있는 () 속에 들어간 port의 변화가 있을 때마다 동작한다.

ð  level sensitive = 괄호 내부의 input port중 변하는 것이 있다면 always문 수행.

ð  edge sensitive = 괄호 내부의 input port 앞에 posedge 혹은 negedge를 붙여 edge에 따라 always문 수행.

ð  무조건 reg type.(always , initial)

 

조건연산자 (? : )

assign 변수명 = (조건) ? 참인경우 : 거짓인경우

 

Assign

ð  assign statement combination logic 에서 사용되므로 연속적으로 동작한다.

ð  , 어떤 sensitive list가 필요 없이 동작하는 경우에 사용된다.

ð  reg type에는 assign문 사용 불가하며, wire type에 사용 가능.

 

320x100

 

여기서 reg register를 의미하는 것인가?

ð  reg type의 변수가 무조건 flip-flop(register)로 생성되는 것은 아니다.

ð  정보를 저장하는 전선

ð  초기값 = x (unknown) 반대로, wire 초기값 = z(하이 임피던스)

è  그릇으로 비유 가능한데, 값을 유지할 필요가 있다면 그릇에 담아두지만 절차적 할당 (always 문 등) 을 사용하여 combination logic 을 구현할 때는 값이 유지될 필요가 없으므로 그릇을 비운다.

 

그러므로, 기억소자가 필요하다 = always문을 사용함(reg type), 기억소자가 필요 없다 = 일반적인 combination logic으로 구현.

 

 

참고)

https://dreamsailor.tistory.com/8

 

728x90
반응형