일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- makefile
- AMBA
- 컨벌루션 연산
- Pyverilog 튜토리얼
- pyverilog 설치 오류
- pygraphviz 설치 오류
- CUDA
- 클럭 게이팅
- DNN 가속기
- Pyvrilog tutorial
- linux c++ 컴파일
- gpgpu-sim
- Pyverilog 설치
- linux c 컴파일
- systolic array
- linux makefile 작성
- 데이터 해저드
- Pyverilog 실행
- CDC
- 대구 반도체 설계기업 특화
- 이진수 곱셈 알고리즘
- Design DNN Accelerator
- DNN Accelerator
- pytest-pythonpath 설치 오류
- CLOCK GATING
- 딥러닝 가속기
- 남산업힐
- Makefile compile
- gcc 컴파일
- Data HAzard
- Today
- Total
오늘은 맑음
verilog 문법(3) part select 본문
verilog hdl을 설계하다 보면 전체 비트에서 일부를 떼어서 사용하는 경우가 발생합니다.
예를 들면, 16-bit color range를 예로 들겠습니다.
16-bit에서 RGB color range는 위와 같습니다.
만약 input [15:0] pixel로 위의 값이 들어올 때 R, G, B를 따로 찢어야 할 때 다음과 같이 표현할 수 있습니다.
reg [4:0] red = pixel[15:11];
reg [5:0] green = pixel[10:5];
reg [4:0] blue = pixel[4:0];
이런 식으로 전체 데이터중 일부를 잘라서 할당하는 행위를 part select라고 합니다.
음.. 그런데 이렇게 상수로 넣게 되면 사용되는 bitwidth가 변경되었을 때 하나하나 수작업 해줘야겠죠??
이럴 때 parameter를 이용해서 part select를 이용하면 참 편하겠죠??
parameter만 변경해주면 bitwidth도 모두 변경되고 알아서 part select도 수행할껍니다.
방법은 아래와 같습니다.
먼저 include된 parameter가 있다고 가정하기 위해 module에서 parameter를 선언해주었습니다.
module test#(
parameter BITWIDTH = 16,
parameter REDWIDTH = 5,
parameter GREENWIDTH = 6,
parameter BLUEWIDTH = 5
)(
input [BITWIDTH-1:0] pixel,
output [REDWIDTH-1:0] red,
output [GREENWIDTH-1:0] green,
output [BLUEWIDTH-1:0] blue
);
assign red = pixel[GREENWIDTH+BLUEWIDTH+:REDWIDTH];
assign green = pixel[BLUEWIDTH+:GREENWIDTH];
assign blue = pixel [BLUEWIDTH-1:0];
endmodule
위와 같이 red, green, blue를 할당하게 해주면 parameter만 변하면 알맞게 part select를 수행합니다.
방식은 다음과 같습니다.
assign a = b[STARTBIT+ : PARTSELECTLENGTH];
앞의 파라미터는 part select를 수행할 시작 bit를 의미하고, 뒤의 파라미터는 시작 bit부터 몇 bit를 select할지 length를 의미합니다.
시뮬레이션으로 보게 되면 아래와 같이 수행됩니다.
'Digital logic' 카테고리의 다른 글
Clock Skew(클록 스큐) (0) | 2021.05.03 |
---|---|
verilog 문법(4) and/or 비트연산자, 논리연산자 (0) | 2021.05.01 |
Dual port register와 Single port register (2) | 2021.04.22 |
verilog hdl 설계시 주의할 점(2) (3) | 2021.04.21 |
verilog 문법(2) ! 와 ~(산술 부정과 비트단위 부정) (2) | 2021.04.18 |