序章 新しい設計言語の時代へ
C/C++言語ベースのシステム設計の重要性

1 半導体技術は進歩し続けている

 LSI(Large Scale Integrated circuit:大規模集積回路)の1チップあたりに集積可能なトランジスタ数は,おおむねムーアの法則にしたがって増加しています.ムーアの法則とは,米Intel社の創設者の一人ゴードン・ムーア(Gordon E. Moore)が1965年に提唱した,「半導体の集積度は,1年半ごとに約2倍になる」という経験則のことをいいます.この法則によれば,約5年で10倍という驚異的なスピードで,集積規模が増加していくことになります.

 単純に考えると,より高性能な半導体製品がより安価で手に入るわけですから,ユーザーの立場としては喜ばしいことです.しかし,同じく単純に考えると,実際に半導体製品を設計・製造する立場としては,設計すべきハードウェアの規模が約5年で10倍になるわけですから,生産性が高く実用的な設計手法の登場を期待することになります.

2 ハードウェア記述言語の登場

 ほんの数年前までは,ハードウェア(ディジタル回路)の設計は,人手を使って回路図を書く,という作業によって行われてきました.実際には,ハードウェア設計を支援するCAD(Computer Aided Design)ツールを用い,ドローイングツールで絵を描くようにして,コンピュータ上で回路図を作成していました.しかし,これでは当然,設計生産性の向上は望めません.そこで登場したのが,ハードウェア記述言語(Hardware Description Language:HDL)です.

 HDLは,C言語やPascalなどのプログラミング言語と同様に,コンピュータ上で処理される形式言語(formal language)です.このHDLを用いることにより,プログラミング感覚でハードウェアの設計作業が行えます.HDLの登場により,設計作業は,机上(実際はコンピュータ上)で絵を描く作業から,コンピュータ上でプログラミングをする作業へと,移行してきました(図1).現在では,HDLを抜きにしたハードウェア設計は,考えられなくなっています.

〔図1〕ハードウェア設計手法の変遷

3 システム全体が設計対象になる

  しかし半導体技術は進歩を続けており,これまで複数のICを用いなければ実現できなかった大きなシステムが,一つのICの中に実現できるようになってきました.このような大きなシステムを一つのICで実現することをシステムオンチップ(System on Chip:SoC),SoCを実現したICをシステムLSI(System LSI)と呼んでいます.

 ここでいうシステムには,ハードウェアだけでなく,その上で動作するソフトウェアも含まれています.すなわち,システムLSIの登場によって,設計の対象がハードウェアとソフトウェアを合わせたシステム全体に広がってきたことになります.

 HDLの使用により,設計生産性が向上したことは事実ですが,ハードウェアのみを設計対象としたHDLでは,システム全体の設計を行うことはできません.そのため,システム全体の設計を可能とする設計環境が必要となってきたのです.

4 C/C++言語ベースのシステム設計

  このような状況でC/C++言語が浮上してきたのは,当然の帰結といえます.HDLでシステム全体の設計を行えないのだから,プログラミング言語にハードウェアを設計する機能をもたせよう,という考え方です.このような,ハードウェアとソフトウェアの両方を設計できる言語をシステムレベル言語(system level language)といいます.そして,そのような役割をもたせるプログラミング言語としては,もっとも広く認知され,実際に用いられているC/C++言語となるわけです.

 現在,このシステムレベル言語が注目を集めていますが,中でもC/C++言語をベースとした,SystemCとSpecCが有望株となっています.本特集では,SystemCやSpecCを用いたC/C++言語ベースのシステム設計について,その基本的な項目を解説します.とくに,これまでC言語などによるプログラミングの経験はあるけれど,ハードウェアの設計には詳しくない,という方を対象とし,ハードウェアの基礎についても解説します.

5 システムレベル言語の効用

 ところで,システムレベル言語を用いたシステム設計が,これまでの設計とどのように違うのか,見てみることにしましょう.

〔図2〕各設計手法の違い
	cmpl %eax, -16(%ebp)
	   jl.L21
	jmp .L19
	.p2align 2
.L21:
	movl -16(%ebp), %eax
	movl %eax, %eax
	leal 0(,%eax,4), %esi
	leal -584(%ebp), %eax
	movl %eax, %ebx
回路図(ハードウェア)を人手で作成 アセンブリ言語や機械語でソフトウェアを作成
(a)回路図を人手で書いていた時代のハードウェアの設計

reg[ 1 : 0 ] CR_STATE;
wire[ 1 : 0 ] NX_STATE;

always @(negedge CK) begin
  CR_STATE <= NX_STATE;
end

assign Y = F_Y(CR_ST,X);

function[ 1 : 0 ] F_Y;
if(vdata.bi == BEND){
   access_on = TRUE;
   for(i=0;i<bb_inst;i++){
      k = i;
      for(j=i+1;j<bb+1;j++){
        if(b[j] < b_new[k]){
       k = j;
     }
   }
if(k!=i){
ハードウェア記述言語(HDL)でハードウェアを設計 C/C++言語でソフトウェアを作成
(b) ハードウェア記述言語によるハードウェア設計

#include "systemc.h"

void st_machine::sm_reg(void)
{
  if ( RESET.read() ) {
    CR_ST = Q0;
  } else {
    CR_ST = NT_ST.read();
  }
};
C/C++言語ベースのシステムレベル言語でハードウェアとソフトウェアを同時に設計
(c)システムレベル言語によるシステム設計

 HDLの登場前は,図2(a)のような回路図を,人手で作成していました.このような回路図で表されるハードウェア上で動作するソフトウェアは,そのハードウェア専用のアセンブリ言語や機械語を用いてプログラミングします.また,専用の開発環境を用いて,C/C++言語などの高級言語によるプログラミングが行える場合もあります.いずれの場合も,ハードウェアの設計が完了しなければ,作成したソフトウェアの動作を正確に検証することはできません.

 HDL登場後は,図2(b)のように,ハードウェアを高級言語によるプログラミング感覚で設計します.これにより,ハードウェアの設計検証作業がかなり効率化されました.一方,ソフトウェアの設計に関しては,手書きの時代からあまり変化がありません.多くの場合,専用の開発環境を用いて,C/C++言語などの高級言語によるプログラミングが行われます.また,ソフトウェアの動作検証に関しても,ハードウェア設計の完了を待ってから行う必要があります.

 以上の設計手法に対して,システムレベル言語を用いた設計手法では,図2(c)に示すように,まず,ハードウェアとその上で動作するソフトウェアから構成されるシステム全体をまとめて設計します.これをハードウェア/ソフトウェア協調設計といいます.その後,ハードウェア部とソフトウェア部を分割して,並行して,設計作業が進められます.ハードウェア部とソフトウェア部が同一の開発環境で設計できるので,両方の設計がある程度進んだ段階で,ハードウェア上でのソフトウェアの動作検証を効率的に行うことができます.これを,ハードウェア/ソフトウェア協調検証といいます.

 このように,システムレベル言語を用いると,ハードウェア部とソフトウェア部を協調して,設計・検証が行えるため,設計期間の大幅な短縮につながると期待されています.

6 C/C++言語ベース設計に対するもう一つの期待

 以上で概観したように,C/C++言語ベース設計は,今後のシステム設計における重要なカギを握っているといえます.さらにC/C++言語ベース設計には,もう一つの大きな期待があります.それは,ソフトウェア設計者をシステム設計者として取り込むことです.

 ハードウェア設計者は,ソフトウェア設計者に比べると,その絶対数が圧倒的に少ないのが現状です.しかし,ハードウェア設計者の需要は増加の一途をたどっており,その人材不足が問題になっています.また,システムレベル設計ではハードウェア部とソフトウェア部を同時に設計するため,その設計者(システム設計者)には,ハードウェアとソフトウェアの両方の知識が要求されます.このようなシステム設計者も絶対的に不足しています.これらの人材不足をソフトウェア設計者で補うことによって解消したい,というのがC/C++言語ベース設計に対するもう一つの期待です.

 実際,半導体メーカーの採用状況でも,ソフトウェア設計者の採用者数のほうが,ハードウェア設計者の採用者数を上回る傾向があります.ソフトウェア設計者がハードウェアやシステム全体を設計するような時代が来るのは,そんなに遠い未来のことではないのかもしれません.

インデックス
◆序章 C/C++言語ベースのシステム設計の重要性
第1章 組み込みシステム開発の基礎知識

今月号特集トップページへ戻る


Copyright 2003 吉田たけお