728x90
[CPU Review]
CPU 동작 Sequence
인스트럭션 Fetch(롬에서 명령어 읽어들임) - Decode(명령어 해석) - Execute(명령어 실행)
STM보드를 예시로 들면,
윗부분이 ST Link
아랫 부분이 컴퓨팅 칩
여기서 ST Link가 프로그래머
[Simulation]
모든 경우에 대해 시뮬레이션하며 디버깅해보자.
cpp
접기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