忍者ブログ

EDA Blog

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

[PR]

×

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

ImpulseC/CoDeveloperを使ってみる (7)

『【実践】C言語による組込みプログラミングスタートブック』の続きを読んでいます。
6章の24時間時計のCソースはザイリンクス用のオプションをつけないと合成できないそうで、
Cyclone Iiスターターキットでは動かすのに手直しが必要そうなので、読むだけにしています。

興味のある部分は、186ページに書かれている「どのようなメカニズムでCのソースからハード
ウェアに合成しているか」です。
他の動作合成ツールはどうか分かりませんが、CoDevelopeではBlock化Stage化という
2つの概念が大切になります。

Block化とは、Cのソースを制御文と制御文の間で分割することです。
C言語のソースをパースし、制御文ごとに最適化単位に設定しています。
Stage化とはBlock化で決めた最適化単位を最小のクロックで処理できるように最適化する
ことです。
1クロックでの処理対象がStageということになります。

動作合成での最適化の手順は、CoDeveloperのヘルプにでも書いてあるんでしょうか?
とても興味があるところなので、この本の6章を読み終えたら探してみようと思います。

拍手[0回]

PR

ImpulseC/CoDeveloperを使ってみる (6)

ImpulseC/CoDeveloperのロード機能を追加して動作合成した結果をQuartus IIでコンパイル
していたら、ラッチが生成されているようです。
Warning (10631): VHDL Process Statement warning at
Count_comp.vhd(112): inferring latch(es) for signal or variable "nextState",
which holds its previous value in one or more paths through the process
問題になっているソースCount_comp.vhdを見て、nextStateのprocess文を見てみたが、
動作合成で生成されたVHDLコードは見てもよく分かりません・・・。
Quartus IIでDesign Assistantを実行してみたのですが、ラッチが生成される記述がある
ようなワーニングは出ないので、今のところ原因は謎です。

HDLでもラッチを生成させないような記述方法がありましたが、動作合成用のC言語でも
同じような注意が必要になるのかもしれません。

拍手[0回]

ImpulseC/CoDeveloperを使ってみる (5)

今日も『【実践】C言語による組込みプログラミングスタートブック』を続行中です。
C言語の記述でのクロックの分周と、アップダウンカウンタへの変更まで行いました。
明日5章の残り(ロードつきカウンタ、ロードつき10進アップダウンカウンタ)を確認し、
来週24時間時計の動作を確認すれば一通りこの本は終了です。

ところで、ImpulseCの記述では、シミュレーション用の記述と動作合成用の記述を
分けるのにIMPULESE_C_SYNTHESISというマクロを使用しています。
たとえば、
    #ifndef IMPULSE_C_SYNTHESIS
        // シミュレーション用の記述  --- (1)
    #else
        // 動作合成用(ハードウェア)記述  --- (2)
    #endif
のようになります。

シミュレーションでは(1)の記述を使用して機能確認を行い、動作合成をしてHDLに
するときには(2)を使うのですが、(1)と(2)が等価であることはどうやって確認して
いるのでしょうか?

HDLで設計する場合は、シミュレーションと論理合成とで同じHDLを使用しますし、
Formal Verificationを使用してRTLとゲートレベルの等価性もチェックできます。
動作合成を行うときの等価性チェックをどのように行っているのか、気になります。

拍手[0回]

ImpulseC/CoDeveloperを使ってみる (4)

『【実践】C言語による組込みプログラミングスタートブック』の続きで、今日は7セグ
LEDにカウンタ値を出力させるサンプルを動作合成し、Cyclone IIスターターキットで動作
確認しました。

本の内容はXilinxのボードにあわせたものですので、Cyclone IIスターターキットの7セグ
LED仕様にあわせてC言語のソースを変更する必要がありましたが、他は特に問題なく
動作しました。
7セグLEDですから当然といえば当然です。

新入社員のとき、社内研修でVerilog-HDLから論理合成して7セグLEDを点灯させてい
ましたが、あれから8年経って、今は動作合成しています。
今の新人研修では、動作合成も行っているのでしょうか。

明日は第4章の最後の例を動作確認する予定です。

拍手[0回]

ImpulseC/CoDeveloperを使ってみる (3)

『【実践】C言語による組込みプログラミングスタートブック』の第4章のソースコードをCoDeveloperで動作合成したVHDLをCyclone IIスターターキットで動作させてみました。
適当にクロックを27MHzピンに、リセットをスイッチに割り当てて、LED出力を設定しただけですが。
この本ではISE用のプロジェクトファイルしかないので、後日Quartus II用のプロジェクトファイルをアップロードしようと思います。

ごくごく簡単な回路ですが、C言語で書いた回路が動作していると思うと不思議な感じがします。
引き続き、Cyclone IIスターターキットを併用して、ImpulseC/CoDeveloperを使っていこうと思います。

拍手[0回]

ImpulseC/CoDeveloper評価版

技術評論者から出ている『【実践】C言語による組込みプログラミングスタートブック』という本でImpulseC/CoDeveloperを解説しており、付属のCD-ROMにCoDeveloperの評価版が入っていました。
下記の制限がありますが、動作合成がどのようなものかを体験するには十分そうです。
  • 最大12の加減算器
  • 最大8の乗除算器
  • パイプラインは未サポート
  • 生成されるHDLは3000行まで
  • サポートする形式はGeneric、MicroBlaze、Xilinxデバイスのみ
  • サポートするHDLはVHDLのみ
<a href="http://www.altera.co.jp/products/devkits/altera/kit-cyc2-2C20N.html">Cyclone II スターターキット</a>を持っていて、VHDLよりもVerilog好きな私にはちょっと辛い内容ですが、まずはこの本でImpulseC/CoDevelopeを学習してみようと思います。

DesignWaveも、どうせならこの評価版をDVD-ROMに収録してくれればよかったのですが。
[実践] C言語による組込みプログラミングスタートブック
鳥海佳孝
技術評論社

このアイテムの詳細を見る< /br>

拍手[0回]

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回]

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

CoDeveloper's User Guideに以下の5つのチュートリアルが入っていましたので、まずはこれらのチュートリアルから実行してみたいと思います。
  1. Hello World
  2. Generating Hardware
  3. DES Encryption Part 1
  4. DES Encryption Part 2
  5. The CoDeveloper Pro Tools
CoDeveloper's User Guideは、ImPulseC/CoDeveloperのメニューからHelp -> CoDeveloper's User Guideをクリックすると表示できます。

1. Hello Worldプロジェクトのオープン
ImPulseC/CoDeveloperを起動した後、File -> Open Project...からC:/Impulse/CoDeveloper2/Examples/Generic/HelloWorld/HelloWorld.icProjを開きます。

2. コンパイル
Project -> Build Software Simulation Executableをクリックし、プロジェクトをコンパイルします。
GUIのBuildペインにコンパイル状況が表示され、build_exeが作成されます。

3. 実行
Project -> Launch Software Simultion Executableをクリックし、シミュレーションを実行します。
コマンドプロンプトが立ち上がり、結果が表示されます。
914059f1.PNG

 

"Hello World"の一文字ずつが、2つのプロセスから表示されています。

コマンドプロンプトに表示されるのは、printf文の結果だけで、cosim_logwindow_fwrite文の結果は出力されていません。
シミュレーション実行前にApplication Monitorを起動しておくと、cosim_logwindow_fwrite文の結果も表示してくれるそうですが、ライセンスがないとApplication Monitorを起動できません・・・。
評価用ライセンスを取得してからの楽しみにとっておきます。

拍手[0回]

ImpulseC/CoDeveloper (1)

DesignWave 2008年2月号付属のImpulseC/CoDeveloperをインストールしてみました。
メールを送れば40日間の評価用ライセンスをもらえるそうです。

記事の内容にしたがって、バブルソートとラプラシアン・フィルタのソフトウェアでのシミュレーションだけはライセンスなしでも実行できました。
残念ながら、動作合成はライセンスなしではできませんでした。
DVDにはチュートリアルも入っているようでしたので、それを読んでImpulseCについての理解を深めた後に評価用ライセンスをもらって、動作合成を体験してみようと思います。

HDLはXilinxやAlteraの無償版のツールを使用して、個人でも論理合成ができるようになりましたが、動作合成も無償版のツールが出てきて欲しいところです。

拍手[0回]

カレンダー

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
性別:
非公開

ブログ内検索

カウンター

アクセス解析