Verilog 연산자

2020. 10. 10. 03:41·study/Logic Circuit
반응형

1100 && 0101    : 논리 and (이항 연산자)   >      0,x,z가 아닌 정해진 값이면 1   ,   1 and 1이 되서 값은 1
1100 & 0101      : 비트단위 and                > 위치가 같은 비트 끼리 and 연산   , 결과는 0100
& 1100              : 축약 and (단항 연산자)   >                  모든 비트끼리 and   ,  1 and 1 and 0 and 0 = 0 

 

연산자 우선순위

 

수식에서 정수형 수의 처리

integer IntA, IntB, IntC, IntD;
IntA = -12 / 4;                    // The result is -3.
IntB = -'d12 / 4;                  // The result is 1073741821.
IntC = -'sd12 / 4;                 // The result is -3.
IntD = -4'sd12 / 4;               // -4'sd12 is the negative of the 4-bit 1100,
                                       // which is -4. -(-4) = 4. The result is 1.

 

 

산술연산자

  • 피연산자의 비트에 x (unknown)나 z (high-impedance)가 포함된 경우에는 전체 결과 값은 x가 됨, ex) 4/ ?(x) = ?(x)
  • 나누기와 나머지 연산자에서 두 번째 피연산자가 0인 경우, 결과값은 x가 됨 , ex) 4 / 0 = ?(x)
  • 나머지 연산자의 결과 값은 첫번째 피연산자의 부호를 따름 , ex) -8%3 = -2    ,   8%-3 = 2
  • 거듭제곱 연산자에서 다음의 경우에는 결과 값이 정의되지 않음                                                                >> 첫번째 피연산자가 0이고 두 번째 피연산자가 양수가 아닌 경우 , ex) 0^-2 = ?                                          >> 첫번째 피연산자가 음수이고 두 번째 피연산자가 정수 값이 아닌 경우 , ex) -2^0.5  : 허수 

 

관계연산자

  • 산술 연산자보다 낮은 우선 순위를 가짐
  • 피연산자의 비트에 x (unknown) x (unknown)나 z(high-impedance) impedance)가 포함된 경우에는 결과 값은 1비트의 x가 됨
  • 두 피연산자의 비트 수가 다른 경우에는, 비트 수가 작은 피연산자의 MSB 쪽에 0이 채워져 비트 수가 큰 피연산자에 맞추어진 후, 관계를 판단함
  • 피연산자 중 하나가 실수형이면 다른 피연산자가 실수형으로 변환된 후, 비교됨

 

등가연산자

  • 관계 연산자 보다 낮은 우선순위를 가짐
  • 피연산자의 비트끼리 비교
  • 두 피연산자의 비트 수가 다른 경우에는, 비트 수가 작은 피연산자의 MSB 쪽에 0이 채워져 비트 수가 큰 피연산자에 맞추어진 후, 등가를 판단함
  • case equality와 case inequality 연산자( !) ===, !==)는 실제 회로 사용시에는 쓰지 않는게 좋다.

 

논리연산자

  • 참 또는 거짓의 판단이 모호한 경우에는 결과값은 x
  • a&&b(and), a||b(or), !a(not)
  • 0, x, z 가 아닌경우 논리 값은 1
A=3, B=0, C=2'b0x, D= 2'b10                  //논리 값은 순서대로 1, 0 , x , 1
A&&B     // 결과 값은 0
A||B        // 결과 값은 1
'A          // 결과 값은 0
C&&D    // 결과 값은 x

 

 

비트연산자

  • 피연산자의 해당 비트들에 대한 연산을 수행
  • 피연산자의 비트 수가 같지 않으면, 비트 수가 작은 피연산자의 MSB 위치에 0이 채워진 후, 연산됨

and연산에서는 하나가 0 이면 무조건 0 or연산에서는 하나가 1이면 무조건 1
xnor 과 xor 연산
비트부정 연산자

 

축약연산자

  • 단항연산자
  • 피연산자의 단위 비트들에 적용되어 단일 비트의 결과값을 생성
reg[7:0] cnt;                    1의개수가 홀수인지 짝수인지 알 수 있음
assign parity = ^cnt;
assign parity = cnt[7]^cnt[6]^cnt[5]^cnt[4]^cnt[3]^cnt[2]^cnt[1]^cnt[0];

 

축약 and와 축약 nand
축약 or 과 축약 nor
축약 nor 과 축약 xnor
축약 연산자의 연산 결과

 

시프트 연산자

논리 시프트 연산자 (<<, >>)

  • << : 우측 피연산자 값만큼 좌측으로 시프트 후, 비어 있는 비트에 0을 채움
  • >> : 우측 피연산자 값만큼 우측으로 시프트 후, 비어 있는 비트에 0을 채움

산술 시프트 연산자 (>>>, <<<)

  • <<< : 우측 피연산자 값만큼 좌측으로 시프트 후, 비어 있는 비트에 0을 채움
  • >>> : 우측 피연산자 값만큼 우측으로 시프트 후, 비어 있는 비트에 좌측 피연산자의 MSB를 채움

우측 피연산자

  • x 또는 z가 포함된 경우, 시프트 연산의 결과 값은 x
  • 항상 unsigned 수
a*3.75 = 3a + 0.75a                              
         = a + 2a + 0.5a + 0.25a
         = a + a<<1 + a>>1 + a>>2                  연산이 더 빨라진다.
1110 >>1    : 0111
1110 >>>1  : 1111  빈 부분을 MSB로 채운다

 

 

조건 연산자

  • expression1  이 참(1, 즉 0, x 또는 z가 아닌 값)으로 평가되면 expression2의 값이 좌변의 변수에 할당
  • expression1이 거짓(0)으로 평가되면 expression3의 값이 좌변의 변수에 결과 값으로 할당 
  • expression1이 x 또는 z이면(즉, 참 또는 거짓을 판단할 수 없는 모호성이 존재하는 경우), expression2와 expression3을 함께 평가하여 비트 단위로 비교된 값이 좌변의 변수에 할당                                  >>expression3이 real 형 값이 아니면 결과 값은 비트 단위로 비교되어 결정되며, real 형 값인 경우에는 결과 값은 0이 됨
형식       conditional_expression :: = expression1 ? expression2 : expression3 

조건 연산자를 이용한 3상태 버퍼

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

16비트(16가닥) 선 busa에 초기값 할당
drive_busa의 값이 참이면 busa에 data 할당 거짓이면 16'bz 할당

 

 

결합 연산자

  • 중괄호 { }에 의해 묶인 두 개 이상의 표현이 갖는 비트들을 결합                                                                >> 결합되는 피연산자들은 각각의 크기를 결정할 수 있어야 결합이 가능                                                      >> unsized unsized 상수는 결합 연산자로 결합시킬 수 없음

ex

{a, b[3:0], w , 3'b101}                                          >9bit           독립적으로 분리되어 있는 데이터를 하나로 묶는 것
결과 {a, b[3], b[2], b[1], b[0], w, 1'b1, 1'b0, 1'b1}        >9bit

 

  • 대입문의 좌측 또는 우측에 사용 가능
  • 비트 폭이 일치하지 않는 변수의 연산이나 대입이 허용됨                                                                          >> 우변의 비트 폭이 작은 경우, 우변의 MSB에 0을 붙여 연산 됨                                                              >> 좌변의 비트 폭이 우변 보다 작을 경우, MSB는 누락되어 저장
wire [15:0] addr_bus;
assign addr_bus = {addr_hi, addr_lo};          // addr_hi, addr_lo는 8비트 신호
wire [3:0] a, b, sum;                 //4비트 선 a,b,sum
wire carry;                             //1비트 선 carry
assign {carry, sum} = a + b;     // 4비트 데이터의 덧셈은 5비트 결과
                                         // 좌변이 5 비트이므로, 우변의 a+b는 MSB에 0을 붙인 5비트로 연산 됨

 

반복 연산자

  • {a{b}}  의 형태로 표현하여 b를 a회 반복  >> 반복 횟수 a는 0, x, z가 아닌 상수이어야 함

ex)

{4{w}}                                  // {w, w, w, w}와 동일한 표현.
a[31:0] = {1'b1, {0{1'b0}} };       // 우변이 {1'b1}가 되므로 잘못된 표현임.  > 반복횟수가 0
a[31:0] = {1'b1, {1'bz{1'b0}} };   // 우변이 {1'b1}가 되므로 잘못된 표현임.  > 반복횟수가 z
a[31:0] = {1'b1, {1'bx{1'b0}} };   // 우변이 {1'b1}가 되므로 잘못된 표현임.  > 반복횟수가 x
result = {func(w), func(w), func(w), func(w)};
result = {4{func(w)}};                                  // 위의 문장과 동일함.
{b, {3{a, b}}}                                             // {b, a, b, a, b, a, b}와 동일함.

 

반응형

'study > Logic Circuit' 카테고리의 다른 글

할당문  (0) 2020.10.25
게이트 수준 Modeling  (0) 2020.10.10
Verilog 자료형  (0) 2020.10.08
Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙  (0) 2020.10.07
기본  (0) 2020.10.07
'study/Logic Circuit' 카테고리의 다른 글
  • 할당문
  • 게이트 수준 Modeling
  • Verilog 자료형
  • Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • 전체
    오늘
    어제
    • 분류 전체보기
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • 백준 알고리즘
        • CodeUp
        • 코테 이론
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • 개발일지
      • 게임기획
      • Docker
      • IPFS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    verilog
    범주형 자료
    NFT IPFS
    파이썬 딕셔너리
    NFT Marketplace
    ifps 네트워크 지연
    UI
    git 유용한 명령어
    Python
    그리디 알고리즘
    안드로이드
    코딩테스트
    파이썬 그리디
    빅데이터
    Ipfs
    verilog할당문
    nft
    ipfs add
    파이썬 완전탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jjikky
Verilog 연산자
상단으로

티스토리툴바