katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • cctype
  • 입력버퍼
  • C언어
  • 배열포인터
  • c++
  • Get
  • 스트림
  • ignore
  • for 루프
  • C++11
  • C++ 스트림 클래스
  • ctime
  • c++ 입출력
  • 함수포인터
  • EOF
  • C++ 스트림 개요
  • 표준스트림
  • cin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

EE/Verilog

[Verilog] 연산자 정리

2023. 1. 11. 14:44

C나 C++에 없거나 혹은 일반적인 SW 프로그래밍을 할 때 잘 쓰이지 않는 연산자들 위주로 정리함.

 

연산자 심볼 수행되는 연산 피연산자의 개수
** 제곱 승 2
=== 케이스 등가 연산자 2
!== 케이스 비등가 연산자 2
^ 비트단위 xor 2
^~ 또는 ~^ 비트단위 xnor 2
>> 오른쪽 자리 이동 2
<< 왼쪽 자리 이동 2
>>> 수학적 오른쪽 자리 이동 2
<<< 수학적 왼쪽 자리 이동 2
{ } 결합 아무 수
{ { } } 중복 아무 수

 

 

  • ** (제곱 승)
D = E ** F; //D = E^F(E의 F승)

 

 

  • === (케이스 등가 연산자) / !== (케이스 비등가 연산자)

===, !== 연산자는 ==, != 연산자와 다르게 각각의 피연산자들의 비트를 있는 그대로 비교한다.

표로 정리하면 다음과 같다.

a == b a와 b가 같다. a나 b가 x 또는 z 값을 가지면 결과는 x이다. 0, 1, x
a != b a와 b가 같지 않다. a나 b가 x 또는 z 값을 가지면 결과는 x이다. 0, 1, x
a === b a와 b가 같다. 비트 각각을 비교하므로 비교 대상에 x나 z값도 포함된다. 0, 1
a !== b a와 b가 같지 않다. 비트 각각을 비교하므로 비교 대상에 x나 z값도 포함된다. 0, 1

 

 

  • 비트 단위 연산자

부정(~), and(&), or(|), xor(^), xnor(^~, ~^) 

 

 

  • 축소 연산자

축소 연산자는 하나의 피연산자를 갖는다. 피연산자의 각각의 비트에 대해 연산을 수행하며, 한 비트의 결과를 되돌린다. 

and(&), nand(~&), or(|), nor(~|), xor(^), xnor(~^, ^~)가 있다.

// X = 4'b1010
&X // 1 & 0 & 1 & 0 의 결과를 리턴

xor, xnor의 축소 연산자는 주로 벡터의 짝수, 홀수 패리티 확인에 사용된다. 

 

 

  • 자리 이동 연산자

>>, << 연산자는 벡터의 비트를 오른쪽, 왼쪽으로 자리이동을 하며 피연산자는 각각 자리 이동을 할 벡터와 자리 이동 숫자이다. 자리이동을 하여 비게 된 비트는 0으로 채워진다.

// X = 4'b1100

Y = X >> 1 // Y = 4'b0110 오른쪽으로 1비트 자리 이동
Y = X << 2 // Y = 4'b0000 왼쪽으로 2비트 자리 이동

 

>>>, <<< 연산자의 차이점은 이동 시 부호를 고려한다는 것이다. 

>> 연산자는 비트를 오른쪽으로 이동시키고 남은 비트를 전부 0으로 채우지만, >>> 연산자의 경우 만일 부호가 있는 수라면 남은 비트를 부호 비트의 수로 채운다. 

<<< 연산자는 << 연산자와 마찬가지로 남은 비트를 0로 채운다.

 

 

  • 결합 연산자 { }

결합 연산자는 피연산자들을 하나로 묶는 역할을 수행한다. 이때 피연산자의 크기는 항상 정해져 있어야 한다. 

// A = 1'b1, B = 2'b00, C = 2'b10, D = 3'b110

Y = {B, C} // Y = 4'b0010
Y = {A, B[0], C[1]} // Y = 3'b101

 

 

  • 중복 연산자 { { } }

중복 연산자는 피연산자들을 결합할 때 반복되는 숫자들을 표현하기 위해 사용된다. 

// A = 1'b1, B = 2'b00, C = 2'b10, D = 3'b110

Y = { 4{A} } // Y = 4'b1111
Y = { 4{A}, 2{B}, C } // Y = 10'b1111000010

 


Reference: Samir Palnitkar - Verilog HDL 2판

저작자표시 (새창열림)

'EE > Verilog' 카테고리의 다른 글

[Verilog] 절차적 할당 - 블록킹과 논블록킹  (0) 2023.01.17
[Verilog] initial과 always 구문  (0) 2023.01.16
[Verilog] 데이터 플로우 모델링, assign 연속 할당문  (0) 2023.01.11
[Verilog] 게이트 지연  (0) 2023.01.06
[Verilog] 게이트 수준 모델링  (0) 2023.01.06
    'EE/Verilog' 카테고리의 다른 글
    • [Verilog] 절차적 할당 - 블록킹과 논블록킹
    • [Verilog] initial과 always 구문
    • [Verilog] 데이터 플로우 모델링, assign 연속 할당문
    • [Verilog] 게이트 지연
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바