EunSeong Lee Portfolio
Project
AI_mini_prj
Avoid Bullets
Digital Clock
Subsubcategory 1
Subsubcategory 2
post-03
Study
AI Algorithm Structure
LAB
ASIC FrontEnd
post-01
post-02
Arm Architecture
post-01
CMOS VLSI Design
LAB
THEORY
CPU Design
CODE
LAB
THEORY
FPGA
LAB
THEORY
comment system
Home
markdown
portfolio
Contact
Copyright © 2024 |
Yankos
Home
>
Study
>
CPU Design
> THEORY
Please wait ...
THEORY
Day5
DAY5 ✅ Dedicated Processor RegFile R1 = 0; R2 = 0; while(R1 <= 10){ R2 = R2 + R1; R1 = R1 + 1; OutPort = R2; } ✅ 동작방식 ✅ RegFile Asm ✅ 코드 DataPath.sv `timescale 1ns / 1ps module DataPath( input logic clk, input logic reset, input logic RFSrcMuxSel, input logic [2:0] RAddr1, input logic [2:0] RAddr2, input logic [2:0] WAddr, input logic we, output logic R1Le10, input logic OutPortEn, output logic [7:0] OutPort ); logic [7:0] AdderResult, RFSrcMuxOut; logic [7:0] RData1, RData2; mux_2X1 U_RFSrcMux ( .sel (RFSrcMuxSel), .x0 (AdderResult), .x1 (1), .y (RFSrcMuxOut) ); RegFile U_RegFile ( .clk (clk), .RAddr1 (RAddr1), .RAddr2 (RAddr2), .WAddr (WAddr), .we (we), .WData (RFSrcMuxOut), .RData1 (RData1), .RData2 (RData2) ); comparator U_R1Le10 ( .a (RData1), .b (8'd10), .lt (R1Le10) ); adder U_Adder ( .a (RData1), .b (RData2), .sum (AdderResult) ); register U_OutPort ( .clk (clk), .reset (reset), .en (OutPortEn), .d (RData1), .q (OutPort) ); endmodule module RegFile ( input logic clk, input logic [2:0] RAddr1, input logic [2:0] RAddr2, input logic [2:0] WAddr, input logic we, input logic [7:0] WData, output logic [7:0] RData1, output logic [7:0] RData2 ); logic [7:0] mem [0:2**3-1]; // 8bit 8개 (Addr 개수) always_ff @(posedge clk) begin if(we) begin mem[WAddr] <= WData; end end assign RData1 = (RAddr1 == 0) ? 8'b0 : mem[RAddr1]; assign RData2 = (RAddr2 == 0) ? 8'b0 : mem[RAddr2]; endmodule module register ( input logic clk, input logic reset, input logic en, input logic [7:0] d, output logic [7:0] q ); always_ff @(posedge clk or posedge reset) begin if(reset) begin q <= 0; end else begin if(en) begin q <= d; end end end endmodule module mux_2X1 ( input logic sel, input logic [7:0] x0, input logic [7:0] x1, output logic [7:0] y ); always_comb begin y = 8'b0; case (sel) 1'b0: y = x0; 1'b1: y = x1; endcase end endmodule module adder ( input logic [7:0] a, input logic [7:0] b, output logic [7:0] sum ); assign sum = a + b; endmodule module comparator ( input logic [7:0] a, input logic [7:0] b, output logic lt ); assign lt = a <= b; endmodule ControlUnit
Study
· 2025-08-12
Day4
DAY4 CPU(Central Processing Unit) 중앙처리장치 ✅ CISC vs RISC CISC vs RISC CISC(Complex Instruction Set Computer) RISC(Reduced Instruction Set Computer) 특징 (Feature) RISC (축소 명령어 집합 컴퓨터) CISC (복잡 명령어 집합 컴퓨터) 명령어 적고 단순, 길이가 고정 많고 복잡, 길이가 가변적 실행 속도 (CPI) 한 클럭에 한 명령어 처리를 지향 (CPI ≈ 1) 한 명령어가 여러 클럭을 소모 (CPI > 1) 설계 복잡성 하드웨어는 단순, 소프트웨어(컴파일러)가 복잡 하드웨어가 복잡, 소프트웨어(컴파일러)는 단순 메모리 접근 LOAD, STORE 등 전용 명령어로만 접근 다양한 명령어가 직접 메모리에 접근 가능 레지스터 범용 레지스터가 많고 활용도 높음 범용 레지스터 수가 비교적 적음 파이프라이닝 구조가 단순하여 파이프라이닝에 매우 효율적 명령어가 복잡하고 길이가 달라 파이프라이닝이 복잡함 전력 소비 일반적으로 전력 소비가 적음 일반적으로 전력 소비가 많음 가격 CISC보다 가격이 저렴 트랜지스터가 많이 들어가기 때문에 가격이 비쌈 MIPS(Microprocessor without Interlocked Pipeline Stages) 파이프라인 기술을 효율적으로 사용해 프로세서의 성능을 높이는 데에 초점을 맞춘 설계 방식 고정 길이의 단순한 명령어 파이프라인(Pipelining) 최적화 파이프라인은 명령어 처리 과정을 ‘명령어 인출(IF) → 해석(ID) → 실행(EX) → 메모리 접근(MEM) → 결과 저장(WB)’의 5단계 로드-스토어 (Load-Store) 구조 많은 수의 범용 레지스터 ✅ 폰노이만 구조 vs 하버드 구조 폰노이만 구조 하버드 구조 ✅ RISC-V UC 버클리에서 개발중인 무료 오픈 소스 RISC 명령어셋 아키텍처 MIPS 구조와 거의 비슷하다. ✅ 목표 Single Cycle Processor 모든 명령어가 1clock 내에 실행 Multi Cycle Processor 명령어 종류에 따라 실행 clock수가 다르다. pipe-line 구조 CPU ✅ Dedicated Processor Counter 0~9까지 카운트하는 Processor를 설계하시오. C 구현 // C언어 관점 A = 0; while (A < 10){ output = A; A = A + 1; } halt; // A를 중심에 놓고 생각 // A를 하드웨어적으로 구현한다 생각하면 -> A 레지스터 DataPath 구조 설계 및 ASM chart -> Control Unit 설계 Block Diagram State Machine ⚒️ 코드 ⚒️ ⚒️[DedicatedProcessor Counter.sv] ✅ Dedicated Processor Adder 0~10까지 누적으로 더하는 Dedicated Processor를 설계하시오. C 구현 // C언어 관점 A = 0; SUM = 0; while (A < 11){ SUM = SUM + A; A = A + 1; output = SUM; } halt; DataPath 구조 설계 ASM chart -> Control Unit 설계 ⚒️ 코드 ⚒️ ⚒️[DedicatedProcessor Adder.sv] ✅ TestBench `timescale 1ns / 1ps module tb_DedicatedProcessor_Adder (); logic clk; logic reset; logic [3:0] fndCom; logic [7:0] fndFont; DedicatedProcessor_Adder U_DedicatedProcessor_Adder (.*); always #5 clk = ~clk; initial begin clk = 0; reset = 1; #10; reset = 0; end endmodule 시뮬레이션 ✅ 동작 영상
Study
· 2025-08-11
Day3
DAY3 ✅ UART (Universal Asynchronous Receiver/Transmitter) 1. 비동기 통신의 정의 동기(Synchronous) 송수신 장치가 동일한 클록 신호를 공유 데이터와 클록이 함께 전송됨 예: SPI, I2C 비동기(Asynchronous) 송수신 장치가 클록 신호를 공유하지 않음 각자 내부 타이머로 비트 타이밍을 맞춤 예: UART 2. UART가 비동기인 이유 클록 라인이 없음 UART는 TX와 RX 두 선만 사용 클록 신호 없이 데이터만 전송 Start/Stop 비트로 동기화 데이터 프레임 시작: Start bit(0) 데이터 프레임 종료: Stop bit(1) 수신 측은 Start bit 감지 후 내부 타이머로 비트 샘플링 Baud Rate로 시간 동기화 속도, bps, 주파수, 시간 정해놓은 시간마다 데이터를 주고 받음 송신 측과 수신 측이 동일한 baud rate로 약속 클록이 없으므로, 오차 범위 내에서만 정상 수신 가능 3. 동작 원리 Idle 상태 라인은 기본적으로 HIGH(1) 상태 Start Bit 통신 시작 시 1비트 길이의 LOW(0) 신호 전송 Data Bits LSB부터 순차적으로 전송 (일반적으로 8비트) Parity Bit (옵션) 데이터 전송 중 오류 검출용 (Even, Odd) 데이터의 1의 개수가 짝수, 홀수에 맞춰서 동작 안 쓰는 이유는❓ Stop Bit 1비트 길이의 HIGH(1) 신호로 전송 종료 표시 수신 측 스타트 비트를 감지 후 정해진 baud rate에 맞춰 비트 샘플링 Frame 1~5번까지의 과정을 1프레임 ✅ SPI (Universal Asynchronous Receiver/Transmitter) ✅ 비교 (UART vs SPI vs I2C) 구분 UART SPI I2C 동기방식 비동기 동기 동기 관계 수 1:1 1:N N:N 선 개수 2개 (TX, RX) 4개 (MISO, MOSI, SCK, CS) 2개 (SCL, SDA) 속도 중간 (bps~Mbps) 매우 빠름 (수십 Mbps) 중간 (100k~3.4Mbps) 장점 간단, 저전력 빠름, 풀듀플렉스 다중 장치 연결 용이
Study
· 2025-08-08
Day2
DAY2 ✅ 조합논리회로 vs 순차논리회로 항목 조합논리회로 순차논리회로 동작 기준 현재 입력에만 의존 현재 입력 + 과거 상태(레지스터 등) 클록 사용 여부 클록 사용 안 함 클록 사용 (동기식 설계) 메모리 기능 없음 있음 (상태 저장 가능) 예시 AND, OR, MUX 등 FSM, 레지스터, 카운터, 메모리 등 💡 조합 논리는 빠르지만 타이밍 제어가 어렵고 글리치(glitch) 발생 가능성 있음. 💡 순차 논리는 동기식으로 안정적이고 제어가 쉬움. ✅ Latch 와 Flip-Flop Latch 클록 신호 없이 동작 입력 신호에 민감하게 반응 메모리 기능 있음 Flip-Flop 클록 엣지(상승/하강)에 반응 엣지 트리거 방식으로 동작 더 안정적인 메모리 소자 ✅ SR Latch Q와 /Q는 항상 반대여야 함. 상태 설명: S R Q(next) 설명 0 0 유지 이전 상태 유지 0 1 0 Reset 상태 1 0 1 Set 상태 1 1 불안정 금지 상태 (발진 가능) ✅ D Latch 입력을 단일화하여 S= D, R = D’ 형태로 구성 Gate 신호가 enable 역할 클록에 민감 (레벨 트리거 방식) ✅ Gated D Latch & D Flip-Flop Gated D Latch: Gate 신호가 high일 때만 입력 허용 D Flip-Flop (Master-Slave 구조) Master: 클록 Low일 때 입력 저장 Slave: 클록 High일 때 출력 전달 상승엣지 또는 하강엣지에서만 출력 변화 (엣지 트리거) ✅ 메타스테이블(Metastable) 클록 엣지 시점에 입력(D)이 변하면 출력이 일정 시간 동안 불안정 상태에 빠질 수 있음 이를 메타스테이블 현상이라 함 중요 Timing Spec 항목 설명 Setup Time 클록 엣지 이전에 D 입력이 안정적으로 유지되어야 하는 최소 시간 Hold Time 클록 엣지 이후에도 D 입력이 유지되어야 하는 최소 시간 ✅ Synchronizer 비동기 입력을 동기화하는 구조 D Flip-Flop 2개 이상 직렬 연결 첫 번째 F/F: 신호 수신 두 번째 F/F: 안정된 출력 생성 메타스테이블 방지를 위한 대표적 설계 기법 ✅ 전파 지연 시간 (Propagation Delay) 클록 → 출력까지 걸리는 시간 조합 회로의 깊이에 비례 예: 곱셈 연산이 많은 FFT 회로는 레지스터 삽입 필요 📌 데이터시트에서는 clock-to-Q delay, t_pd, t_co 등으로 명시됨 ✅ 글리치(Glitch) 조합 논리에서 입력이 동시에 변하지 않으면, 전파 지연 차이로 인해 일시적인 오류 출력 발생 가능 클록 엣지 직전 글리치 발생 시 시스템 오동작 가능성 있음 → 복잡한 조합 논리는 피하고, 순차 회로로 나누어 설계하는 것이 안전함 ✅ 파이프라이닝 기법 연산 중간에 레지스터 삽입으로 클록 주기를 분할 복잡한 연산을 여러 클록 사이클에 나누어 처리 가능 조합 논리 길이를 줄여 글리치 방지 및 클록 여유 확보 ✅ AMBA APB 예시 AMBA APB 프로토콜도 메타스테이블과 클록 도메인 이슈를 고려하여 설계됨 동기화 구조 반영 필요 ✅ 보완 및 추가 설명 타이밍 분석은 FPGA/ASIC 설계의 핵심 Setup/Hold violation은 기능적 문제 유발 CDC (Clock Domain Crossing) 설계에서는 synchronizer 필수 글리치를 줄이기 위한 방법 입력 신호 동기화 레지스터 삽입 (타이밍 여유 확보) 순차 논리 설계에서의 핵심 원칙 항상 클록 경계 기준으로 상태 변화 설계 조합 논리는 최소화 타이밍 분석은 FPGA/ASIC 설계의 핵심 요소 Setup / Hold 타이밍 위반이 발생하면 회로 동작이 비정상적으로 될 수 있음 타이밍 제약 조건을 만족하도록 설계하고, STA(Static Timing Analysis) 필수 수행 CDC (Clock Domain Crossing) 설계 서로 다른 클록 도메인을 오갈 때 메타스테이블 위험 해결 방법: 2단 이상 D Flip-Flop 직렬 연결 (Synchronizer) Handshake 또는 FIFO 구조 사용 글리치(Glitch) 줄이기 위한 방법 입력 신호는 반드시 클록 도메인에 동기화 조합 논리 길이가 길 경우 중간에 레지스터 삽입하여 안정화 하나의 클록 사이클 내에 연산이 끝나도록 설계 순차 논리 설계 핵심 원칙 모든 상태 변화는 클록 엣지 기준으로 결정되어야 함 조합 논리는 최소화하여 타이밍 복잡도를 줄이고, 유지/확장 가능한 설계 지향
Study
· 2025-08-07
Day1
DAY3
Study
· 2025-08-06
<
>
Touch background to close