본문 바로가기
# Semiconductor/- Semicon Academy

[Harman 세미콘 아카데미] 92일차 - Verilog(CPU Review / 시뮬레이션)

by Graffitio 2023. 11. 15.
[Harman 세미콘 아카데미] 92일차 - Verilog(CPU Review / 시뮬레이션)
728x90
반응형
[CPU Review]

 

CPU 동작 Sequence

인스트럭션 Fetch(롬에서 명령어 읽어들임) - Decode(명령어 해석) - Execute(명령어 실행)

 

STM보드를 예시로 들면,

윗부분이 ST Link

아랫 부분이 컴퓨팅 칩

여기서 ST Link가 프로그래머

 


 

[Simulation]

 

 

모든 경우에 대해 시뮬레이션하며 디버깅해보자.

 

module tb_processor();

    reg clk, reset_p;
    reg [3:0] key_value;
    reg key_valid;
    wire [7:0] outreg_data;
    wire [3:0] kout; // key로 입력된 값을 출력(프로세스가 키 값을 제대로 받는 지 확인하기 위한 것)
    
    processor DUT(clk, reset_p, key_value, key_valid, outreg_data, kout);
    
    // 초기화(입력만 초기화 해준다.)
    initial begin
        clk = 0;
        reset_p = 1;
        key_value = 0;
        key_valid = 0;
    end
    
    // clock
    always #4 clk = ~clk;
    
    integer i, j, k;
    
    initial begin
        #8;
        reset_p = 0; #8; // 리셋 풀어주고
        
        for(k = 10; k< 15; k=k+1) begin
            for(i = 0 ; i < 10 ; i = i+1) begin
                for(j = 0 ; j < 10 ; j = j+1) begin
                    key_value = i; key_valid = 1; #10_000;
                    key_value = 0; key_valid = 0; #10_000;  //key 에서 손을 똄
                    key_value = k; key_valid = 1; #10_000; //14: 연산자 입력 0~9는 숫자 F = 이퀄 
                    key_value = 0; key_valid = 0; #10_000; //key 에서 손을 똄
                    key_value = j; key_valid = 1; #10_000;// 숫자 입력
                    key_value = 0; key_valid = 0; #10_000;//key 에서 손을 똄
                    key_value = 4'b1111; key_valid = 1; #10_000; //equal을 주면 f =1111
                    key_value = 0; key_valid = 0; #10_000;
                    $display("%d %d %d = %d : %x  \n", i, k, j, outreg_data, kout);
                end
            end
        end
        $stop;
        //a : add b : sub c : and d : div e : mul f : equal
    end
endmodule

 

 

사칙연산과 논리연산 모두 정상적으로 시뮬레이션된다.

 


 

728x90
반응형