일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Design DNN Accelerator
- 클럭 게이팅
- Pyverilog 실행
- linux c 컴파일
- Makefile compile
- linux c++ 컴파일
- Pyverilog 튜토리얼
- gcc 컴파일
- Data HAzard
- pygraphviz 설치 오류
- DNN Accelerator
- AMBA
- Pyverilog 설치
- 컨벌루션 연산
- gpgpu-sim
- 남산업힐
- CDC
- pyverilog 설치 오류
- DNN 가속기
- 대구 반도체 설계기업 특화
- CUDA
- Pyvrilog tutorial
- linux makefile 작성
- 데이터 해저드
- makefile
- 이진수 곱셈 알고리즘
- 딥러닝 가속기
- systolic array
- pytest-pythonpath 설치 오류
- CLOCK GATING
- Today
- Total
오늘은 맑음
verilog 문법(2) ! 와 ~(산술 부정과 비트단위 부정) 본문
rtl 설계시 !와 ~를 자주 사용합니다.
코드를 예시로 들면 아래와 같습니다.
wire [3:0] a;
reg [3:0] r_out;
always @(posedge CLK, negedge nRST) begin
if(!nRST) begin
r_out <= 'd0;
end else begin
r_out <= ~a;
end
end
nRST이 low일 때 r_out이 0으로 초기화 되고 nRST이 high로 변경되면서 r_out에는 비트 부정 연산자(~)가 쓰인 a가 r_out에 할당됩니다.
이 때 nRST이 low(0)일 때 !를 붙여 high로 만들어 r_out을 초기화 했는데요, !와 ~의 차이는 무엇일까요
!는 논리 부정을 의미하며 ~는 비트단위 부정을 의미합니다.
즉 !는 뒤에 따라오는 식을 판단해서 True와 False만을 반환합니다.
하지만 ~는 비트단위 부정이므로 뒤에 붙는 값의 모든 bit를 부정합니다. 즉 모든 비트를 low -> high로, high -> low로 변경시킵니다.
간단한 시뮬레이션을 통해 값을 확인해보겠습니다.
처음 4-bit의 a는 0으로 초기화 되어있습니다.
이 때 !a를 할당받은 exclamation은 True를 가집니다.
하지만 ~a를 할당받은 tilda 0000의 비트 부정인 1111를 갖게 됩니다.
이 후 a에 1을 할당 했을 때 exclamation은 False를 갖게 되고 tilda는 1의 비트단위 부정인 e를 갖게 됩니다.
저는 누군가 차이점을 물어봤을 때 멈칫했던 적이 있습니다.
항상 기계적으로 사용했지만, 한 번에 대답을 못 한 경험을 반성하며 마무리 하겠습니다.
'Digital logic' 카테고리의 다른 글
Dual port register와 Single port register (2) | 2021.04.22 |
---|---|
verilog hdl 설계시 주의할 점(2) (2) | 2021.04.21 |
verilog 문법(1) 결합연산자, 중복연산자 (0) | 2020.07.09 |
xilinx / mutlipliers 합성 결과 (0) | 2020.06.26 |
verilog 모듈 설계시 팁(2) (0) | 2020.05.04 |