CPU Course Review - 05. Accumulator (0 ~ 9)

2025. 2. 10. 17:41·AI SOC COURSE/SYSTEM VERILOG (CPU 설계)

1. Title

0 ~ 9 까지 누산 하는 시스템 설계


2. Category

"System Verilog", "BASYS3", "VIVADO"

 

3. Key Concepts

Convert C Code to SystemVerilog

 

4. Setup

 


C 코드로 구현된 0~9까지 누산하는 프로그램을 SystemVerilog로 구현한다.

 

5. Code Review

module Dedicated_Processor_Accumulator(
        input logic clk, reset,
        output [7:0] outbuf
    );

    logic AsrcMUXsel, BsrcMUXsel, ALoad, BLoad, Alt10;

    control_unit U_CONTROLLER(
        .*
    );

    data_path U_DATA_PATH(
        .*
    );

endmodule

 

 

module control_unit (
    input  logic  clk, reset,
    input  logic  Alt10,
    output logic  AsrcMUXsel, BsrcMUXsel, ALoad, BLoad
);

    typedef enum bit [2:0] {S0, S1, S2, S3} state_e;
    state_e state, next_state;

    always_ff @( posedge clk, posedge reset ) begin
        if(reset) begin
            state <= S0;
        end else begin
            state <= next_state;
        end
    end

    always_comb begin

        next_state = state;
        AsrcMUXsel = 0;
        BsrcMUXsel = 0;
        ALoad = 0;
        BLoad = 0;

        case (state)
            S0: begin
                AsrcMUXsel = 0;
                BsrcMUXsel = 0;
                ALoad = 1;
                BLoad = 1;
                next_state = S1;
            end
            
            S1: begin
                AsrcMUXsel = 0;
                BsrcMUXsel = 0;
                ALoad = 0;
                BLoad = 0;

                if(Alt10) begin
                    next_state = S2;
                end else begin
                    next_state = S3;
                end
            end
            
            S2: begin
                AsrcMUXsel = 1;
                BsrcMUXsel = 1;
                ALoad = 1;
                BLoad = 1;
                next_state = S1;
            end
            
            S3: begin
                AsrcMUXsel = 0;
                BsrcMUXsel = 0;
                ALoad = 0;
                BLoad = 0;
                next_state = S3;
            end
        endcase
        
    end

endmodule
module data_path (
    input   logic clk, reset,
    input   logic AsrcMUXsel, BsrcMUXsel, ALoad, BLoad,
    output  logic Alt10,
    output  logic [7:0] outbuf
);

    logic [7:0] A_adder_result, B_adder_result, AsrcMUXout, BsrcMUXout, Aregout, Bregout;

    mux_2x1 U_A_MUX_2X1(
        .sel(AsrcMUXsel),
        .x0(8'b0), .x1(A_adder_result),
        .y(AsrcMUXout)
    );
    
    mux_2x1 U_B_MUX_2X1(
        .sel(BsrcMUXsel),
        .x0(8'b0), .x1(B_adder_result),
        .y(BsrcMUXout)
    );

    register U_A_REGISTER(
        .clk(clk), .reset(reset),
        .load(ALoad),
        .d(AsrcMUXout),
        .q(Aregout)
    );
   
    register U_B_REGISTER(
        .clk(clk), .reset(reset),
        .load(BLoad),
        .d(BsrcMUXout),
        .q(Bregout)
    );

    adder U_A_ADDER(
        .a(Aregout),
        .b(8'h01),
        .sum(A_adder_result)
    );

    adder U_B_ADDER(
        .a(Bregout),
        .b(Aregout),
        .sum(B_adder_result)
    );

    comparator U_COMPERATOR(
        .a(Aregout),
        .b(8'd10),
        .lt(Alt10)
    );
    
    register U_OUT_REGISTER(
        .clk(clk), .reset(reset),
        .load(clk),
        .d(Bregout),
        .q(outbuf)
    );

endmodule

 

6. Testing and Debugging

* Testing Tools: VIVADO, Modelsim

module tb_Dedicated_Processor(

    );

        logic clk, reset;
        logic [7:0] outbuf;

    Dedicated_Processor_Accumulator DUT(
        .*
    );

    always 
        #5 clk = ~clk;

    initial begin
        clk = 0;
        reset = 1;

        #20 reset = 0;

    end


endmodule

'AI SOC COURSE > SYSTEM VERILOG (CPU 설계)' 카테고리의 다른 글

CPU Course Review - 07. Register  (0) 2025.02.11
CPU Course Review - 06. TestBench Revision  (0) 2025.02.11
CPU Course Review - 04. Counter (0 ~ 9)  (0) 2025.02.10
CPU Course Review - 03. CPU Overview  (0) 2025.02.10
CPU Course Review - 02. TestBench  (0) 2025.02.10
'AI SOC COURSE/SYSTEM VERILOG (CPU 설계)' 카테고리의 다른 글
  • CPU Course Review - 07. Register
  • CPU Course Review - 06. TestBench Revision
  • CPU Course Review - 04. Counter (0 ~ 9)
  • CPU Course Review - 03. CPU Overview
Dinoj
Dinoj
  • Dinoj
    AlOG
    Dinoj
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • PCB 이론 (13)
        • PI (2)
        • SI (11)
      • 회로 이론 (63)
        • 기타 학습 (20)
        • UVM (Universal Verification.. (12)
        • AI HARDWARE (12)
        • COMPUTER VISION (18)
        • Python (Pytorch) (1)
      • PROJECTS (29)
        • AI 가속기 (10)
        • 영상 처리 (3)
        • UVM (Universal Verification.. (2)
        • CPU 설계 (5)
        • CMOS VLSI (2)
        • Verilog (2)
        • Firmware (2)
        • C 언어 (2)
        • 기타 프로젝트 (1)
      • Linux (18) N
        • Embedded Linux (Rpi) (7)
        • Petalinux (5) N
        • Linux 기초 (6)
      • AMBA BUS (16)
        • AXI BUS (5)
        • APB BUS (2)
        • Vitis (8)
      • AI SOC COURSE (53)
        • 영상 처리 (5)
        • SYSTEM VERILOG (CPU 설계) (20)
        • VERILOG 기초 (5)
        • CMOS VLSI (7)
        • FIRMWARE (9)
        • C PROGRAMMING (1)
        • Python (Keras) (6)
      • 코딩 지식 (5)
        • SYSTEM VERILOG (3)
        • TCL (2)
      • TISTORY (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 관리
    • Info
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Dinoj
CPU Course Review - 05. Accumulator (0 ~ 9)
상단으로

티스토리툴바