Kim Seon Deok

[Verilog] Operator 본문

Verilog

[Verilog] Operator

seondeok 2022. 12. 8. 03:11

 

 

 

산술 연산자

 

기호 기능
+ 더하기
- 빼기
* 곱하기
/ 나누기 몫
% 나누기 나머지
** 거듭제곱

 

피연산자 비트에 x나 z가 있을 경우 전체 결과값은 x이다.

나누기와 나머지 연산에서 두번째 피연산자가 0이면 결과값은 x이다.

나머지 연산자의 결과값은 첫번째 피연산자의 부호를 따른다.

 

 

 

 

 

관계 연산자

 

의미
a < b a가 b보다 작다
a > b a가 b보다 크다
a <= b a가 b보다 작거나 크다
a >= b a가 b보다 크거나 같다

 

 

피연산자 비트에 x나 z가 있을 경우 전체 결과값은 x이다.

두 연산자의 비트 수가 다르면 비트수가 작은 피연산자의 msb쪽에 0을 채우고 판단한다.

피연산자 중 하나가 실수형이면 다른 피연산자가 실수형으로 변환된 후 비교된다

연산 결과는 1이나 0이다.

 

 

 

 

 

등가 연산자

의미
a === b a 와 b는 같다 (x와 z가 포함된 일치)
a !== b a 와 b는 같지 않다. (x와 z가 포함된 불일치)
a == b a 와 b는 같다 (결과가 x가 될 수 있음)
a != b a 와 b는 같지 않다. (결과가 x가 될 수 있음)

 

===, !===는 simulation에서만 사용되고 합성에서는 지원되지 않을 수 있다.

연산 결과는 1이나 0이다.

 

 

 

 

논리 연산자

 

의미
a && b and
a | | b or
!a not

 

 

비트 연산자

 

and

& 0 1 x z
0 0 0 0 0
1 0 1 x x
x 0 x x x
z .0 x x x

or

| 0 1 x z
0 0 1 x x
1 1 1 1 1
x x 1 x x
z x 1 x x

not

~ 0
0 1
1 0
x x
z x

 

두 연산자의 비트 수가 다르면 비트수가 작은 피연산자의 msb쪽에 0을 채우고 판단한다.

(a~^b)는 허용되지만 (a~&b)와 (a~|b)는 허용되지 않는다. ~(a&b)와 ~(a|b)는 허용된다.

 

xor = ^

xnor = ~^

 

축약 연산자

reg [7:0] cnt ;   
assign parity = ^cnt ;   // 축약연산자 사용 
assign parity = cnt[7]^cnt[6]^cnt[5]^cnt[4]^cnt[3]^cnt[2]^cnt[1]^cnt[0] ;  // 비트 연산자 사용

피연산자의 단위 비트들에 적용되어 1비트의 결과값을 생성

 

 

시프트 연산자

  • 논리 시프트

<< : 좌측 피연산자를 왼쪽으로 시프트하고 비어있는 비트에 0을 채움

>> : 좌측 피연산자를 오른쪽으로 시프트하고 비어있는 비트에 0을 채움

  • 산술 시프트

<<< : 좌측 피연산자를 왼쪽으로 시프트하고 비어있는 비트에 0을 채움

>>> : 좌측 피연산자를 오른쪽으로 시프트하고 비어있는 비트에 좌측 피연산자의 MSB을 채움

 

a = 4'b1100
b = a >> 1    // 4b'0110
c = a << 1    // 4'b1000
d = a << 2    // 4'b0000

 

 

조건 연산자

 

조건 ::= expression1  ?  expression2  :  expression3

expression1이 참이면 expression2가 좌변의 변수에 할당

expression1이 거짓이면 expression3이 좌변의 변수에 할당

 

wire [15:0] busa,data;
	assign busa = drive_busa ? data : 16'bz  ;  // drive_busa가 참이면 data, 거짓이면 16'bz

 

 

결합 및 반복 연산자

중괄호 { }에 의해 묶인 두 개 이상의 표현이 갖는 비트들을 결합

결합되는 피연산자들은 각각의 크기를 결정할 수 있어야 결합이 가능하다.

비트폭이 일치하지 않는 변수의 연산이나 대입이 허용된다

우변의 비트폭이 작은 경우 우변의 MSB에 0을 붙여 연산

좌변의 비트폭이 작은 경우 MSB누락되어 저장

wire [15:0] addr_bus ;
wire [7:0] addr_h, addr_l ;
	assign addr_bus = {addr_h, addr_l}  ;// addr_bus 8비트를 addr_h와 addr_bus 8비트를 addr_l에 결합

 

{a{b}}

b 를 a 회 반복. 반복횟수는 x,z가 아니어야 함

{b,{3,{a,b}}   // {b, a,b,a,b,a,b}

 

 

 

'Verilog' 카테고리의 다른 글

[Verilog] Concurrent assignment  (0) 2022.12.08
[Verilog] Gate level modeling  (0) 2022.12.08
[Verilog] Logic status, Data type  (0) 2022.12.08
[Verilog] 주석, 수 표현 , 문자열, 식별자  (0) 2022.12.06
[Verilog] Verilog HDL Overview  (0) 2022.12.06
Comments