728x90
1. Pipeline이란?
- 기본 개념
- 데이터의 출력이 다음 단계의 입력으로 연결되는 연속적인 연산 구조를 의미한다.
- 각 단계(stage) 사이에는 데이터를 저장하는 버퍼(Register, Flip-Flop)가 사용될 수 있음
- 하드웨어에서 데이터는 클록(Cycle)과 동기화되어 흐름을 유지함
- 파이프라인의 필요성
- 성능 향상: 연산을 병렬적으로 수행하여 처리 속도를 증가시킴
- Throughput 증가: 각 Cycle마다 새로운 입력을 받아 처리할 수 있음
- 클럭 동기화: Timing Violation을 방지하고, 안정적인 연산을 수행하기 위해 레지스터 활용
==========𝔼𝔼𝟚𝟚==========
2. 주요 용어 개념
- Latency
- 입력값을 넣은 후 결과가 출력될 때까지 걸리는 시간(=Cycle 수)
- 예제) 3단계 연산(3개의 Register)을 포함한 경우, Latency = 3 Cycles
- Throughput
- 단위 시간(Clock Cycle)당 처리할 수 있는 데이터의 양
- Throughput = 1 Cycle당 처리 가능한 데이터 개수
- 파이프라인을 적용하면 매 Cycle마다 새로운 데이터 처리 가능 → Throughput이 증가
- 동기화와 Timing
- 클럭(Cycle) 내에서 데이터를 정확히 처리하기 위해 Timing 설계가 중요함
- 비동기식 연산(Asynchronous)에서는 Timing Violation이 발생할 수 있음
- Pipeline Stages를 추가하여 Timing을 맞추고 처리 속도를 일정하게 유지할 수 있음
==========𝔼𝔼𝟚𝟚==========
3. 파이프라인 예제 (Verilog 설계)
3.1 목표
# 8승(Exponentiation by 8)을 계산하는 파이프라인 구조
- 입력값(Input)을 받아서 곱셈(Multiplication) 후 저장(Register)
- 총 3개의 Pipeline Stages를 거쳐 최종 출력(Output)
- 각 Stage마다 Flip-Flop을 사용하여 데이터 보관
_
3.2 파이프라인을 적용하지 않은 경우 (순차적 연산)
- 코드 예제
module no_pipeline (
input logic clk,
input logic reset,
input logic [15:0] in,
output logic [63:0] out
);
always_ff @(posedge clk or posedge reset) begin
if (reset)
out <= 0;
else
out <= in * in * in * in * in * in * in * in; // 8승 계산 (Sequential)
end
endmodule
- 문제점
- 입력을 받으면 모든 연산을 한 Cycle 내에서 수행해야 함
- 연산량이 많아지면 Timing Violation 발생 가능성이 커짐
- 결과가 나오기 전까지 새로운 입력을 받을 수 없음 (Throughput 낮음)
_
3.3 파이프라인 적용 (3단계 구조)
- 예제 코드 : 연산을 나누어 수행
module pipeline (
input logic clk,
input logic reset,
input logic [15:0] in,
output logic [63:0] out
);
logic [31:0] stage1; // 1단계: 제곱
logic [47:0] stage2; // 2단계: 4승
logic [63:0] stage3; // 3단계: 8승
always_ff @(posedge clk or posedge reset) begin
if (reset) begin
stage1 <= 0;
stage2 <= 0;
stage3 <= 0;
end else begin
stage1 <= in * in; // 제곱
stage2 <= stage1 * stage1; // 4승
stage3 <= stage2 * stage2; // 8승
end
end
assign out = stage3; // 최종 출력
endmodule
- 개선된 점
- Latency: 3 Cycles (입력 후 3 Cycle 뒤에 출력이 나옴)
- Throughput: 1 Cycle (매 Cycle마다 새로운 입력을 받아 연산 가능)
- 병렬 처리: 각 Stage에서 다른 데이터를 연산하므로 CPU보다 빠른 연산 가능
==========𝔼𝔼𝟚𝟚==========
4. H/W vs S/W 성능 비교
4.1 소프트웨어 연산
- CPU 기반 루프 연산은 순차적(Sequential)으로 동작
- 클럭이 3GHz이고, 3 Cycle마다 결과가 나온다고 가정하면 300 Cycles 필요
for (int i = 0; i < 100; i++) {
output[i] = input[i] * input[i] * input[i] * input[i] *
input[i] * input[i] * input[i] * input[i]; // 8승
}
- 문제점)
- 연산이 많아질수록 CPU 부하 증가
- 병렬 연산 불가능 → 처리 속도 낮음
_
4.2 하드웨어 연산 (FPGA)
- FPGA에서 파이프라인 구조를 적용하면 매 Cycle마다 결과를 출력 가능
- 클럭이 1GHz인 경우, 102 Cycle 내 연산 종료 (Latency 포함)
- 연산이 많아질수록 하드웨어의 병렬 처리 능력이 더욱 유리함
==========𝔼𝔼𝟚𝟚==========
5. 정리
- 파이프라인(Pipeline) : 연산을 병렬적으로 수행하여 성능을 향상시키는 기법
- Latency : 입력 후 결과가 나올 때까지 걸리는 시간 (Cycle 수)
- Throughput : 단위 시간(Clock Cycle)당 처리할 수 있는 데이터 양
- 하드웨어는 소프트웨어보다 병렬 연산에 최적화되어 있으며, AI와 같은 대량 연산에 유리함.
- 파이프라인을 활용하면 매 Cycle마다 데이터를 처리할 수 있어 성능이 향상됨
728x90
반응형
'Study > FPGA' 카테고리의 다른 글
| 09. AXI4-Lite 개념 (+standard와의 차이점) (0) | 2025.03.11 |
|---|---|
| 08. Handshake 개념 (0) | 2025.03.08 |
| 06 - Verilog Module 모듈과 Instance 인스턴스화 개념 (0) | 2025.03.08 |
| 05 - 동기 Synchronous vs. 비동기 리셋 Reset (0) | 2025.03.03 |
| 04 - FPGA 설계 흐름 (Design Flow) (0) | 2025.03.01 |