728x90
산술 연산자
산술 연산자
- 2개의 피연산자(operand)의 +, -, *, /, %(나머지) 연산을 수행하는 2항 연산자
- 피연산자가 네트형 또는 레지스터형이면 부호 없는 연산이 수행
- 정수형(integer 선언)일 경우, 부호 있는 연산 수행, 합성 제한
- 나눗셈과 나머지 연산에서 두 번째 피연산자가 0(zero)인 경우 결과값은 x(unknown)이 됨을 주의
- 산술 연산자의 종류
연산자 종류 | 의미 | 사용 예 |
+ | 덧셈 | assign add = a + b; |
- | 뺄셈 | assign sub = a - b; |
* | 곱셈 | assign mul = a * b; |
/ | 나눗셈 | assign div = a / b; |
% | 나머지 | assign rem = a % b; |
- 사용 예
/* wire 또는 reg로 선언된 a = 4'h7, b = 4'h2 */
sum = a + b; // sum = 8'h09
diff = a - b; // diff = 8'h05
neg = -a; // neg = 8'hF9
mul = a * b; // mul = 8'h0E
div = a / b; // div = 8'h03
modulo = a % b; // modulo = 8'h01
modulo = -a % b; // modulo = 8'hFF
논리 연산자
논리연산자
- 논리연산자는 피연산자 간의 논리적 결합이나 부정으로 판단하는 연산자로 &&(논리 and), ||(논리 or), !(논리 not)이 있음.
- 논리연산자의 결과는 항상 1비트로서 논리 거짓(0) 또는 논리 참(1)
- 참이나 거짓의 판단이 불가능할 경우 x(unknow)이 된다.
- 실제 설계에서는 x(unknown)은 사용하지 않고 0(zero) 또는 1이 나오도록 하는 것이 좋다.
- 논리 연산자의 종류
연산자 | 의미 | 사용 예 |
&& | 논리 and | if (a && b) ... |
|| | 논리 or | if (a || b) ... |
! | 논리 not | if(!a) ... |
- 논리 연산자의 사용 예
/* a = 4'b0101, b= 4'b0000, c = 4'bxxxx */
a && b // 결과 값은 논리 참(1) && 논리 거짓 (0)의 결과로 0
a || b // 결과 값은 논리 참(1) || 논리 거짓 (0)의 결과로 1
!a // 결과 값은 논리 참(1)의 부정으로 0
a && c // 결과 값은 논리 참(1) && x의 결과로 x(unknown)
!c // 결과 값은 x(unknown)의 부정으로 x(unknown)
비트단위 논리연산자
비트단위 논리연산자
- 피연산자들 간의 비트단위로 연산을 수행하게 되므로 결과의 비트 수는 피연산자의 비트 수와 같다.
- 만약 피연산자의 비트 수가 서로 다를 경우 비트 수가 작은 피연산자의 최상위 비트(msb)쪽에 0을 채운 후 연산을 수행
- 비트단위 논리연산자의 종류
연산자 | 의미 | 사용 예 |
~ | 비트 not | ~(1011) -> (0100) |
& | 비트 and | (1011) & (0011) -> (0011) |
| | 비트 or | (1011) | (0011) -> (1011) |
^ | 비트 xor | (1011) ^ (0011) -> (1000) |
^~, ~^ | 비트 xnor | (1011) ^~ (0011) -> (0111)(xor 연산 후 반전) |
- 비트단위 논리 연산자의 진리표
- 비트단위 논리 연산자의 사용 예
/* a = 4'b0101. b 4'b0100 */
a & b // 결과 값은 0100
a | b // 결과 값은 0101
a ^ b // 결과 값은 0001
a ~^ b // 결과 값은 1110
~b // 결과 값은 1011
- 비트 단위 논리연산자와 논리연산자 연산 결과 비교
피연산자 값 | 비트단위 논리연산자 | 논리연산자 |
a = 1010 b = 0011 c = 0000 |
a & b = 0010 | a && b = 1 |
a | b = 1011 | a || b = 1 | |
a & c = 0000 | a && c = 0 | |
a | c = 1010 | a || c = 1 |
이 글은 "따라하면서 배우는 디지털 시스템 설계 및 응용 with Verilog HDL"을 기반으로 작성했음을 알립니다.
'verilog > 이론' 카테고리의 다른 글
[verilog] verilog의 추상화 수준 모델링 방법(1)(게이트 수준 : and, or, nand, nor, xor,3-state gate primitive, 데이터 플로우 수준 : 연속 할당문, 절차형 할당문) (2) | 2023.11.27 |
---|---|
[verilog] verilog의 연산자(2)(비트단항 논리연산자, 관계 연산자, 시프트 연산자, 조건 연산자, 결합 연산자, 반복 연산자) (2) | 2023.11.21 |
[verilog] 벡터(vector)와 배열(array) (0) | 2023.11.13 |
[verilog] verilog의 자료형 (0) | 2023.11.11 |
[verilog] verilog의 어휘요소(여백, 주석, 연산자, 식별어, 예약어) (0) | 2023.11.06 |