일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linux makefile 작성
- Pyverilog 설치
- makefile
- 데이터 해저드
- DNN Accelerator
- DNN 가속기
- 딥러닝 가속기
- CUDA
- gcc 컴파일
- gpgpu-sim
- linux c++ 컴파일
- AMBA
- 클럭 게이팅
- Pyvrilog tutorial
- systolic array
- 남산업힐
- pyverilog 설치 오류
- Design DNN Accelerator
- CDC
- Data HAzard
- Pyverilog 튜토리얼
- pygraphviz 설치 오류
- 컨벌루션 연산
- linux c 컴파일
- 이진수 곱셈 알고리즘
- pytest-pythonpath 설치 오류
- Makefile compile
- CLOCK GATING
- Pyverilog 실행
- 대구 반도체 설계기업 특화
- Today
- Total
오늘은 맑음
verilog hdl 설계시 주의할 점(2) 본문
모호한 표현을 사용하지 말자
몇 가지 예시가 있습니다.
1. 동일하지 않은 data width를 가진 신호를 연결하기
input [2:0] in_data;
wire [3:0] a;
assign a = in_data;
이렇게 할당하게 되면 a[3]은 어떠한 값이 될까요?
요즘 컴파일러들은 매우 좋아서 아마 알아서 0으로 채울지도 모릅니다.
하지만 어떤 상황에서 무슨 에러가 발생할지 모르는 코드가 됩니다.
컴파일러에 따라 달라지겠죠.
따라서 위와 같이 매우 모호한 코드는 피해야 합니다.
assign a = {1'b0, in_data};
이런 식으로 사용하지 않는 비트는 꼭 채워주도록 합시다.
2. data overflow 사용하기
counter를 짤 때 마침 딱 8까지 반복해서 숫자를 세는 상황이 발생했습니다.
그래서 변수를 3bit 설정해놓고 계속 더했습니다.
계속 더하다가 3'b111이 되었을 때 다시 0으로 돌리기 위해 1을 더해 overlow를 내버려서 000으로 초기화시켰습니다.
이러한 경우 시뮬레이션에서는 1000이 되기 때문에 상위 1bit는 버리고 3'b000으로 나타나게 됩니다.
하지만 이러한 방법도 오류를 발생할 수 있는 상황을 만들 수 있게 됩니다.
따라서 3'b111이 되었을 때 overflow를 내지 말고 다시 3'b000으로 초기화를 해줍시다.
지금 생각나는 상황을 정리해봤습니다.
물론 컴파일러가 잘 처리 해주겠지만, 항상 에러가 발생하지 않는 정확한 코드를 작성하기 위해 연습하는게 좋다고 생각합니다.
혹시 이후에 생각이 나거나 경험하게 된다면 추가해서 기술하겠습니다.
**컴파일시 발생하는 warning은 모두 잡아주도록 합시다. 이는 verilog hdl뿐만 아니라 다른 언어에서도 마찬가지 입니다.
'Digital logic' 카테고리의 다른 글
verilog 문법(3) part select (0) | 2021.04.24 |
---|---|
Dual port register와 Single port register (2) | 2021.04.22 |
verilog 문법(2) ! 와 ~(산술 부정과 비트단위 부정) (2) | 2021.04.18 |
verilog 문법(1) 결합연산자, 중복연산자 (0) | 2020.07.09 |
xilinx / mutlipliers 합성 결과 (0) | 2020.06.26 |