2023년 12월 30일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [2]/ALU8 의 RTL

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [2]

II. 예제 ALU8의 베릴로그 RTL

    II-1. 폴더 구조
    II-2. 예제 ALU의 베릴로그 RTL 구성
-------------------------------------------------------------- 

II. 예제 ALU8 의 RTL

II-1. 폴더 구조

8비트 ALU의 예제 파일을 [다운로드 링크]에서 내려받을 수 있다.  배포되는 디지인 킷에도 포함 되어 있다. 예제의 압축을 풀면 여러 하위 폴더를 가진 구조를 취하는데 이 구조를 유지하면 설계 관리에 매우 유리하다.

+---------------------------+
| ~/ETRI050_DesignKit/v.1a/ |
+-------+-------------------+
        |
        +-- Tools : Open-source archives

        |

        +-- digital_ETRI -> digital_ETRI050_m2d (symbolic link)
        |

        +-- pads_ETRI050

        |
        +-- scripts
        |
        +-- tech
        |
        +-- Ref_Design/ALU8 Project Home
                         |
                         +-- log
                         |
                         +-- source : RTL Verilog
                         |
                         +-- layout : P&R results
                         |
                         +-- simulation : C++ Tectbench
                         |
                         +-- synthesis : Synthesized netlists

높은 추상화 수준의 언어를 다루는 컴파일러(합성기)는 낮은 단계로 전이 시키면서 수많은 임시 파일들을 만들어 낸다. 이들 중간 단계의 파일들은 오류나 오동작 시 디버깅 용도로 적절히 활용될 수 있다. 정상처리된 경우에 불필요 할 수 도 있다. 단계마다 생성되는 중간 단계의 파일들이 한 곳에 저장되면 매우 혼란 스럽다. 불요한 중간 파일들을 정리하면서 정작 중요 파일들을 지우는 실수를 범하지 않도록 주의해야 한다. 이를 방지하기 위해 위와 같은 폴더 구조를 유지하면 파일들의 관리가 용이하다. 모든 관리 도구들이 청소(clean) 메뉴를 가지고 있는 이유다. 위의 폴더 구조에서 최초의 원시 베릴로그 파일들은 source 에, 테스트벤치 C++와 헤더 파일은 simulation에, 그리고 최종적으로 제작도면 GDS 는 layout 폴더에서 있다.

II-2. 예제 ALU의 베릴로그 RTL

예제 ALU8 은 8비트 마이크로 컨트롤러에 활용 가능한 산술논리 연산 유닛(Arithmetic-Logical Unit)이다. 8비트 가감산(ADD, SUB)과 논리연산(AND, OR, XOR, NOT) 기능을 가지며 누산기(Accumulator) 및 플래그(Flag)를 출력한다.

module ALU( clk, reset, op, shr, AI, BI, CI, CO, BCD, OUT, V, Z, N, HC, RDY );
input clk;
input reset;
input shr;
input [3:0] op;    // Operation
input [7:0] AI;
input [7:0] BI;
input CI;
input BCD;    // BCD style carry
output [7:0] OUT;
output CO;
output V;
output Z;
output N;
output HC;
input RDY;

ALU 모듈의 외곽 모습을 보면 클럭과 리셋 입력을 포함해 총 39개의 입출력 핀이 필요하다. KION의 '내칩(My Chip) MPW'에서 제작해 주는 칩의 크기(패드 제외 1,000umx1,000um)와 패키지(28 핀)의 조건에 비해 핀의 갯수가 너무 많다. 입출력 핀의 제한에 걸리므로 적절한 외부 인터페이스 방법을 강구해야 한다. 두 입력 레지스터 AI 및 BI 와 명령 op, 그리고 캐리 CIBCDSHR 을 묶어 선택토록 하며 출력 OUT 과 플래그 CO, V, Z, N, HC 를 묶어 선택하는 포장(wrapper)을 씌워 칩 제작 조건을 맞췄다.

module ALU_wrapper(clk, reset, iAB, iSel, oACC, iOutSel);
    input clk;
    input reset;
    input [7:0] iAB;
    input [1:0] iSel;   // Sel A, B & Op
    output [7:0] oACC;
    input iOutSel;

8-비트 ALU와 포장 ALU_wrapper의 구성은 아래와 같다.

+--------------------- iAB[7:0] -----------------------+
ALU_wrapper.v         |                              |
|                 +-----V-----+                        |
|                /    DeMUX    <--------------------- iSel[1:0]
|               +---+---+---+---+                      |
|       +-----------+   |   +---------+                |
|       |               |             |                |
|  +----V----+     +----V----+   +----V----+           |
|  | rA[7:0] |     | rB[7:0] |   |rCMD[7:0]| [LOAD]    |
|  +----+----+     +----+----+   +----+----+           |
|       |               |             |                |
  +---V--+         +--V---+         |                |
   \  A   \       /   B  /          |                |
    \      +-----+     Op<----------+                |
     \       ALU.v     /                   [EXECUTE] |
      \               F>---------+                   |
       +------+------+           |                   |
              |                  |                   |
         +----V----+        +----V----+              |
         |   rAcc  |        |  rFlag  |    [STORE]   |
         +----+----+        +----+----+              |
              +-----+     +------+                   |
|                     |     |                          |
                +---V-----V---+                      |
                 \    MUX    <--------------------- iOutSel
                  +----+----+                        |
                       |                             |
                       V                             |
+--------------------- oACC[7:0] ----------------------+

----------------------------

[목차][이전][다음]



댓글 없음:

댓글 쓰기