오늘은 맑음

verilog 문법(4) and/or 비트연산자, 논리연산자 본문

Digital logic

verilog 문법(4) and/or 비트연산자, 논리연산자

자전거 타는 구구 2021. 5. 1. 18:32
반응형

verilog 뿐만 아니라 c/c++에서도 모두 비트연산자와 산술연산자가 있습니다.

논리 연산자는 두 값의 참과 거짓을 반환하고, 비트 연산자는 두 개의 값의 비트를 연산한 결과를 반환합니다.

비트연산자와 논리연산자의 비교

verilog에서 simulation을 통해 결과를 한번 알아보겠습니다.

 

입력 신호는 아래와 같습니다.

  • in_data1 : 4비트의 입력
  • in_data2 : 4비트의 입력

출력 신호는 아래와 같습니다.

  • out_logical_and : in_data1 && in_data2
  • out_logical_or : in_data1 || in_data2
  • out_bit_and : in_data1 & in_data2
  • out_bit_or : in_data1 | in_data2

 

시뮬레이션 결과는 다음과 같습니다.

산술/비트 연산자 시뮬레이션 결과

 입력 데이터의 변화에 따른 각각 출력 신호의 변화를 살펴보겠습니다.

 

 처음 in_data1과 in_data2가 모두 4'b0000으로 입력 되었을 때는 모든 출력이 0으로 나오는 것을 보실 수 있습니다.

 

 다음 20ns에서 in_data1이 4'b0001로 스위칭 되었을 때는 out_logical_and는 그래도 0을 유지하지만, out_logical_or는 in_data1에 값이 전달되었으므로 참을 출력하는 것을 볼 수 있습니다. 그리고 out_bit_and는 0을, out_bit_or는 0001과 0000의 or연산 결과인 4'b0001을 출력합니다.

 이 후 40ns, 60ns의 결과를 보게 되면 비트연산자와 논리 연산자의 차이를 보실 수 있습니다.

 

비트 연산자 응용

 입력으로 4비트의 데이터 a가 들어온다고 가정했을 때, 각 비트를 체크하는 방법에 대해 알아보겠습니다.

1. a의 비트가 모두 1일 때 참을 출력

2. a의 비트 중 하나라도 1이 들어오면 참을 출력

 

위의 두 가지 상황을 체크하기 위해서는 다음과 같이 표현할 수 있습니다.

1. assign out_bit_and = a[0] & a[1] & a[2] & a[3]; 혹은 assign out_bit_and = &a;

2. assign out_bit_or = a[0] | a[1] | a[2] | a[3]; 혹은 assign out_bit_or = |a;

 

1번은 모든 비트를 &연산했을 때의 결과를 출력합니다. 즉, 모든 비트가 1일때만 참을 출력합니다.

2번은 모든 비트를 |연산했을 때의 결과를 출력합니다. 즉, 어떤 하나의 비트가 1로 변하면 참을 출력합니다.

 

 

반응형

'Digital logic' 카테고리의 다른 글

Combinational feedback loop란  (3) 2021.05.09
Clock Skew(클록 스큐)  (0) 2021.05.03
verilog 문법(3) part select  (0) 2021.04.24
Dual port register와 Single port register  (2) 2021.04.22
verilog hdl 설계시 주의할 점(2)  (2) 2021.04.21
Comments