例題:Hello World
[ ホーム ] [ 上へ ] [ 例題:Hello World ] [ SFLの文法 ] [ 例題:超簡単なCPU ]

 

お約束のHello World

ではいきなりですが、例を出して説明したいと思います。プログラムの世界ではおなじみに「Hello World」ですが、回路ではいきなりHello Worldをプリントするということができません。かわりに、「Hello World」のアスキーコードを出力する回路で勘弁してください。

「Hello World」は11文字ですので、これを順番に出力するためには11個のステートが必要になります。ここではステージ、タスクをそれぞれひとつずつ、ステートを11個作ることにします。また、それぞれのアスキーコードは表のようになっています。

では、入出力を定義しましょう。まず、アスキーコードを出力するoutput_ascii端子。それからスタートのきっかけを示す、制御入力のdo。これだけです。クロック端子やリセット端子はPARTHENONが合成の際に自動的に取り付けてくれるので、明示する必要はありません。

この回路は制御入力startが入力されると、「Hello World」を示すアスキーコードを1クロックに1文字分ずつ出力します。

この回路はdoが入力されると、1クロックずつ「Hello World」の文字を表示していきます。出力はascii_ouput<7:0>の端子で行います。この端子は8ビットです。

 

 


module helloworld {
    instrin start; 
    output ascii<7:0>;

    stage helloworld_stg {
        state st0;
        state st1;
        state st2;
        state st3;
        state st4;
        state st5;
        state st6;
        state st7;
        state st8;
        state st9;
        state st10;
        first_state st0;

        state st0 par{
            if(start) goto st1;
            else goto st0;
        }
        state st1 par { ascii = 0x48; goto st2; } /* H */
        state st2 par { ascii = 0x45; goto st3; } /* E */
        state st3 par { ascii = 0x5c; goto st4; } /* L */
        state st4 par { ascii = 0x5c; goto st5; } /* L */
        state st5 par { ascii = 0x4f; goto st6; } /* O */
        state st6 par { ascii = 0x57; goto st7; } /* W */
        state st7 par { ascii = 0x4f; goto st8; } /* O */
        state st8 par { ascii = 0x52; goto st9; } /* R */
        state st9 par { ascii = 0x5c; goto st10; }/* L */
        state st10 par { ascii = 0x44; goto st0; } /* D */
    }
}

詳しい解説は「ステートの記述」で詳しく行います。

ここではステートを使って、出力と行き先を指定していることを理解してください。

 

 

Copyright (C) 2000 DataSight Corporation (zip8120016jp). All Rights Reserved.