忍者ブログ

EDA Blog

Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

現在、新しいコメントを受け付けない設定になっています。

ImPulseC/CoDeveloperを使ってみる (2)

CoDeveloper Tutoriaの2番目のGenerating Hardwareでは、DesignWave 2008年2月号の記事でも紹介されていたエッジ検出回路が題材です。
ソフトウェアをコンパイルして実行すると、七五三の女の子(なぜ七五三?)の画像の輪郭を検出したBMPファイルResult1.bmpが作成されます。

 このチュートリアルでは、さらに踏み込んで、生成されるHDLが最適化されるような記述方法を紹介しています。
たとえば、下記のようなコードの場合、ABSは4回計算されていますが、引数は異なるので並列に計算できます。
しかし、4回とも同じ変数pixeldiffに結果を代入しているので、コンパイラは逐次処理と判断してしまいます。
        pixelMag = 0;
        pixeldiff = ABS(pixelSE - pixelNW);
        if (pixeldiff > pixelMag)
            pixelMag = pixeldiff;
            
        pixeldiff = ABS(pixelNE - pixelSW);
        if (pixeldiff > pixelMag)
            pixelMag = pixeldiff;

        pixeldiff = ABS(pixelS - pixelN);
        if (pixeldiff > pixelMag)
            pixelMag = pixeldiff;

        pixeldiff = ABS(pixelE - pixelW);
        if (pixeldiff > pixelMag)
            pixelMag = pixeldiff;


そこで、下記のように書き換えることで、ABS計算を並列に行わせることができます。
pixeldiff1 = ABS(pixelSE - pixelNW);
pixeldiff2 = ABS(pixelNE - pixelSW);
pixeldiff3 = ABS(pixelS - pixelN);
pixeldiff4 = ABS(pixelE - pixelW);
pixelMag = (co_uint8) MAX4(pixeldiff1,pixeldiff2,pixeldiff3,pixeldiff4);
もう一つの例として、R/G/Bを1つのプロセスで逐次処理していたものを、3つの独立したプロセスを生成して、R/G/Bを並列に処理されるように変更したものが紹介されています。
上記の並列性を利用するように書き換えられたプロジェクトもEdgeDetect_2として提供されています。

ライセンスがないので、HDLはまだ生成できないのが残念なところです。

拍手[0回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

[04/11 なつたん]

最新TB

プロフィール

HN:
aston_martin
性別:
非公開

ブログ内検索

カウンター

アクセス解析