#5. Verilog HDL의 연산자

Verilog/Verilog HDL강의정리(KOCW) 2023. 7. 17. 00:38
반응형

1. 연산자

Verilog에서는 위와 같은 연산자를 지원한다. 외운다기 보다는 자주 쓰이는 것을 위주로 확인하고, 그때그때 찾아서 쓸수 있기를 바란다. 

위 표는 연산자의 우선순위를 나타낸 것이다. 역시 외우는 것이 아닌 그때그때 찾아서 쓸 수 있도록 하자


하나씩 뜯어 보도록 하자. 

2. 산술연산자

 

위 표는 산술 연산자를 나타낸 것이다. 산술 연산자의 경우 X, Z가 포함된 경우에는 결과값이 X가 된다는 것을 기억해두자또한, 나누기와 나머지 연산자에서는 두번째 피연산자가 0 인 경우, 결과값은 X가 된다.


3. 관계 연산자

크기를 비교하는 관계 연산자이다.  결과값은 참(1) 거짓(0)으로 나오게 되며, 만약 피연산자에 X나 Z가 포함된 경우에는 결과값이 1비트 X가 된다. 또한 두 피연산자의 비트수가 다른 경우에는 비트수가 작은 피연산자의 MSB 쪽에 0이 채워져 비트 수가 큰 피연산자에 맞춰진 후에 관계를 판단한다. 


4. 등가 연산자

앞에 두가지 (===,!==)는 case equality 연산자로 불리는데 이 연산자들은 EDA 툴에서 논리합성이 지원되지 않을 수 있으므로 주의하자.(simulation에서만 사용가능할 수 있다.)


5. 논리 연산자

and/or/not 등의 논리 연산자 이다. 결과값은 참(1), 거짓(0)으로 나오게 되며, 판단이 모호한 경우 결과값은 x가 될 수 있다.


6. 시프트연산자

시프트 연산자에는 논리와 산술로 나뉘어지게 된다. 논리 연산자에서는 단순히 비트를 시프트 시키기만 하지만, 산술에서는 MSB를 고려대상, 즉 부호를 신경쓴다는 것을 유의 하자.(연산과정에서 부호가 유지된다.)


7. 조건 연산자

연산자 중에서 유일하게 3항 연산자에 해당한다.(3개의 피연산자를 갖는다.)

a ? b: c

형식을 갖게 되며, a가 참이라면 b를 선택, a가 거짓이라면 c를 선택하게 된다.

ex)

wire [15:0] busa, data;                                                                                                                                                                       assign busa = drive_busa ? data : 16'bz;

위 코드를 해석해보면, drive_busa가 참일 경우 busa에 data를 연결하고, 거짓일 경우에는 16비트 z(high impedence)를 연결하게 되는데, 거짓일 때는 busa에 아무것도 연결하지 않는다는 것으로 이해하면 된다.


8. 결합 및 반복 연산자

결합 연산자부터 살펴보자, 결합 연산자는 { }에 의해 묶어서 두개 이상의 표현이 갖는 비트들을 결합한다. 말로 하기보단 예시를 살펴보자

ex)

wire [15:0] addr_bus;

wire[7:0] addr_h, addr_l;                                                                                                                                                                    assign addr_bus = {addr_h, addr_l};

이렇게 코드를 구성하면 16비트 addr_bus 에 addr_h와 addr_l이 8비트씩 합쳐져서 총 16비트로 결합되어 저장되게 된다.

결합연산자를 중첩하여 사용하면 반복연산자가 되는데 이 역시 예시를 살펴보면

{4{w}} 이렇게 쓴다면 이는 {w,w,w,w}와 동일한 표현이다.

{b, {3{a,b}} 이렇게 쓴다면 이는, {b,a,b,a,b,a,b}와 동일한 표현이다.


이번 강의에서는 연산자에 대해서 알아보았다. 연산자는 직접 코딩을 하면서 익혀지는 부분이기 때문에 외운다기 보다는 많이 써보면서 그때 그때 찾아보는 것이 더 좋은 것 같다.

 

 

반응형