전체 글 26

0~10까지 더하는 Dedicated Processor 설계하기

0~10까지 더하는 C언어 코드는 아래와 같습니다. 이를 blockdiagram으로 살펴보면 아래와 같습니다.i = 0, sum = 0 // 첫 번째 CLK각 mux에서 0을 선택해야 하므로 sumSrcMuxSel, iSrcMuxSel 전부 0을 줍니다   sumEn과  iEn에 1을 줘서 다음 CLK에 각 reg의 output으로 값이 나올 수 있게 해줍니다. 아직 reg의 output이 나오지 않으므로 adderSrcMuxSel은 dont care입니다. 아직 outport로 출력단계도 아니므로 OutBuf도 0입니다 while (i두 번째 CLK이 들어오자마자 i_reg의 output으로 값이 나오고 comparator에서 비교를 시작합니다. 추가로 reg의 out이 mux와 adder를 통과하게됩..

컴퓨터구조 2025.04.09

설계 목적에 따른 추상화

adder를 설계시 (ripple-carry adder) 위와 같이 짜야하는데 이걸 8비트 ripple-carry로 만들려면 8개를 이어붙이고 carry 연결하면 복잡해지고 길어짐  하지만 processor 설계를 예를 들면 1. 설계 목적에 따라 추상화 수준이 다름전체 데이터 경로(데이터패스)와 제어 흐름이 어떻게 연결되고 동작하는지를 보는 게 목적임 즉, “동작 흐름 설계”가 핵심이지, 개별 게이트까지 구현하는 게 핵심이 아님. 그래서 Adder는 내부 구조보다 “Adder가 있다”는 사실만 명확하게 표현하면 됨.  2. 합성 도구가 알아서 Gate-Level로 바꿔줌 assign sum = a + b; 위 코드는 컴파일러가 내부적으로 carry-lookahead adder, ripple-carry ..

개념 이것저것 2025.04.06

0~9까지 카운트하는 Dedicated Processor 설계하기

먼저 0~9까지 카운트하는  C언어 코드를 보겠습니다. 이 코드를 그대로 Data Path를 그리고 flow를 따라가보겠습니다.1. A = 0위는 전체적인 DataPath 그림입니다. Control Unit의 상태에 따라 DataPath의 Flow를 보겠습니다.a. 먼저 Control Unit에서 MuxSel = 0을 보내면 Data Path의 Mux에서 '0'을 내보냅니다.      b.그다음 Control Unit에서 En = 1을 보내면 register가 input의 '0'을 output으로 내보냅니다.(다음 CLK에)   c.reg의 output에서 나온  '0'은 비교기와 adder에 들어가게 됩니다. 비교기의 결과값은 Control Unit의 L10, Adder의 결과값은 Mux의 input으..

컴퓨터구조 2025.04.06

Verilog - CLK divider

이번에는 3 basys board에서 제공하는 100MHz clk을 이용해 더 낮은 clk인 10Hz clk을 만들어 보겠습니다.input으로는 clk과 reset을, output으로는 더 낮은 CLK인 o_clk을 선언 해줍니다.100MHz CLK으로 10Hz CLK을 만들기 위해선 100MHz CLK이 10M개 의 파형을 띄울 때마다  o_clk을 1로 띄웠다가 0으로 만들어 주면 됩니다. 아래는 전체 코드입니다. 10M개의 파형의 개수를 세어야 하므로 parameter로 FCOUNT를 선언해주고 10_000_000으로 초기화 해줍니다. FCOUNT(10_000_000)만큼의 파형 개수를 세어야 하므로 노란색으로 강조한 부분처럼 r_counter를 선언해줍니다.always구문 안에서는 output이 ..

Verilog 2025.03.20

Verilog - 4bit full adder testbench

지난번에 마든 4bit_full_adder를 testbench를 돌려서 제대로 돌아가는지 확인하겠습니다.  tb 모듈(tb_4bit_full_adder)을 만들어줍니다.tb 모듈에는 input, output port가 존재하지 않습니다. tb모듈 밖에서 값이 들어오는 것이아니라tb 모듈 내부에서 값을 생성할 것이기 때문입니다.테스트를 위해 지난번 만든 fourbit_full_adder를 인스턴스화해줍니다.인스턴스화한 모듈의 input 부분은 reg를, output 부분은 wire를 선언해서 연결해줍니다.  ※input을 reg로, output을 wire로 선언하는 이유 : 테스트벤치를 작성할 때 저희는 input에 직접 여러 값을 넣어서 바꿔줘야하고 그로 나온 output을 확인할 겁니다.reg는 값을 ..

Verilog 2025.03.16