본문 바로가기

컴퓨터/컴퓨터구조

1강 - Bluespec 언어 소개

Bluespec Verilog 소개

Bluespec Verilog이란?

Bluespec Verilog(BSV)은 높은 수준의 추상화를 제공하는 하드웨어 기술 언어(Hardware Description Language)이다. 특징으로는,

  • 동시성 표현
  • 하드웨어 합성 가능

위 점이 있으며, 그와 동시에 객체지향적인 프로그래밍을 작성할 수 있도록 지원한다.

사실상 기존 Verilog와 비교해서 high-level의 언어적 기능을 지원하는 것이 핵심이다.

Hello World

bsv 프로그램을 작성해보자.

// Helloworld.bsv
package Helloworld;

    String s = "Hello world";
    (* systhesize *)
    module mkHelloworld (Empty);
        rule say_hello;
            $display(s);
            $finish(0);
        endrule
    endmodule

endpackage: Helloworld

위 코드는 bsv로 작성한 "hello world" 프로그램이다.

몇가지 중요한 점들만 살펴보자.

  • package : 패키지를 정의하는 데 사용되는 키워드, 파일 이름은 패키지이름.bsv로 작성한다.
  • module : 모듈을 정의하는 데 사용되는 키워드.
  • rule : 매 클락마다 실행되는 룰. 이처럼 한번의 연산으로 실행되는 것을 보고 atomic하다고 한다.

일단 이 정도로만 이해하고 넘어가자. 모듈을 보면서 대략적인 구조를 더 이해해보자.

BSV 모듈

BSV 모듈의 구조

module mkXYZ (XYZ_Interface);
// state ========================================
    Reg#(Int#(32)) x <- mkReg(0);
    Reg#(Int#(32)) y <- mkReg(0);

// internal behavior ===========================
    rule step1 ((x > y) && (y != 0));
        x <= y; y <= x;
    endrule
    rule step2 (( x <= y) && (y != 0));
        y <= y-x;
    endrule

// external interface ==========================
    method Action start(Int#(32) a, Int#(32) b) if (y==0);
        x <= a; y <= b;
    endmethod
    method Int#(32) result() if (y==0);
        return x;
    endmethod

endmodule

모듈은 크게 세 부분으로 나뉜다. state, internal behavior, external interface이다.

  • state : 모듈의 내부 상태를 나타낸다.
  • internal behavior : 모듈의 내부 동작을 나타낸다.
  • external interface : 모듈의 외부 인터페이스를 나타낸다.

BSV 모듈들과의 상호작용

위에서 다룬 바와 같이 각 모듈은 자신만의 state와 rule들로 구성되고 method interface를 이용하여 state와 rule에 접근한다. 다만, 다른 모듈의 state와 rule에 직접적으로 접근하지 못하고 모듈이 제공하는 interface를 이용해야 한다. 즉 modulization을 제공한다고 할 수 있다.

이러한 모듈들을 모아서 큰 시스템을 구설할 수 있다.

BSV 모듈의 계층구조

BSV는 Verilog에서와 같이 모듈 계층 구조를 가진다. 그리고 계층구조의 끝에는 원시적인(primitive) state가 존재하는 것이다.

Verilog와 달리 레지스터도 '의미적으론' 모듈이라고 부른다

BSV의 flow

BSV를 이용하여

  1. 시뮬레이션
  2. FPGA합성
  3. 실제 하드웨어로 작성

이 가능하다. (bluespec tool flow 라 검색하면 관련 도식을 볼 수 있다.)


앞으로 강의에서 Combinational Circuit과 Sequential Circuit을 구현하며 BSV 언어를 배울 것이다.