FC2カウンター FPGAの部屋 2012年01月

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Altium Designer によるPCB設計入門9(回路図シートの階層化)

Altium Designer によるPCB設計入門8(PCBドキュメントの作成6)”の続き。

今回は昨日、FPGA-CAFEで習ってきた複数の回路図シートがある場合だ。これには2つの選択肢がある。フラットな複数の回路図シートがある場合と、階層化された複数の回路図シートが有る場合だ。

まずは、フラットな複数の回路図シートがある場合だが、この場合は回路図同士をつなぐネットはポートで指定する。同じ名前を付けたポート同士は接続される。

・Altium Designer で新規PCBプロジェクトを作成し、新規に回路図シート (Sheet1.SchDoc) を作成し、セーブする。

ライブラリのダウンロードのページからすべてのライブラリをダウンロードして、\Documents and Settings\All Users\Documents\Altium\AD 10\Library フォルダに入れた。

・ライブラリ・タブをクリックして、ライブラリを4518をキーワードに、オペレータをcontains で検索する。

・HD74HC4518 が見つかったので、Placeした。
Altium_Desiger2_1_120130.png

・ポートの配置アイコンをクリックして、ポートを表示する。
Altium_Desiger2_2_120130.png

・TABキーを押して、ポート プロパティを開く。名称をCLKに、I/OタイプをInputに変更する。
Altium_Desiger2_3_120130.png

・クリックしてポートを置く。次でポートの長さを設定する。適当な長さに伸ばしてくからクリックして固定する。ENAとRSTAの入力ポートも置いて配線した。
Altium_Desiger2_4_120130.png

・出力もポートを付ける。ポートの配置アイコンをクリックし、ポートを表示する。

・TABキーを押して、ポート プロパティを開く。名称をQ0Aに、I/OタイプをOutputにする。
Altium_Desiger2_5_120130.png

・クリックしてポートを置く。次でポートの長さを設定する。適当な長さに伸ばしてくからクリックして固定する。Q1A, Q2A, Q3Aも置いて配線した。
Altium_Desiger2_6_120130.png

・74HC4518は1パッケージに2つのBCDカウンタが入っているので、もう1つをライブラリから読んできて、配線し、出力ポートを付けた。
Altium_Desiger2_7_120131.png

・回路図シートをセーブした。

・もう1つ回路図シート (Sheet2.SchDoc) を生成して、74HC4511をライブラリから読んできて配置した。VCC, GNDを配線した。
Altium_Desiger2_8_120131.png

・7セグメントLEDが見つからなかったので、AltiumからAvago_060709.zipを落としてきて、Avago_LED_Displayとしてライブラリに加えた。
Altium_Desiger2_9_120131.png

・ライブラリ・タブを押して、ライブラリ・ウインドウを開く。

・ライブラリ...ボタンをクリックして利用可能ライブラリ・ダイアログを開く。

・導入済みタブをクリックして、導入(I)...ボタンをクリックして、Avago LED Display 7-Segment, 1-Digit.IntLibを選択して、このライブラリを導入した。
Altium_Desiger2_10_120131.png

・5082-7613を選択して、配置し、配線した。抵抗も追加した。完成図を下に示す。
Altium_Desiger2_11_120131.png

・回路図シートの階層化を行う。もう1つ回路図シートを新規作成して保存した。

・その回路図シート (Sheet3.SchDoc) で右クリックメニューからシートに対する操作 -> ドキュメントからシンボル作成 を選択する。
Altium_Desiger2_12_120131.png

・Choose Document to PlaceダイアログでSheet1.SchDocを選択し、OKボタンをクリックする。
Altium_Desiger2_13_120131.png

・Sheet3.SchDocにSheet1.SchDoc のシンボルが追加された。
Altium_Desiger2_14_120131.png

・Sheet2.SchDocのシンボルを追加して、配線した。
Altium_Desiger2_15_120131.png

・Sheet3.SchDocをセーブした。

・更に、もう1つ回路図シート (Sheet4.SchDoc) を作成した。

・右クリックメニューからシートに対する操作 -> ドキュメントからシンボル作成 を選択し、Sheet3.SchDocのシンボルを追加する。

・Header 5を追加して、配線した。
Altium_Desiger2_16_120131.png

・部品のアノテーションを行った。(ツールメニューからアノテーション)

・すべてのファイル、プロジェクトをセーブした。
Altium_Desiger2_17_120131.png

・新規でPCBドキュメントを作成した。

・Sheet4.SchDocで、デザインメニューからUpdata PCB Document PCB1.PcbDoc を選択して、PCBに部品を出力した。

・回路図シートが階層構造になった。(PCBにアップデートしないと回路図シートが階層構造にならないようです)
Altium_Desiger2_18_120131.png

・コンポーネントのネーミングを変更する。プロジェクトメニューからプロジェクト オプションを選択する。

・ダイアログのMulti-Channel タブをクリックする。
Altium_Desiger2_19_120131.png

・コンポーネントネーミングのデジネータ形式を $Component$ChannelAlpha とする。
Altium_Desiger2_20_120131.png

・デザインメニューからUpdata PCB Document PCB1.PcbDoc を選択して、PCBに部品をインポートすると、部品番号が変更された。
Altium_Desiger2_21_120131.png
  1. 2012年01月30日 06:00 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをISE WebPACKから使用する1

MicroBlaze MCSは、手順どおりに使っても私はうまく行かなかった。うまく行った方もいらっしゃるので、うまくいくとは思う。ISE WebPACKからMicroBlaze MCSを使う方法を公開されている方がいらっしゃるので、その方の方法を試してみようと思う。
ちなみに、MicroBlaze MCSはISE WebPACKから生成できるが、ソフトウェアを作るために必要なSDKはEDKのライセンスが無いと使用できない。そこで、MicroBlazeクロスコンパイラを生成して、ソフトウェアをコンパイルして、MicroBlaze MCSで動作させる手順を示してくれているわけだ。MicroBlazeクロスコンパイラの生成スクリプトも提供されている。
そのサイトは、ひでみのアイデア帳(SweetCafe)さんだ。MicroBlazeクロスコンパイラの生成スクリプトを実行して、MicroBlazeクロスコンパイラを生成し、サンプルをやってみることにした。

使用するOSはVirtualBox上にインストールしたUbuntu11.10上で、MicroBlazeクロスコンパイラの生成スクリプトを実行して、MicroBlazeクロスコンパイラを生成してみることにした。
(Ubuntuって凄いですね。至れり尽くせりで、プリンタドライバとISEが何とかなれば、Windows無くてもこれでいいじゃね?というレベルですね。)

まずは、github 超入門を参考にして、githubにアカウントを作成してログインした。github 超入門を読んでいるとFreeで公開するならばここ置けば良いんだと思った。FPGAの部屋で公開しているISEのプロジェクトなどはここに置こうかな?なかなかZIPファイルを置ける所がないんだよな。。。

mb_mcsのスクリプトをgithubにアップ”の記事に書いてあるgithubに行くと、ZIPボタンがあって、リポジトリをZIPファイルでダウンロードすることができる。
MB_MCE_56_2012-01-29.png

aquaxis-aquaxis-58dbd58ディレクトリがダウンロード出来る。aquaxis-aquaxis-58dbd58 / MicroBlaze / CrossCompile の下にmake_microblaze_gcc がある。
MB_MCS_57_2012-01-29.png

ホームの下にMicroBlaze ディレクトリを作って、その下にmake_microblaze_gcc をコピーした。
ターミナルを起動して、MicroBlaze ディレクトリに移動して、"sudo ./make_microblaze_gcc とタイプしてビルドを開始した。数時間かかってビルド終了。無事にビルドできたようだ。
MB_MCS_58_2012-01-29.png

/usr/mircoblaze/bin の下に、microblaze-gcc などが出来ていた。成功のはず。。。
MB_MCS_59_2012-01-29.png

ホームの./bashrc に、”export PATH=$PATH:/usr/microblaze/bin”を追加して、”source .bashrc”を実行する。

aquaxis-aquaxis-58dbd58/MicroBlaze/CrossCompiler/Sample/HelloWorld に移動して、makeコマンドを実行した。下の図は実行し終わった所。
MB_MCS_60_2012-01-29.png

HelloWorld の実行ファイルが出来ていた。
MB_MCS_61_2012-01-29.png

  1. 2012年01月29日 07:47 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする4(SDK編2)

MicroBlaze MCSをテストする3(SDK編1)”の続き。

ソフトウェアを作成した。Atlys_LED_test.c を以下に示す。

// 
// Atlys_LED_test.c
//
// AltysボードのLEDを1秒ごとに+1するソフトウェア
// 初めは割り込みを使わないで実行する
//

#define    GPIO1_ADDR            0x80000010
#define PIT1_PRELOAD_ADDR    0x80000040
#define PIT1_COUNTER_ADDR    0x80000044
#define PIT1_CONTROL_ADDR    0x80000048

unsigned int read_counter(){
    return(*(volatile unsigned int *)(PIT1_COUNTER_ADDR));
}

int main()
{
    unsigned int b_count = 0;
    unsigned int c_count = 0;
    unsigned int led = 0;
    
    *(volatile unsigned int *)(PIT1_PRELOAD_ADDR) = 100000000// 100MHzで1秒
    *(volatile unsigned int *)(PIT1_CONTROL_ADDR) = 0x3// Timer Enable, Auto load
    
    *(volatile unsigned int *)(GPIO1_ADDR) = led;
    
    while(1){
        c_count = read_counter();
        if (c_count > b_count)    // 現在の値のほうが大きいのでオートロードした
            *(volatile unsigned int *)(GPIO1_ADDR) = led++;
        b_count = c_count;
    }
}


13.SDKで、FileメニューからNew -> Xilinx C Projectを選択して、Altys_LED_Testプロジェクトを作った。

14.Altys_LED_Test -> src にエクスプローラからAtlys_LED_test.c をドラック&ドロップした。

15.Altys_LED_Test -> Binaries にAltys_LED_Test.elf が生成された。
MB_MCS_49_120128.png

16.PlanAhead に戻って、下のコマンドをTCL Scriptタブの入力エリアにタイプし、elfファイルをビットファイルに入れる。

microblaze_mcs_data2mem SDK/Atlys_LED_test/Debug/Atlys_LED_test.elf


MB_MCS_47_120128.png

17,実行後の表示。
MB_MCS_48_120128.png

18.左のProgram and Debug の下向き三角をクリックして、iMPACTを起動する。
MB_MCS_50_120128.png

19.iMPACTでFPGAをコンフィグしたが、動作しなかった。

SDKでXilinx ToolsメニューからProgram FPGAを選択して、Programボタンをクリックしてコンフィグした。
MB_MCS_51_120128.png

しかし、Failしてしまう。
MB_MCS_52_120128.png

Data2MEM failed.だそうだ。調査中。

ISE13.3のSDKは大丈夫だ。何故だろうか?

(追記)
Project Navigator でやってもだめでした。XPS13.4で作ったMicroBlaze をSDK13.4にExportしてプロジェクトを作るとProgram FPGAも問題なく出来ます。
何が悪いんでしょうか?MicroBlaze MCSが動いているというお知らせも頂いているので、動かないはずはないと思うんですけど?

EDKがあれば、何もMicroBlaze MCSを使わなくても、ということで、今度はWebPACKで動くMicroBlaze MCSのフレームワークを作ってくれた方がいらっしゃるので、それでやってみようと思います。
  1. 2012年01月28日 13:01 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

FPGAカンファレンスに行ってきました

今日は、FPGAカンファレンス2011に行ってきました。
ゆりかもめのテレコムセンター駅で降りて、テレコムセンターの方に行ってしまいました。あれれ?おかしいなと地図をよく見たら、反対側じゃありませんか。。。迷ってしまって、10時少し過ぎに到着しました。

会場に入ったら、説明が始まっています。説明を聞いて、挨拶を聞いてからセミナが始まりました。

・「FPGAの進化: FPGAs Becoming SoCs 」 熊本大学大学院教授 末吉敏則氏
末吉先生はFPGA界のトレンドをいつもわかり易く説明されていて勉強になります。そうそう、Intelがファブとして製造するFPGA会社が2社あるとおっしゃっていました。1社はArhronixなので、もう一社はTabulaだろうという話でした。JPモルガンのFPGAを金融システムに使った例の説明がありました。後、印象に残ったのは、MRAMやFeRAM使用のFPGAです。そうそう、今年はPSoCの話もありました。

・アルデック・ジャパン株式会社 「シミュレーションを高速化、設計品質を向上させる Aldec 検証環境」
Active-HDLがキャンペーンで99,000円だそうです。アサーションやカバッジ、コードカバッジ、ALINT(Lintツール)のお話でした。Altium DesignerのシミュレータはAldecです。親しみがわきますね。Co-Simuのボードやなどの紹介もありました。これでシミュレーションしたら速そうですね。XilinxのCo-Simuもそうですが、クロックドメインが複数あるとCo-Simuが難しそうですね。画像処理はシミュレーションが絶望的に遅いので、Co-Simuかサイクルベース・シミュレータが欲しいところです。

・東京エレクトロンデバイス株式会社 「28nm FPGA 7シリーズと最新FPGA評価ボードのご紹介」
Kintex-7のボードが気になりました。HD画像を入れて、2K-4Kで出力するサンプルがHDLでついてくるそうです。超解像度のサンプルも入っているということですよね?楽しみです。でも、パンフレットにボードの写真が無くて、絵だけだったんですが、Digilentには、写真があるのは何ででしょうか?どうして?でも2月10日のTED プログラマブル ソリューション 2012 セミナ / 展示会では、実物が見られるのかな?登録してあるし行きます。TEDの関係者の方、楽しみにしています。

お弁当が出ました。お弁当は、ほのかに暖かく、美味しかったです。会場は寒かったです。コートを着ていました。(寒がりかも?)

日本シノプシス合同会社 「FPGAを使用したSoCデザイン検証環境の実現~FPMMによるFPGAプロトタイピング手法のノウハウ~」
巨大なFPGAが4つだったかな?ついてるプロトタイピング・ボードのお話でした。使えれば有効なんだと思いますが、聞かなかったけど、お高いんだと思います。

・富士エレクトロニクス株式会社 「Lattice社が贈るユーティリティPLD! 【MachXO2】とLattice社製FPGA/CPLD搭載オリジナル評価ボードのご紹介」
Latticeまで手がまわらないので、居眠りしながら聞いていました。印象に残っていません。ごめんなさい。

・「FPGA/CPLD設計のためのデザインヒント」
FPGA技術者の疑問に答える面白い企画。タイミングを満たすためにFFを複製してFanoutを減らすというような話をしていたので、質問してみました。FFを複製してもそれだけでは消されちゃうんでは?
答えは、ツールオプションでやる方法と制約でやる方法を答えてもらいました。やはり、そうですよね。でもこれを説明しておかないと、せっかくHDLでFFを複製しても消されちゃうんでは?もっと厳しくなるとツリー状にFFを複製していくというテクニックも使います。
SSOの制限の確認はPlanAheadではDRCでチェックできるそうな?PACEでもできましたね。
基板の作成上の注意とかもありました。一般的な注意でした。

・「非同期式設計によるFPGA向け省電力化手法」~更なる低電力化へのアプローチ~
非同期ハンドシェークもArhronixで使っているので、良いと思うのですが、Xilinxでやるとツールが対応できないので、まだまだ実験段階という気がします。

最後の抽選は残念ながらはずれました。当たった事無いです。当たると、今年の運を使い果たした気がするので、当たらなくて良かったです。(負け惜しみ。。。)
  1. 2012年01月27日 21:33 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

MicroBlaze MCSをテストする3(SDK編1)

MicroBlaze MCSをテストする2-2(PlanAhead13.4仕切り直し編)”の続き。

やっと、PlanAheadでMicroBlaze MCSのインプリメント、ビットファイル生成が終了した。今度はSDKでソフトウェアを作る。

1.MB_MCS_PlanAhead_led_test2フォルダの下にSDKフォルダを作る。

2.SDKフォルダに、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.srcs\sources_1\ip\microblaze_mcs_v1_0_0\microblaze_mcs_v1_0_0_sdk.xmlをコピーする。
MB_MCS_40_120127.png

3.SDKを起動する。

4.WorkSpace LauncherでSDKフォルダを指定する。
MB_MCS_41_120127.png

5.SDKが立ち上がった。
MB_MCS_42_120127.png

6.FileメニューからNew -> Xilinx Hardware Platfrom Specification を選択する。

7.New Harware Project ダイアログが開く。Target Hardware Specification で、2.のmicroblaze_mcs_v1_0_0_sdk.xmlを指定する。

8.更に、Bitsteam に、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.runs\impl_1\microblaze_mcs_test.bit を指定する。

9.BMM File に、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.srcs\sources_1\ip\microblaze_mcs_v1_0_0\microblaze_mcs_v1_0_0_bd.bmm を指定する。
MB_MCS_43_120127.png

10.SDKに戻ると、hw_platform_0が出来ていた。microblaze_mcs_v1_0_0 のAddress Mapには、iomodule_0のアドレスが2つあるだけで、PITやGPOのアドレスが書いていない。どうやって、PITやGPOのアドレスを知るんだろうか?
MB_MCS_44_120127.png

11.LogiCORE IP MicroBlaze Micro Controller System (v1.0)の26ページのTable 13: MicroBlaze MCS Address Map にaddress MAPが書いてあった。Table 13: MicroBlaze MCS Address Map の一部を下に引用する。
MB_MCS_45_120127.png

12.今回のデザインでは、PIT1とGPO1を使用する。Table 13: MicroBlaze MCS Address Map から抜き出したMAPを下に引用する。
MB_MCS_46_120127.png
・PITはPIT1 Preload Registerにカウントする値を入れて、PIT1_CONTROLに0x3を入れてPIT0をイネーブルにして、オートロードにしておけば良さそうだ。PIT1_CONTROLの1ビット目がカウンタのイネーブルビットで、2ビット目がオートロードだ。1でオートロードで、0でカウントするとストップする。

現在、ソフトウェア作成中です。続きます。
  1. 2012年01月27日 05:38 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする2-2(PlanAhead13.4仕切り直し編)

MicroBlaze MCSをテストする2(PlanAhead13.4編)”の続きでもあるが、代わりでもある。正確には、”MicroBlaze MCSをテストする1(IPコアの生成、Project Navigator編)”の続きか?

LogiCORE IP MicroBlaze Micro Controller System (v1.0)を参考にする。
8ページのFigure5: Generic Tool Flow を下に引用する。
MB_MCS_35_120125.png
Figure5によると論理合成をしてから、スクリプトでBMMファイルの処理をして、インプリメントを行う。並列してSDKでソフトウェアを作って、それをスクリプトで、ハードウェア(BlockRAM)に初期化データとしてインポートする必要がある。

Create Merged BMM:2つ以上のMicroBlaze MCSコアがあるなどの理由でBMMファイルが複数ある場合は、BMMファイルをマージして1つにする必要があるようだ。 microblaze_mcs_setup.tclというtclスクリプトを実行して、microblaze_mcs_merged.bmmを生成する。tclスクリプトを実行しないでもテキストエディタで自分で編集しても良いそうだ。
Updata Tool to Use BMM:このステップは、ツールにどのBMMファイルを使用するかを指示する。tclスクリプトmicroblaze_mcs_setup.tclを実行する。プロジェクトのプロパティは、NGDBuildのコマンドにコマンドラインオプションを追加することによって、適切なBMMファイルを使用できるようになる。


MicroBlaze MCSをテストする2(PlanAhead13.4編)”の最後のインプリメント済みの状態からスタートする。

1.一旦、MicroBlaze MCSを再生成した。

2.PlanAheadのTcl Consoleで以下のコマンドを実行した。

cd H:
cd /HDL/FndtnISEWork/Spartan6/Atlys/test/MB_MCS_PlanAhead_led_test2
source MB_MCS_PlanAhead_led_test2.srcs/sources_1/ip/microblaze_mcs_v1_0_0/microblaze_mcs_setup.tcl


MB_MCS_36_120126.png
・下のTCL Consoleをクリックして、ピンクの四角のコマンド入力領域にコマンドを入力する。

3.左のImplement ボタンをクリックして、インプリメントを実行した。

4.エラー発生。
MB_MCS_37_120126.png

LogiCORE IP MicroBlaze Micro Controller System (v1.0)に”NgdBuild:989 - Failed to process BMM information”の場合の対処方法が書いてあった。
“Path to core instance”パラメータと実際のインスタンス名かパスが違っているか? “Memory Size"パラメータが実際とBMMファイルで違っているそうだ。
このMicroBlaze MCSは他のプロジェクトの物をプロジェクトフォルダごとコピーしたので、消去して、新規で生成することにした。

5.MicroBlaze MCSコンフィグレーション・ダイアログに“Path to core instance”があった。Verilogファイルのインタンス名をmcs_0にすれば良いんだ。。。

microblaze_mcs_v1_0_0 mcs_0 (
 .Clk(clk), // input Clk
 .Reset(reset), // input Reset
 .PIT1_Interrupt(PIT1_Interrupt), // output PIT1_Interrupt
 .PIT1_Toggle(PIT1_Toggle), // output PIT1_Toggle
 .GPO1(LED_out), // output [7 : 0] GPO1
 .INTC_IRQ(INTC_IRQ) // output INTC_IRQ
);


6.これでOKだった。ビットファイルまで生成できた。
MB_MCS_39_120126.png

  1. 2012年01月26日 05:53 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

Programmable XBee-PRO ZBのX-CTUによる設定

Programmable XBee-PRO ZBXBeeエクスプローラUSBドングル(XBeeの挿入方向はシルクに表示されている)に挿入してX-CTUツールで設定しようとしていたが、どうやってもおかしくなる。だいぶ困っていたが、やり方が分かったので、備忘録として書いておく。

・X-CTUを立ち上げて、PC Settings タブでTest/Query ボタンをクリックして、通信テストを行った。
XBee_1_120124.png

・しかし、長い時間がかかった後で、おかしな値の結果が表示された。まるでタイムアウトしているような感じだった。
XBee_2_120124.png

いろいろ調べたが、情報がなかった。

・X-CTUのTerminal タブで、リターンキーを押すと、メニューが出てきた。Bypass Modeが怪しそうなので、Bを入力した。
XBee_3_120124.png

・もう一度、PC Settings タブでTest/Query ボタンをクリックして、通信テストを行った。

・すぐに、正しそうな値がダイアログに表示された。
XBee_4_120124.png

・Modem Configuration タブでReadボタンをクリックするとコンフィギュレーションを見ることができた。
XBee_5_120124.png

つまり、Programmable XBee-PRO ZBでは、最初にX-CTUのTerminal タブで、Bypass Modeに設定する必要がある。

これで、ずいぶん時間を無駄にしてしまった。。。
  1. 2012年01月24日 17:52 |
  2. XBee
  3. | トラックバック:0
  4. | コメント:2

MicroBlaze MCSをテストする2(PlanAhead13.4編)

MicroBlaze MCSをテストする1(IPコアの生成、Project Navigator編)”の続き。のつもりだったが、PlanAhead13.4のプロジェクトサンプルとしてみてください。MicroBlaze MCSはIPを生成した後で、BMMファイルを生成するためにスクリプトを実行する必要があるようです。

Project Navigator を使用すると、MicroBlaze MCSの生成が遅いので、生成が速いPlanAheadプロジェクトでMicroBlaze MCSを試すことにする。MicroBlaze MCSコアのコンフィグレーションはProject Navigator と同一としてある。ISEのバージョンは13.4。

1.microblaze_mcs_v1_0_0 というMicroBlaze MCS IPが生成されている。まずはインスタンシエーション・テンプレートを確認する。Sourceウインドウで、Librariesタブをクリックして、microblaze_mcs_v1_0_0.veo をダブルクリックして、ファイルを開く。インスタンシエーション・テンプレートが書かれているので、これを利用する。
MB_MCS_14_120122.png

・MicroBlaze MCS のトップファイルを生成する。

2.FileメニューからAdd Source...を選択する。または、Sourcesウインドウで、右クリックメニューメニューからAdd Source...を選択する。

3.Add Soures ダイアログが開く。Add or Create Design Sources ラジオボタンをクリックして、Next>ボタンをクリックする。
MB_MCS_15_120122.png

4.Add or Create Design Sources ダイアログが開く。Create File...ボタンをクリックする。
MB_MCS_16_120122.png

5.Create Source File ダイアログが開く。File name: にMicroBlaze_MCS_Test と入力して、OKボタンをクリックする。
MB_MCS_17_120122.png

6.Add or Create Design Sources ダイアログに、MicroBlaze_MCS_Test.v が入った。Finishボタンをクリックする。
MB_MCS_18_120122.png

7.Define Modules ダイアログが開く。ポートを宣言した。OKボタンをクリックする。
MB_MCS_19_120124.png

8.MicroBlaze_MCS_Test.v のスケルトンができた。これに、microblaze_mcs_v1_0_0 をインスタンスする。どうやらPlanAheadのtext editorに補完機能は無いようだ。Project Navigator は補完機能がある。この辺も充実して欲しい。
MB_MCS_20_120124.png
今気がついたがPlanAheadのSourcesウインドウにHierarchy タブが追加されていて、HDLソースやIPが階層的に表示することが出来るようになった。良かった。使いやすくなったと思う。少なくともISE13.1では、Hierarchy タブは無かった。”PlanAhead13.1を試してみた1(インプリメント、シミュレーション)”参照。

・ISE12.4の時とは手順が違っているみたいなので、やり直します。(2012/01/25)

9.左のRTL Desgin をクリックして、論理合成を実行した。

10.MB_MCSがブラックボックスだというダイアログが出るが、これはOKボタンをクリックしてダイアログを消した。

11.RTL Schmaticが表示された。
MB_MCS_26_120125.png

12.LayoutメニューからI/O Planning を選択する。
MB_MCS_27_120125.png

13.I/Oピンを割り当てる画面になったので、下のI/O Portsウインドウののピンを右上のFPGAのパッケージの画面にドラック&ドロップする。
MB_MCS_28_120125.png
・I/O PortsウインドウのSiteにに直接ピン番号を入力することも出来る。
・同時にI/O Stdを指定する。

14.I/Oピン制約が終了したので、FileメニューのSave Designを選択すると、MicroBlaze_MCS_Test.ucfが生成された。
MB_MCS_29_120125.png

15.MicroBlaze_MCS_Test.ucfをダブルクリックして開き、タイミング制約を追加した。
MB_MCS_34_120125.png

16.Flow メニューからProject Managerを選択して、Project Manager画面に戻した。

17.まだ論理合成を行なっていないので、論理合成を実行する。左のSynthesizeボタンをクリックした。

・論理合成が始まった。ここでMicroBlaze MCSのIPの生成を行なっているようだ。時間がかかる。PlanAheadプロジェクトでは、IPの本格的な生成は論理合成フェーズでやるようだ。

18.Synthesis Completed ダイアログが表示された。Implement ラジオボタンが選択されているので、OKボタンをクリックした。
MB_MCS_21_120124.png

19.Implementation Completed ダイアログが開く。Generate Bitstream ラジオボタンをクリックして、OKボタンをクリックした。
MB_MCS_30_120125.png

19.Generate BitStream ダイアログが出た。OKボタンをクリックする。
MB_MCS_31_120125.png

20.Bitstream Generation Completed ダイアログが出た。OKボタンをクリックする。
MB_MCS_32_120125.png

21.これで一応、インプリメント、ビットファイルの生成が終了した。
MB_MCS_33_120125.png

これで、とりあえずインプリメントとビットファイルの生成が終了した。
  1. 2012年01月24日 05:51 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:2

MicroBlaze MCSをテストする1(IPコアの生成、Project Navigator編)

ISE13.4が出たので、早速インストールした。ISE13.4 には、MicroBlaze MCSという以前のSimple MicroBlaze の代わりとも言えるMicroBlaze コアがCore Generator に追加されている。(ISE13.4 のリリースノート
そこで、MicroBlaze MCS を試して見ることにした。MicroBlaze MCS 自体はISE WebPACKでも使用できるのだが、簡単に使用するためのSDKはEDKのライセンスが必要だ。それが残念だが、"カスタム設計の MicroBlaze”さんや、SweetCafeさんのMicroBlazeクロスコンパイラなどが必要になる。

今回はMicroBlaze MCSを生成して、SDKで動作を確認する。使用するボードはAtlysボードで、テストする内容は、”AtlysボードでXPSプロジェクトを試す2(ソフトウェアを試す)”でテストしたLED+1にする。

1.最初にAtlysボード用のプロジェクトを生成した。
MB_MCS_1_120122.png

2.Project メニューからNew Source... を選択する。

3.New Source Wizard が開く。IP(CORE Generator & Architecture Wizard) を選択し、File Name:にMB_MCS と入力する。Next > ボタンをクリックする。
MB_MCS_2_120122.png

4.Select IPでCPUを開けると、MicroBlaze MCSがあるので、それをクリックして、Next > をクリックする。
MB_MCS_3_120122.png

5.Summary ダイアログが出る。Finishボタンをクリックする。
MB_MCS_4_120122.png

6.MicroBlaze MCSのダイアログが開く。

7.MCSタブでは、動作クロックやMemory Size、IO Bus、Debug Support、MicroBlaze Trace Busを選択できる。ここでは。Enable Debug Support にチェックを入れた。
MB_MCS_5_120122.png

8.UARTタブでは、UARTの設定をすることができる。UARTは使用しない。
MB_MCS_6_120122.png

9.FITタブでは、固定値の4つのインターバル・タイマーを設定することが出来る。FITは使用しない。
MB_MCS_7_120122.png

10.PITタブでは、プログラマブル・インターバル・タイマーを4つ設定することが出来る。ここでは、PIT 1 のみ使用する。
MB_MCS_8_120122.png

11.GPOタブでは、4つの汎用出力ポートを設定する。ここでは、LEDの点灯用に8ビット分を設定する。
MB_MCS_9_120122.png

12.GPIタブでは、4つの汎用入力ポートを設定する。GPOは使用しない。
MB_MCS_10_120122.png

13.Interruptsタブでは、外部割り込み入力ポートを設定する。外部割り込みは使用しない。
MB_MCS_11_120122.png

14.これで設定が終了したので、Generateボタンをクリックする。

15.生成するに相当時間がかかったが、MicroBlaze MCSが生成された。(30分以上かかりました。PlanAheadプロジェクトだったら10秒で生成できたいう情報を見たので、PlanAheadプロジェクトでもやってみます。)
MB_MCS_12_120122.png

続く。

(追記)
PlanAheadでプロジェクトを作って、MicroBlaze MCSのIPを生成してみたら、数秒で生成できました。PlanAheadでやってみようと思います。(エラーは.xcoでElaborateしようとして、HDLでないとだめと怒られた時のエラーです)
MB_MCS_13_120122.png

続く。
  1. 2012年01月22日 12:57 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

ALWAYS 三丁目の夕日'64’(映画)を見てきた

ALWAYS 三丁目の夕日'64を見てきました。最初はマンネリかな?と思いましたが、最後は少々臭いと思っても感動しました。これで三丁目の夕日シリーズも終了だと思います。

これから、近所の組合の新年会なので行ってきます。
  1. 2012年01月21日 17:30 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:1

ar37425のAXI4 Masterサンプルを試す6(シミュレーション3)

ar37425のAXI4 Masterサンプルを試す5(シミュレーション2)”の続き。

Xilinx社のAXIバス回路のサンプルの動作を詳しく見ていこうと思う。

AXI4 Burst Write
まずは、AXI4 Burst Writeを見ていこう。図1にシミュレーション波形を示す。
AXI4 Burst Writeはアドレスd0000040番地からのBurst Writeとなっている。
AXI_Protcol_5_120119.png
図1. AXI4 Burst Write シミュレーション波形

これを、”AXI4 プロトコルの勉強3(書きこみバースト例)”と見比べてみる。そうすると、オーバーラップしてない書き込みバーストに当たる。
オーバーラップしていない書き込みバーストのタイミングチャート例を図2に示す。
AXI_Protcol_3_111209.png
図2. AXI4バスのオーバーラップしていない書き込みバーストのタイミングチャート例

図1で、M_AXI_AWVALIDが常時 1 なのに、バーストWriteが終了してからしかM_AXI_AWREADYが 1 にアサートされないのは、アドレス転送をオーバーラップできないということになる。つまり、XilinxのバーストWriteはアドレス転送をオーバーラップできない。(バースト長に依存して、オーバーラップできないという可能性がある)

Write Address Channel
・M_AXI_AWADDR はアドレスでd0000040番地。
・M_AXI_AWVALID はアドレスが有効なことを示す。
・M_AXI_AWREADYはスレーブがアドレスを取得したことを示す。1の時にAW...にで示されるアドレス転送の属性をスレーブが取得する。
・M_AXI_AWID は ID、いつも 0 。1 は使用していない。
・M_AXI_AWLEN は 0f で16個のバーストがあることを示している。
・M_AXI_AWSIZE は 2 で、4バイトつまり32ビット単位でバーストすることを示す。
・M_AXI_AWBURST は 1 で、INCR。アドレスは単調増加。
・M_AXI_AWLOCK は 0 。
・M_AXI_AWCACHE は 2 で、Normal Non-cacheable Non-bufferable。
・M_AXI_AWPROTは 0 で、Data access, Secure access, Unprivileged access。
・M_AXI_AWQOS は 0 で、デフォルト値。
・M_AXI_AWUSER は 0。ユーザー信号。

Write Data Channel
・M_AXI_WDATA は書き込みデータ。00000000から0000000fまで。
・M_AXI_WSTRB はバイト・イネーブル。常に1。
・M_AXI_WLAST は最後のデータ転送を示す。
・M_AXI_WVALID は書き込みデータが有効なことを示す。
・M_AXI_WREADY はスレーブが書き込みデータを受け取れる状態にあることを示す。

Write Response Channel
・M_AXI_BID はID、いつも0。M_AXI_AWID が0のみだから。
・M_AXI_BRESP は0。OKAYで書きこみ成功。
・M_AXI_BVALID は M_AXI_BID, M_AXI_BRESP が有効であることを示す。
・M_AXI_BREADY はマスターが M_AXI_B... 信号を受け取れることを示す。

だいたい想定内の信号だったが、M_AXI_AWCACHE が Normal Non-cacheable Non-bufferable だった。
なお、これは2番目のBurst Writeとなっている。最初のBurst Writeのアドレスの書き込みはシミュレーションの最初の方で行われている。その後、WriteしようにもDDR2 SDRAMが初期化中でWriteできなかったので、ずっと待機していて、図1に示されたBurst Writeの前に書きこまれている。

AXI4 Burst Read
AXI4 Burst Readを見ていこう。図3にシミュレーション波形を貼る。
AXI_Protcol_6_120120.png
図3.AXI4 Burst Read シミュレーション波形

黄色のカーソルはAXI4 Burst Writeと同じ位置にある。AXI4 Burst Readはアドレスd0000000番地から16バーストのReadになっている。d0000000番地にWriteしてから同じ番地をReadしている。
AXI4 Burst Write はアドレス転送がオーバーラップしていないが、AXI4 Burst Read はオーバーラップしている。ReadはDDR2 SDRAMを読んでくるので、レイテンシが発生するので、合理的な仕様といえると思う。
図4に、オーバーラップしている読み出しバースト例を下に示す。
AXI_Protcol_2_111209.png
図4. AXI4バスのオーバーラップしている読み出しバースト例

AXI4 Burst Read の M_AXI_ARVALID は常に1ではなく、必用な場合に1をアサートしている。これはXilinxのAXI4 Burst Read がオーバーラップを許しているということを示している。

Read Address Channel
・M_AXI_ARADDR はアドレス。このReadデータのアドレスは d0000000番地。
・M_AXI_ARVALID はアドレスが有効であることを示す。と言うか、Readしたいという意思を示す。
・M_AXI_ARREADY はアドレスが有効になって、スレーブがアドレスを受け取ったことを示す。
・M_AXI_ARID はいつも0。
・M_AXI_ARLEN は 0f で16個のバーストがあることを示している。
・M_AXI_ARSIZE は 2 で、4バイトつまり32ビット単位でバーストすることを示す。
・M_AXI_ARBURST は 1 で、INCR。アドレスは単調増加。
・M_AXI_ARLOCK は 0 。
・M_AXI_ARCACHE は 2 で、Normal Non-cacheable Non-bufferable。
・M_AXI_ARPROTは 0 で、Data access, Secure access, Unprivileged access。
・M_AXI_ARQOS は 0 で、デフォルト値。
・M_AXI_ARUSER は 0。ユーザー信号。

Read Data Channel
・M_AXI_RID はID、いつも0。M_AXI_ARID が0のみだから。
・M_AXI_RDATA は、Readデータ。00000000 から 0000000f まで。
・M_AXI_RREESP は 0 で、OKAY。Readデータが問題ないことを示す。
・M_AXI_RLAST は最後のデータ転送を示す。
・M_AXI_RVALID は、スレーブからのReadデータが有効であることを示す。
・M_AXI_RREADY は、マスタがReadデータを受け取ったことを示す。
・M_AXI_RUSER は 0。ユーザー信号。


最後に、AXI4 Busrt Write, AXI4 Burst Read を行なっている時のDDR2 SDRAMアクセスの様子を見てみよう。
図5に、DDR2 SDRAMアクセスのシミュレーション波形を示す。
AXI_Protcol_7_120120.png
図5. DDR2 SDRAMアクセスのシミュレーション波形

mcbx_dram_cas_n と mcbx_dram_we_n が同時に0になるのがWriteで、mcbx_dram_cas_n のみが0になるのがReadとなる。
最初のバーストはWriteで、Read, Write, Read と続いている。AXI4 Master の処理をしているのが確認できた。
黄色いカーソルは図1,図3,図5共に同じ位置に置いてある。

  1. 2012年01月20日 05:19 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

Altium Designer の回路シミュレーション

Alitum Designer で回路シミュレーションをやってみた。前回、Exampleでやってみたことはあったが自分で作った回路で回路シミュレーションをするのは初めてだ。

回路シミュレーション解析の 設定と実行”チュートリアルを参考にした。

今回、PCB設計で書いた回路はSIMモデルが入っているので、SIMモデルを追加しなくてもシミュレーションが出来る。

・SIMモデルは、トランジスタをダブルクリックして、Properties for Schmatic Component in Sheetダイアログを表示して、その右下のModels の一番下にある。
Altium_Designer_208_120119.png

・SIMモデルをダブルクリックすると、Sim Modelダイアログが開く。Model Location はUse SIM model form component library Miscellaneous Devices.IntLib になっている。統合ライブラリのSIMモデルを参照しているようだ。
Altium_Designer_209_120119.png

・回路図に+12V電源を追加した。
Altium_Designer_210_120119.png

・+12V電源を追加するやり方は、右のライブラリ・タブをクリックして、ライブラリ・ウインドウを出してSearchボタンをクリックする。
Altium_Designer_211_120119.png

・ライブラリ検索ダイアログで、フィールドはName、オペレータはcontains、値をVSRCで検索したら見つかった。
Altium_Designer_212_120119.png

・Place VSRCボタンをクリックして、回路図に配置した。

・VSRCをダブルクリックして、Properties for Schmatic Component in Sheetダイアログを表示してDesignatorにV1、Valueに12Vを入力した。
Altium_Designer_213_120119.png

・VSRCに配線をつないで、+12VとGNDのネットラベルを付けた。

次は、回路シミュレーションを行う。

・デザインメニューからシミュレーション -> Mixed Sim を選択する。

・解析設定ダイアログで解析シグナルに4つの信号を入れた。波形を表示するのは、Transient Analysisだ。Transient Analysisをクリックする。
Altium_Designer_214_120119.png

・ここでシミュレーション時間やシミュレーションのステップ時間を設定する。最初設定されていた値だと、マルチバイブレータにはシミュレーション時間が足りないし、ステップ時間が細かすぎるので、下図のように設定をやり直した。
Altium_Designer_215_120119.png

・OKボタンをクリックするとシミュレーションが開始される。

・シミュレーション結果を下に示す。綺麗なマルチバイブレータのベース波形とコレクタ波形が見えた。
Altium_Designer_216_120119.png

・上図でnet1_1 の波形を見ると3.8msec で立ち上がって6.2msec でまた、立ち上がっている。つまり、周期は、6.2msec - 3.8msec = 2.6msecとなる。周波数は、1/2.6msec ≒ 384.6Hzとなることがわかった。
  1. 2012年01月19日 05:00 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門8(PCBドキュメントの作成6)

Altium Designer によるPCB設計入門7(PCBドキュメントの作成5)”の続き。

今回はチュートリアル最後のガーバーファイルとドリルファイルの出力を行う。

95.ファイルメニューの製造用データ出力 -> Gerber Filesを選択する。

96.ガーバー 設定・ダイアログが開く。
Altium_Designer_199_120117.png

97.レイヤ・タブをクリックして、出力レイヤ・ボタンをクリックし、プルダウンメニューから使用をオンを選択する。
Altium_Designer_200_120117.png

98.代表的なレイヤにチェックが付く。OKボタンをクリックする。
Altium_Designer_201_120117.png

99.ガーバーファイルが出力された。その内のトップレイヤを見ると、基板外形線がない。これではFusion PCBで基板を作成できない。
Altium_Designer_202_120117.png

・Mechanicalレイヤに基板外形を入れる。

100.Qキーで単位をmmに変更する。

101.グリッドを変更する。デザインメニューからボードオブションを選択する。

102.デザインメニューからボードオブションを選択する。ボードオブション・ダイアログでグリッド...ボタンをクリックする。
Altium_Designer_126_120111.png

103.グリッド マネージャ・ダイアログが開く。最初の行をダブルクリックする。
Altium_Designer_127_120111.png

104.Cartesian Grid Editorダイアログが開く。ステップのステップXをプルダウンメニューから0.5mmに変更した。すべてのダイアログをOKボタンをクリックして閉じる。
Altium_Designer_203_120117.png

105.Mechanical 1 Layer を選択して、原点を左下に設定する。編集メニューから原点 -> 設定を選び、十字カーソルを基板の左下のKeep-Out Layerの外形の角に合わせて、クリックする。
Altium_Designer_204_120117.png

106.配置メニューからラインを選択する。

107.基板外形に従ってラインを書いた。
Altium_Designer_205_120117.png

108.これでもう一度、ガーバーファイル出力を行う。

109.ガーバー設定ダイアログのレイヤ・タブで、全てに出力に追加するメカニカルレイヤでMechanical 1 にチェックを入れる。
Altium_Designer_206_120117.png

110.これでガーバーファイル出力すると、外形線が付いた。
Altium_Designer_207_120117.png

これにて終了。
しかし、Keep-Out Layerのラインからベタや配線が制約されたクリアランスで逃げて、外形からKeep-Out Layerのラインが内に入っているので、2重に逃げている感じだ。やはり、空のPCBドキュメントを作成して、自分でKeep-Out LayerのラインとMechanical Layerの基板外形ラインを合わせるか、ウィザードで作った後で、Keep-Out Layerの外形線を一旦消して、基板外形に書きなおし、Mechanical Layerの基板外形ラインを書いたほうが良いと思う。
  1. 2012年01月18日 04:55 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:1

Altium Designer によるPCB設計入門7(PCBドキュメントの作成5)

Altium Designer によるPCB設計入門6(PCBドキュメントの作成4)”の続き。

前回でPCBドキュメントが完成した。今回はDRCを行なう。

76.デザインメニューからレイヤと表示色(ショートカットキーはLキー)を選ぶ。

77.システム配色のDRC Error Markers オプションの隣にある表示にチェックが入っていることを確認する。
Altium_Designer_181_120117.png

78.ツールメニューからデザインルールチェックを選択する。

79.デザインルールチェック・ダイアログが開く。DRC実行ボタンをクリックする。
Altium_Designer_182_120117.png

80.Design Rule Verification Reportが表示された。Clearance Constraintをクリックする。
Altium_Designer_183_120117.png

81.Clearance Constraintのリストが表示された。Pad Q2-2(3475mil,4475mil) Multi-Layerをクリックする。
Altium_Designer_184_120117.png

82.Clearance Constraintのエラー部分が表示された。トランジスタのパッドのクリアランスだ。緑色で表示されている。
Altium_Designer_185_120117.png

83.パッド部分を拡大すると13milよりも小さいという表示がされている。
Altium_Designer_186_120117.png

(これが表示されない場合は、プリファレンスのPCB Editor -> DRC Violaions Disply -> DRC違反表示スタイルを選択の下のClearanceの表示の違反の表示にチェックが入っていることを確認する)

・パッド間の間隙を見てみる。

84.レポートメニューからプリミティブ間隙の計測を選択する。

85.Q2の3番パッドの中心をクリックする。
Altium_Designer_187_120117.png

85.ポップアップメニューからPad Q2-3を選択する。
Altium_Designer_188_120117.png

86.隣のQ2の2番パッドの中心をクリックする。
Altium_Designer_189_120117.png

87.ポップアップメニューからPad Q2-2を選択する。
Altium_Designer_190_120117.png

88.Informationダイアログが出た。Q2-3番パッドとQ2-2番パッドの距離は10.63milだった。これだとクリアランス違反になる。
Altium_Designer_191_120117.png

・トランジスタのパッドのみにクリアランス制約を追加する。

89.デザインメニューからデザイルールを選択する。

90.PCB ルールと制約条件編集ダイアログが開く。Clearance -> Clearance をクリックする。
Altium_Designer_192_120117.png

89.PCB ルールと制約条件編集ダイアログの Clearance -> Clearance で右クリックして、右クリックメニューからルールを追加を選択する。
Altium_Designer_193_120117.png

90.Clearance_1が生成される。Clearance_1 を Clearance_Transistors に変更する。Where The First Object Matches で詳細設定(クエリ)のラジオボタンをクリックして、クエリ ビルダのボタンをクリックする。
Altium_Designer_194_120117.png

91.Buliding Query from Boardダイアログが開く。条件タイプ/演算子の最初の行の下向き三角をクリックして、Associated with Footprint を選択する。
Altium_Designer_195_120117.png

92.条件値で下向き三角をクリックして、TO-92Aを選択する。OKボタンをクリックする。
Altium_Designer_196_120117.png

93.Clearance_Transistors 制約のクエリに HasFootprint('TO-92A') が入った。クリアランスの制約は10milとなっている。OKボタンをクリックする。
Altium_Designer_197_120117.png

94.TO-92Aパッケージのトランジスタ・パッドのクリアランス制約違反は解消された。
Altium_Designer_198_120117.png

次は、ガーバーファイルを出力する。

Altium Designer によるPCB設計入門8(PCBドキュメントの作成6)”に続く。
  1. 2012年01月17日 07:51 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門6(PCBドキュメントの作成4)

Altium Designer によるPCB設計入門5(PCBドキュメントの作成3)”の続き。

今回はマニュアル配線を試みる。
前回、自動配線してあるので、配線を削除してラッツネットにするところから。

57.ツールメニューからアンルート -> 基板全体を選択する。

58.ラッツネットに戻った。ここから配線を始める。
Altium_Designer_154_120115.png

59.インタラクティブ配線アイコンをクリックして、配線を開始する。
Altium_Designer_163_120115.png

60.カーソルが十字カーソルに変化する。コネクタP1の上のパッドをクリックして配線を始める。クリックすると配線が引き始まり、ラッツネットがつながっていて接続されるべきパッドがハイライト表示される。
Altium_Designer_164_120115.png

・前に決めたクリアランスを守って配線される。
・もし、基板外形がどっかに行ってわからなくなったら、V, Fキー、またはZ, Aキーで元に戻せる。(2つのショートカットはズームする対象が異なる)
・配線している最中にズームしたい場合にはCTRL+マウスホイール上方回しをお勧めする。なおズームすると配線と部品パッドにネット名が見える。
Altium_Designer_165_120115.png

・配線している間に、次のシグナルレイヤにビアを打って配線を移したい場合は、テンキーの*を押す。(私は、”Altium Designer のショートカットキーを変更する”でショートカットキーを変更しているので、Nキー
Altium_Designer_166_120115.png

・SHIFT+スペースキーで破線の種類を選べる。直角配線、曲線配線...
Altium_Designer_167_120115.png

BackSpaceキーで、1つ前のクリックして確定した部分を戻すことが出来る。

・配線中に、CTRL+クリックでAuto-Complete 機能が使用できる。現在の点と配線する点は同じレイヤにある必要がある。必ずしも配線できないこともあるようだ。

・インタラクティブ配線は4つの配線モードを持っていて、SHIFT+Rで切り替えられる。
 ・Push(押しのけ)、Walkaround(迂回)、Hug & Push(ハグ&プッシュ)、Ignore(無視)

61.配線を行った。Top Layer, Bottom Layerの切り替えは下のタブで行う。(時間がないので適当です)
Altium_Designer_169_120115.png

62.Top LayerにGNDのベタを作る。配置メニューからポリゴンを選択する。

63.ポリゴン・ダイアログが開く。レイヤはTop Layerとし、接続ネットはGNDとする。分離エリアを削除にチェックを入れる。OKボタンをクリックする。
Altium_Designer_170_120115.png

64.Keep-Out Layerのピンクの枠に合わせて4隅をクリックする。
Altium_Designer_171_120115.png

65.ベタGNDが生成された。
Altium_Designer_172_120115.png

66.拡大するとGNDも逃げてしまっていた。
Altium_Designer_173_120115.png

67.ベタGNDをダブルクリックすると、ポリゴン・ダイアログが開いた。ついでにポリゴン名をTop Layer-GNDに変更して、Pour Over All Same Net Objectsに設定を変更する。
Altium_Designer_174_120115.png

68.Confirmダイアログが出るので、Yesボタンをクリックする。

69.GNDの配線がベタGNDに取り込まれた。
Altium_Designer_175_120115.png

70.ここでBottom Layerタブをクリックすると、Bottom Layerの配線がTop Layerの上に表示される。
Altium_Designer_176_120115.png

71.ここでSHIFT+Sキーを押すと、現在のレイヤ(Bottom Layer)だけが表示される。
Altium_Designer_177_120115.png

72.Bottom LayerにもベタGNDを貼った。
Altium_Designer_178_120115.png

・これでだいたい完成か?SHIFT+Sキーで1つのレイヤだけ表示しているとシルク・レイヤも表示されないので、もう一度、SHIFT+Sキーでマルチレイヤ表示に戻す。
Altium_Designer_179_120115.png

73.これで、だいたい終了なので、PCBドキュメントをセーブしよう。

74.表示メニューから3Dへ切り替えを選択すると、3Dモードになる。SHIFTキーを押して出てきた図形の真ん中の点を右ドラックすると回転する。
Altium_Designer_180_120115.png

75.チュートリアルによるとケースを付けた際の外観デザインもAltium Designerで出来るようだ。(チュートリアル参照)

デザイルールチェック、ガーバーデータ出力に続く。

Altium Designer によるPCB設計入門7(PCBドキュメントの作成5)”に続く。

  1. 2012年01月16日 06:01 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

映画『マイウェイ 12000キロの真実』を見てきました

映画『マイウェイ 12000キロの真実』を見てきました。戦争シーンが迫力ありました。意外な結末で感動的な最後でした。(個人的な意見です)
来週は、三丁目の夕日だそうでうs.
  1. 2012年01月15日 20:27 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Altium Designer のショートカットキーを変更する

Altium DesignerでPCBドキュメントを作っていると、配線中のレイヤの移動、つまりビアを打つキーがテンキーの+や-に割り当てっていて、ノートパソコンやテンキーレスキーボードを使っていると、とても不便だ。
そこでショートカットキーを変更してみることにした。

(注意)PとN、JとKは本来ショートカットが割り当てられています。このブログに書いてあるショートカットキーの設定をすると本来の機能を上書きしてしまいます。現在は”次のシグナルレイヤへ”のNだけ割り当てています。

まずは、Altium Designerのショートカットキーのマニュアルはここにある
次に、ショートカットキーの変更の仕方のマニュアルは、”Altium Designer リソースの カスタマイズ”だ。

1.メニューバーで右クリックして、右クリックメニューからCustomize...を選択する。
Altium_Designer_155_120115.png

2.PCBエディタを起動しているので、Customizing PCB Editorダイアログが開く。

3.カテゴリからPCBショートカットをクリックした。
Altium_Designer_156_120115.png

4.まずは、インタラクティブ配線モードにした時のレイヤの切り替えショートカットキーを変更する。デフォルトでは、”次のシグナルレイヤへ”はテンキーの*で、”前のシグナルレイヤへ”がSHIFT+テンキーの*だ。
コマンドをスクロールして、”次のシグナルレイヤへ”をダブルクリックする。
Altium_Designer_157_120115.png

5.Edit Command ダイアログが開く。ショートカットのプライマリを変更する。コンボボックスなので、リストから選んでもよいし、直接入力してもよい。
Altium_Designer_158_120115.png

6.Nキーに変更した。OKボタンをクリックする。
Altium_Designer_159_120115.png

7.”次のシグナルレイヤへ”のショートカットキーがNキーに変更された。(確かめて見ましたが、確かにNキーに変更になっていました)
Altium_Designer_160_120115.png

8.”前のシグナルレイヤへ”のショートカットキーをPキーに変更した。
Altium_Designer_161_120115.png

9.同様に、テンキーの+キーだった”次のレイヤへ”をJキーに、テンキーの-キーだった”前のレイヤへ”をKキーに変更した。
Altium_Designer_162_120115.png

これで、テンキーレスキーボードでもノートパソコンでもAlitum DesignerでのPCBが作りやすくなったと思う。と言うか、これができないとビアも掘れずに、とっても不便で使いものにならない。。。

ちなみに、ビアを打つときは、”次にレイヤへ”を使うとシグナルレイヤ以外に配線を作ってしまうので、”次のシグナルレイヤへ”つまり、今のアサインではNキーを使ったほうが便利のようです。
  1. 2012年01月15日 05:39 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

ar37425のAXI4 Masterサンプルを試す5(シミュレーション2)

ar37425のAXI4 Masterサンプルを試す4(シミュレーション)”の続き。

久しぶりにAXI4 Masterの話題。Altium Designer をやっている間にもAXI4 Masterのシミュレーションをいじっていた。やっと動いてきたので紹介する。

まずは、”Atlysボード+VmodCAMのシミュレーション”で紹介したように、Micron社のDDR2 SDRAMのモデルを使用した。
Micron社のDDR2 SDRAMのモデルのインスタンスをテストベンチに追加した。テストベンチをDDR2 SDRAMを使用するように大幅に変更した。

次に、DDR2 SDRAMのモデルを使用するためにデータバス幅とスピードグレードをdefineで指定する。
・Project Navigator のProcessesウインドウのSimulate Behavioral Modelを右クリックして、右クリックメニューの中からProcess Properties...を選択した。

・Specify `define Macro Name and Value にsg25E,x16 を設定する。
Atlys_52_120114.png

これで準備は終了。
シミュレーションを行った。ISimの全画面を下に示す。
Atlys_53_120114.png

Wave画面の拡大図を下に示す。
Atlys_54_120114.png

上図で、黄色の四角で囲ってあるのがDDR2の初期化部分、ピンク色の四角がキャリブレーション。
その後、58.445usecでMCB_DDR2の初期化終了信号のuo_done_cal がアサートされている。その後のトランザクションはAXI Master IPからのアクセスと思われる。

今日はお仕事であまり時間がないので、テストベンチのソースコードを貼って終わりにする。

`timescale 10ps / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   05:18:27 01/07/2012
// Design Name:   system_top
// Module Name:   H:/HDL/FndtnISEWork/Spartan6/Atlys/test/Atlys_XPS_CamDisp/ISE/Atlys_XPS_CamDisp/system_top_tb.v
// Project Name:  Atlys_XPS_CamDisp
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: system_top
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module system_top_tb;
    `include "simulation/ddr2_parameters.vh";

    // Inputs
    reg RS232_Uart_1_sin;
    reg RESET;
    reg [0:4] Push_Buttons_5Bits_TRI_I;
    reg GCLK;
    reg Ethernet_Lite_TX_CLK;
    reg Ethernet_Lite_RX_ER;
    reg Ethernet_Lite_RX_DV;
    reg Ethernet_Lite_RX_CLK;
    reg [3:0] Ethernet_Lite_RXD;
    reg Ethernet_Lite_CRS;
    reg Ethernet_Lite_COL;
    reg [7:0] DIP_Switches_8Bits_TRI_I;

    // Outputs
    wire mcbx_dram_we_n;
    wire mcbx_dram_udm;
    wire mcbx_dram_ras_n;
    wire mcbx_dram_odt;
    wire mcbx_dram_ldm;
    wire mcbx_dram_clk_n;
    wire mcbx_dram_clk;
    wire mcbx_dram_cke;
    wire mcbx_dram_cas_n;
    wire [2:0] mcbx_dram_ba;
    wire [12:0] mcbx_dram_addr;
    wire RS232_Uart_1_sout;
    wire [7:0] LEDs_8Bits_TRI_O;
    wire Ethernet_Lite_TX_EN;
    wire [3:0] Ethernet_Lite_TXD;
    wire Ethernet_Lite_PHY_RST_N;
    wire Ethernet_Lite_MDC;
    wire axi_master_0_ERROR;

    // Bidirs
    wire zio;
    wire rzq;
    wire Ethernet_Lite_MDIO;

    wire    [DQS_BITS-1:0] ddr2_dqs_fpga, ddr2_dqs_sdram;
    wire    [DQS_BITS-1:0] ddr2_dqs_n_fpga, ddr2_dqs_n_sdram;
    wire    [DQ_BITS-1:0] ddr2_dq_fpga, ddr2_dq_sdram;
    reg        [DQS_BITS-1:0] ddr2_dqs_fpgan, ddr2_dqs_sdramn;
    reg        [DQS_BITS-1:0] ddr2_dqs_n_fpgan, ddr2_dqs_n_sdramn;
    reg        [DQ_BITS-1:0] ddr2_dq_fpgan, ddr2_dq_sdramn;
    wire    [2:0] cmd;
    reg        sdram_clk;
    reg        sdram_clkb;
    reg        [12:0] sdram_address;
    reg        [2:0] sdram_ba;
    reg        sdram_cke;
    reg        sdram_rasb, sdram_casb, sdram_web;
    reg        [1:0] sdram_dmn;
    wire    [1:0] sdram_dm;
    reg        sdram_odt;
    wire        reset;
    reg        enable_o;
    
    // Instantiate the Unit Under Test (UUT)
    system_top uut (
        .zio(zio), 
        .rzq(rzq), 
        .mcbx_dram_we_n(mcbx_dram_we_n), 
        .mcbx_dram_udqs_n(ddr2_dqs_n_fpga[1]), 
        .mcbx_dram_udqs(ddr2_dqs_fpga[1]), 
        .mcbx_dram_udm(mcbx_dram_udm), 
        .mcbx_dram_ras_n(mcbx_dram_ras_n), 
        .mcbx_dram_odt(mcbx_dram_odt), 
        .mcbx_dram_ldm(mcbx_dram_ldm), 
        .mcbx_dram_dqs_n(ddr2_dqs_n_fpga[0]), 
        .mcbx_dram_dqs(ddr2_dqs_fpga[0]), 
        .mcbx_dram_dq(ddr2_dq_fpga), 
        .mcbx_dram_clk_n(mcbx_dram_clk_n), 
        .mcbx_dram_clk(mcbx_dram_clk), 
        .mcbx_dram_cke(mcbx_dram_cke), 
        .mcbx_dram_cas_n(mcbx_dram_cas_n), 
        .mcbx_dram_ba(mcbx_dram_ba), 
        .mcbx_dram_addr(mcbx_dram_addr), 
        .RS232_Uart_1_sout(RS232_Uart_1_sout), 
        .RS232_Uart_1_sin(RS232_Uart_1_sin), 
        .RESET(RESET), 
        .Push_Buttons_5Bits_TRI_I(Push_Buttons_5Bits_TRI_I), 
        .LEDs_8Bits_TRI_O(LEDs_8Bits_TRI_O), 
        .GCLK(GCLK), 
        .Ethernet_Lite_TX_EN(Ethernet_Lite_TX_EN), 
        .Ethernet_Lite_TX_CLK(Ethernet_Lite_TX_CLK), 
        .Ethernet_Lite_TXD(Ethernet_Lite_TXD), 
        .Ethernet_Lite_RX_ER(Ethernet_Lite_RX_ER), 
        .Ethernet_Lite_RX_DV(Ethernet_Lite_RX_DV), 
        .Ethernet_Lite_RX_CLK(Ethernet_Lite_RX_CLK), 
        .Ethernet_Lite_RXD(Ethernet_Lite_RXD), 
        .Ethernet_Lite_PHY_RST_N(Ethernet_Lite_PHY_RST_N), 
        .Ethernet_Lite_MDIO(Ethernet_Lite_MDIO), 
        .Ethernet_Lite_MDC(Ethernet_Lite_MDC), 
        .Ethernet_Lite_CRS(Ethernet_Lite_CRS), 
        .Ethernet_Lite_COL(Ethernet_Lite_COL), 
        .DIP_Switches_8Bits_TRI_I(DIP_Switches_8Bits_TRI_I), 
        .axi_master_0_ERROR(axi_master_0_ERROR)
    );

    parameter PERIOD = 1000; // 100MHz clock
    parameter real DUTY_CYCLE = 0.5;
    parameter OFFSET = 0;
    
    initial    // Clock process for clk
    begin
        GCLK = 1'b0;
        #OFFSET;
        forever begin
            GCLK = 1'b0;
            #(PERIOD-(PERIOD*DUTY_CYCLE)) GCLK = 1'b1;
            #(PERIOD*DUTY_CYCLE);
        end
    end

    parameter DELAY_TIME = 200; // 2nsec
    
    assign cmd = {mcbx_dram_ras_n, mcbx_dram_cas_n, mcbx_dram_we_n};
    
    assign reset = ~RESET;
    always @(posedge mcbx_dram_clk, posedge reset)
        if (reset)
            enable_o <= 1'b0;
        else
            if (cmd==3'b100)
                enable_o <= 1'b0;
            else if (cmd==3'b101)
                enable_o <= 1'b1;

    always @ *
        if (enable_o == 1'b1)
            ddr2_dqs_fpgan <= #DELAY_TIME ddr2_dqs_sdram;
        else
            ddr2_dqs_fpgan <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b1)
            ddr2_dqs_n_fpgan <= #DELAY_TIME ddr2_dqs_n_sdram;
        else
            ddr2_dqs_n_fpgan <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b1)
            ddr2_dq_fpgan <= #DELAY_TIME ddr2_dq_sdram;
        else
            ddr2_dq_fpgan <= #DELAY_TIME {DQ_BITS{1'bz}};

    always @ *
        if (enable_o == 1'b0)
            ddr2_dqs_sdramn <= #DELAY_TIME ddr2_dqs_fpga;
        else
            ddr2_dqs_sdramn <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b0)
            ddr2_dqs_n_sdramn <= #DELAY_TIME ddr2_dqs_n_fpga;
        else
            ddr2_dqs_n_sdramn <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b0)
            ddr2_dq_sdramn <= #DELAY_TIME ddr2_dq_fpga;
        else
            ddr2_dq_sdramn <= #DELAY_TIME {DQ_BITS{1'bz}};
    
    assign ddr2_dqs_fpga = ddr2_dqs_fpgan;
    assign ddr2_dqs_n_fpga = ddr2_dqs_n_fpgan;
    assign ddr2_dq_fpga = ddr2_dq_fpgan;
    assign ddr2_dqs_sdram = ddr2_dqs_sdramn;
    assign ddr2_dqs_n_sdram = ddr2_dqs_n_sdramn;
    assign ddr2_dq_sdram = ddr2_dq_sdramn;

    always @ * begin
        sdram_clk <= #DELAY_TIME mcbx_dram_clk;
        sdram_clkb <= #DELAY_TIME mcbx_dram_clk_n;
        sdram_address <= #DELAY_TIME mcbx_dram_addr;
        sdram_ba <= #DELAY_TIME mcbx_dram_ba;
        sdram_cke <= #DELAY_TIME mcbx_dram_cke;
        sdram_rasb <= #DELAY_TIME mcbx_dram_ras_n;
        sdram_casb <= #DELAY_TIME mcbx_dram_cas_n;
        sdram_web <= #DELAY_TIME mcbx_dram_we_n;
        sdram_dmn <= #DELAY_TIME {mcbx_dram_udm, mcbx_dram_ldm};
        sdram_odt <= #DELAY_TIME mcbx_dram_odt;
    end
    assign sdram_dm = sdram_dmn;
    
    ddr2 MT47H64M16_25E(
        .dq(ddr2_dq_sdram),
        .dqs(ddr2_dqs_sdram),
        .dqs_n(ddr2_dqs_n_sdram),
        .rdqs_n(),
        .addr(sdram_address),
        .ba(sdram_ba),
        .ck(sdram_clk),
        .ck_n(sdram_clkb),
        .cke(sdram_cke),
        .cs_n(1'b0),
        .ras_n(sdram_rasb),
        .cas_n(sdram_casb),
        .we_n(sdram_web),
        .dm_rdqs(sdram_dm),
        .odt(sdram_odt)
    );

    initial begin
        // Initialize Inputs
        RS232_Uart_1_sin = 0;
        RESET = 1'b0;
        Push_Buttons_5Bits_TRI_I = 0;
        Ethernet_Lite_TX_CLK = 0;
        Ethernet_Lite_RX_ER = 0;
        Ethernet_Lite_RX_DV = 0;
        Ethernet_Lite_RX_CLK = 0;
        Ethernet_Lite_RXD = 0;
        Ethernet_Lite_CRS = 0;
        Ethernet_Lite_COL = 0;
        DIP_Switches_8Bits_TRI_I = 0;

        // Wait 100 ns for global reset to finish
        #10000;
        
        // Add stimulus here
        #5000;
        RESET = 1'b1;
    end
      
endmodule


  1. 2012年01月14日 05:09 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門5(PCBドキュメントの作成3)

Altium Designer によるPCB設計入門4(PCBドキュメントの作成2)”の続き。

今回の便利なショートカット(小文字でも大文字でもOK)
部品を回転させる:スペースキー
部品を基板の反対面に配置する:Lキー
画面を基板外形にフィットさせる:V, Fキー
オブジェクト配列・ダイアログを表示する:A, Aキー
部品の移動(1グリッド値):部品を選択して、CTRL+矢印キー
部品の移動(10グリッド値):部品を選択して、CTRL+SHIFT+矢印キー


前回はデザインルールを設定した。今回はいよいよ部品の配置と配線を行う。

43.マウスの左クリック・ホールドで部品をドラック&ドロップします。
Altium_Designer_140_120112.png

44.スペースキーで反時計回りに回転させる。
Altium_Designer_141_120112.png

・部品を裏側 (Bottom Layer) に配置するときには、Lキーを押す。Q2の文字が反転しているのがわかるはずだ。もう一度、Lキーを押すと表側 (Top Layer) に戻る。
Altium_Designer_142_120112.png

45.部品をチュートリアルを参考に配置し、ルーム(部品が置いてあった四角)を消した。V, Fキーで画面を基板外形にフィットさせた。
Altium_Designer_143_120112.png

・Altium Designerに装備されている対話式配置ツールで4つの抵抗が正しく配置されているか確認する。

46.4つの抵抗を選択する。選択する方法としては2つ方法がある。
*何も無い所を左クリックして、左クリックしながらドラックして4つの抵抗がすっぽり入るようにドラックする。
*4つの抵抗をSHIFT+左クリックする。
Altium_Designer_144_120112.png

47.A, Aキーでオブジェクト配列・ダイアログを表示する。

48.オブジェクト配列・ダイアログで、水平方向は左右均等ラジオボタンをクリックする。垂直方向は上へ寄せるラジオボタンをクリックする。OKボタンをクリックする。
Altium_Designer_145_120112.png

49.4つの抵抗の上が揃って、均等に配置された。
Altium_Designer_146_120112.png

・コンデンサのフットプリントを小さいものに変更する。

50.C1をダブルクリックして、コンポーネント・ダイアログを開く。
Altium_Designer_147_120112.png

51.フットプリントの名称にRAD-0.3が入っている。右の...をクリックする。

52.ブラウズライブラリ・ダイアログが開く。名称を RAD-0.3 から RAD-0.1 に変更する。RAD-0.1 をクリックして、OKボタンをクリックする。
Altium_Designer_148_120112.png

51.コンポーネント・ダイアログのフットプリントの名称にRAD-0.1が入った。このままOKボタンをクリックする。
Altium_Designer_149_120112.png

52.PCBデザインに戻ると、C1のみ小さくなっていた。
Altium_Designer_150_120112.png

53.C2も同じフットプリントに変更した。
Altium_Designer_151_120112.png

・部品をクリックして選択して、CTRL+矢印キーでグリッド値だけ部品が移動する。CTRL+SHIFT+矢印キーで部品は、グリッド値×10の分だけ移動する。グリッド値に合わせて移動量が変わる。


・試しに自動配線を試してみよう。

54.オートルートメニューから基板全体を選択する。

55.Situsオートルーター ストラテジ・ダイアログが開く。Route Allボタンをクリックする。
Altium_Designer_152_120113.png

56.下図に示すように、自動配線できました。GNDと+12Vは25mil、他の配線は12milです。
Altium_Designer_153_120113.png

続く。次はマニュアル配線編だ。

Altium Designer によるPCB設計入門6(PCBドキュメントの作成4)”に続く。

  1. 2012年01月13日 05:41 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門4(PCBドキュメントの作成2)

Altium Designer によるPCB設計入門3(PCBドキュメントの作成1)”の続き。

PCBのウィザードが終了したので、回路図ドキュメントから設計情報を転送する。

17.回路図ドキュメントMultivibrator.SchDoc を開く。
Altium_Designer_121_120111.png

18.デザインメニューからUpdate PCB Document Multvibrator.PcbDocを選択する。

19.ECOダイアログが起動する。変更の実行をクリックする。閉じるボタンをクリックして、ECOダイアログを終了する。
Altium_Designer_122_120111.png

20.部品とラッツネットがつながったPCBドキュメントが表示された。V, Dキーで全体を表示した。
Altium_Designer_123_120111.png

・現在は2Dモードだが、3Dモードに切り替えるには、表示メニューから3Dへ切り替えを選ぶ。3Dモードから2Dモードへは、表示メニューから2Dへ切り替えを選ぶ。下は3Dモードの時の表示。
Altium_Designer_124_120111.png

・配線幅とクリアランス、グリットを設定する。ここでは、すべての部品が100mil幅のパッドで、パッド間1本の配線なので、配線幅は12mil、最小クリアランス13mil、グリット間隔25milとする。

21.配線幅は前回見た。デザインメニューからデザインルールを選択して、Design Rules -> Routing -> Width -> WIdthだった。配線幅は12milだった。

22.クリアランスは同じく、デザインメニューからデザインルールを選択して、Design Rules -> Electrical -> Clearance -> Clearanceを選択する。最小クリアランスは13milだった。
Altium_Designer_125_120111.png

23.グリット間隔の設定を行う。デザインメニューからボードオブションを選択する。ボードオブション・ダイアログでグリッド...ボタンをクリックする。
Altium_Designer_126_120111.png

24.グリッド マネージャ・ダイアログが開く。最初の行をダブルクリックする。
Altium_Designer_127_120111.png

25.Cartesian Grid Editorダイアログが開く。ステップのステップXをプルダウンメニューから25milに変更した。すべてのダイアログをOKボタンをクリックして閉じる。
Altium_Designer_128_120111.png

27.ツールメニューからプリファレンスを選択する。

28.プリファレンス・ダイアログが開く。PCB Editorを展開して、Generalを見る編集オプションの中心にスナップにチェックが入っていることを確認する。
Altium_Designer_129_120111.png

29.次にDisplayをクリックする。DirectXを使用にチェックが入っていることを確認する。
Altium_Designer_130_120111.png

30.デザインメニューからレイヤと表示色を選択する。

31.ビュー設定・ダイアログで、いろいろなレイヤの配色をいじれる。
Altium_Designer_131_120111.png

PCBエディタのレイヤについて、”PCB設計入門”から引用する。

PCB エディタには、3 種類のレイヤがあります:
• エレクトリカルレイヤ - ここには 32 の信号層と 16 の内部プレーン層が含まれます。 エレクトリカルレイヤは、Layer Stack Manager ダイアログで、Design » Layer Stack Manager を選択すると、デザインからの追加と削除ができます。
• メカニカルレイヤ - 基板外形の定義や寸法線、組立て図の作成など、デザインの必要に応じて、汎用のレイヤとして 16 のメカニカルレイヤが用意されています。 これらのレイヤは、ガーバー出力生成時に含めることができます。 View Configurations ダイアログで、メカニカルレイヤの追加、削除、名前の設定を行うことができます。
• 特別レイヤ - ここにはトップ、ボトムのシルクスクリーンレイヤ、ソルダ及び、ペーストマスクレイヤ、ドリルレイヤ、キープアウトレイヤ(電気的な境界を定義するのに使用)、マルチレイヤ(マルチレイヤパッドやビアに使用)、コネクションレイヤ、DRC エラーレイヤ、グリッドレイヤ、ホールレイヤが含まれます。


32.デザインメニューからレイヤ構成マネージャを選択する。

33.レイヤ構成マネージャでレイヤやプレーンを、現在選択されているレイヤの下に追加できる。今回は2層基板とする。レジストトップとレジストボトムにチェックを入れた。
Altium_Designer_132_120111.png

・レイヤは配線を引くと銅箔になるが、プレーンはデフォルトで銅箔で、線を引くと銅箔が抜けるそうだ。
・デザインルールの設定。部品の配置や配線などのアクションをAltium Designerが常にチェックしていて、デザインルールに違反したらハイライトされるそうだ。

34.デザインメニューからデザインルールを選ぶ。

35.PCB ルールと制約条件編集・ダイアログが開く。一番上のDesign Rulesをクリックした。
Altium_Designer_133_120111.png

・12VとGNDネットについて、新しい配線幅のルールを追加する。

36.Design Rules -> Routing -> Width -> Widthを見る。左のWidthの所で右クリックしてルールを追加を選択する。
Altium_Designer_134_120111.png

37.名称を12V or GNDに変更した。クリエ ビルダボタン...をクリックする。
Altium_Designer_135_120111.png

38.Building Query from Boardダイアログが開く。条件タイプ/演算子でBelongs to Netを選択し、条件値で12Vを選択する。

39.Add another condition...をクリックして条件を追加する。

40.条件タイプ/演算子でBelongs to Netを選択し、条件値でGNDを選択する。

41.条件のANDをORに変更した。Building Query from Boardダイアログを閉じた。
Altium_Designer_136_120111.png

42.レイヤ属性の最小幅、優先サイズ、最大幅を25milに変更する。PCB ルールと制約条件編集・ダイアログを閉じる。
Altium_Designer_137_120111.png

・PCB ルールと制約条件編集・ダイアログには、ルール ウィザードもある。ウィザード形式でルールを作れるんだと思う。後でやってみたい。

これでデザインルールの設定はやっと終了。次からは部品の配置と配線にやっと行ける。

Altium Designer によるPCB設計入門5(PCBドキュメントの作成3)”に続く。

  1. 2012年01月12日 04:49 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門3(PCBドキュメントの作成1)

Altium Designer によるPCB設計入門2(回路図シートの作成2)”の続き。

今回の便利なショートカット(小文字でも大文字でもOK)
画面を基板外形にフィットする:V, Fキー
単位のmmとmilを切り替える:Qキー


今回は、PCBドキュメントを作成する。チュートリアルによるとウィザードを実行して設定をするようだ。

1.左のウインドウのFilesタブをクリックして、一番下の”テンプレートから新規作成”のPCB Board Wizard...をクリックする。
Altium_Designer_105_120110.png

2.PCBボード ウィザートが開く。次へ(N)>ボタンをクリックする。
Altium_Designer_106_120110.png

3.ボードの単位を決める。インチ系かメートル系。後で変更できるし、外形はmmで指定したいので、メートル系にする。
Altium_Designer_107_120110.png

4.ボードの形状はCustomを選択した。
Altium_Designer_108_120110.png

5.外形形状で矩形を選択し、ボードサイズでXサイズに50.0mm、Yサイズに50.0mmを指定する。タイトルブロックとスケール、レジェンド文字、寸法線にチェックを外します。
Altium_Designer_109_120110.png

6.信号層は2層のままにし、パワープレーん層は0層にセットする。つまり、両面基板。
Altium_Designer_110_120110.png

7.ボードで使用する配線ビアの種類を選ぶ。全層貫通ピアのみを選択する。
Altium_Designer_111_120111.png

8.コンポーネントと配線テクノロジを選択する。スルーホールコンポーネントとパッド間配線1本を選択する。
Altium_Designer_112_120111.png

9.デフォルトのトラック幅とビア径を選択する。これはデフォルトのままとする。
Altium_Designer_113_120111.png

10.ボードウィザードが終了する。終了ボタンをクリックする。
Altium_Designer_114_120111.png

11.PCBドキュメントが表示された。
Altium_Designer_115_120111.png

12.これには、デフォルトのサイズの白いシートが表示されている。これを消去する。
デザインメニューからボード オブションを選択する。ボード オブション・ダイアログが出る。シートポジションのシートの表示のチェックを外す。
Altium_Designer_116_120111.png

13.基板外形だけになった。
Altium_Designer_117_120111.png

14.V, Fキーで画面を基板外形にフィットさせます。

15.ファイルメニューから名前を付けて保存する。Multivibrator.PcbDocと名前を付けた。プロジェクトも保存した。
Altium_Designer_118_120111.png

追加:ここで、Mechanical 1 Layerに基板外形を書くべきです。詳しくは、”Altium Designer によるPCB設計入門8(PCBドキュメントの作成6)”を参照のこと)

16.単位をmilに切り替える。Qキーを押す。

・デザインメニューからデザインルールを選択して見てみよう。Design Rules -> Routing -> Width -> Widthを見る。まずはmm単位の時の線幅ルールを下に示す。
Altium_Designer_119_120111.png

同様にmil単位の時の線幅ルールを下に示す。
Altium_Designer_120_120111.png

適宜、Qキーでmmやmilに切り替えながら作業を行う。

Altium Designer によるPCB設計入門4(PCBドキュメントの作成2)”に続く。

  1. 2012年01月11日 04:34 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門2(回路図シートの作成2)

Altium Designer によるPCB設計入門1(回路図シートの作成1)”の続き。

前回は回路図にシンボルを置いていったので、今回はその間を配線する。

配線するのに便利なショートカット及びマウス操作
・ズームイン: Page UPキー, CTRL+マウスホイール上方向回し
・ズームアウト:Page Downキー, CTRL+マウスホイール下方向回し
・すべての部品が表示されるようにズーム:Z, Aキー
・回路図シート全体をズーム:Z, Sキー
・部品の配線を維持しながら移動する:CTRL+左クリックを押しながらドラック


20.線を引くために、配置メニューからワイヤを選択する。(ショートカットはP, Wキー

21.カーソルが十字になってワイヤを引くモードになる。端点をクリックしながら線を接続していく。端点に吸い付くとカーソルに斜めに赤の×印がでる。そこでクリックすると端点に配線することが出来る。終点ではESC
Altium_Designer_96_120109.png

・配線の交点のジャンクションはだいたいは自動でつけてくれるが、配線の交点でジャンクションが付かなかった場合は配置メニューからマニュアルジャンクションを選択して、ジャンクションを自分で置いていく。
・ワイヤモード(十字カーソル状態)を解除するにはESCキーを押す。
・部品がどこかに行ってしまったらZ, Aキーで部品全体を表示させる。
SHIFT+スペースキーで配線モードを切り替えることが出来る。縦横配線モード、斜め配線モード...、下の図は斜め配線モードにした例だ。
Altium_Designer_97_120110.png

・部品をクリックしながらドラックすると配線が切れた状態で移動する。
Altium_Designer_138_120111.png

・部品の配線を維持しながら移動する場合はをCTRL+左クリックを押しながらドラックする。
Altium_Designer_139_120111.png


22.今度は配線のネットにラベルを付ける。配置メニューからネットラベル(P, Nキー)を選択する。

23.TABキーを押す。ネットラベル・ダイアログが開く。プロバティのネットを変更したいネット名に変更する。今回は12Vと変更した。
Altium_Designer_98_120110.png

24.12Vというネット名にしたい配線に持っていて、赤い×印が出たら、そこでクリックすると、その配線が12Vという名前のネットに変更される。
Altium_Designer_99_120110.png

25.同様にGNDもネット名を指定した。これで回路図は完成。回路図シートを保存しておく。
Altium_Designer_100_120110.png

26.プロジェクトメニューから一番下のプロジェクト オプションを選択する。Options for PCB Project Multivibrator.PrjPcbが開く。

Error Reportingタブでは違反タイプに対して、どのようなレベルのレポートをするのかを決定する。
Altium_Designer_101_120110.png

Connection Matrixタブではどのピンやポートが接続されたピンやポートの属性により、どんなレポートをするのかを設定できる。これは横を見ると良いのだと思う。例えば3行目のOutput Pinは縦のOutput Pinと接続された時はErrorとなる。これは出力ピン同士が接続されると出力がぶつかるので当然と言える。
Altium_Designer_102_120110.png

Comparatorタブは、プロジェクトのコンパイル時に、ファイル間のどの相違をレポートし、あるいは無視するかを設定するそうだ。
Altium_Designer_103_120110.png

・プロジェクトをコンパイルする。回路図のエラー(配線が切れている)や電気的なエラー(出力同士が接続されている)を検出することが出来る。

27.プロジェクトメニューからCompile PCB Project Multivibrator.PrjPCB を選択する。

28.MessageウインドウにComplie successful, no errors found.が表示された。
Altium_Designer_104_120110.png

これで回路図シート編終了。
次はPCBドキュメント。

Altium Designer によるPCB設計入門3(PCBドキュメントの作成1)”に続く。

  1. 2012年01月10日 05:34 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

Altium Designer によるPCB設計入門1(回路図シートの作成1)

昨日、FPGA-CAFEでAltium DesignerのPCB設計に関するセミナーを受けてきた。Altium Designer Wiki @fpgacafeのページ。
その様子を書こうと思っていたが、公式チュートリアルの”Tutorial - Getting Started with PCB Design”、日本語の旧バージョンの『PCB設計入門 (Summer 08版) 』がよく出来ていると思うので、これでやってみたことを書きながら、習ってきたことを補足したいと思う。なお、”PCB設計入門”のPDF版はこちら。PDF版のほうが図が見やすい。
Altium Designerのショートカット・キー割り当てはここにある

1.ファイルメニュー -> 新規 -> プロジェクト -> PCBプロジェクトを選択する。
Altium_Designer_78_120108.png

2.PCB_Project1.PrjPCBができた。プロジェクトをセーブしておく。MyProjectフォルダを新規作成して、その中にExamplePCBホルダを作り、Multivibrator.PrjPCB としてセーブする。ファイルメニューからプロジェクトに名前を付けて保存を選択する。
Altium_Designer_79_120108.png

3.左のウインドウのProjectタブのMultivibrator.PrjPCBを右クリック後、右クリックメニューから新規ドキュメントをプロジェクトに追加 -> Schematic を選択する。
Altium_Designer_80_120109.png

4.回路図シートが生成された。Sheet1.SchDocを右クリック後、右クリックメニューから名前を付けて保存を選択する。Multivibrator.SchDocと名前を付けて保存する。(Shortcut: Z, Sを入力すると回路図シートが画面に会うように表示される)
Altium_Designer_81_120109.png

5.Multivibrator.PrjPCBプロジェクトファイルも保存しておく。

・デザインメニューからドキュメントオプションを選択すると、ドキュメントオプション・ダイアログが開いて用紙の設定などを設定できる。デフォルトではA4となる。カスタムスタイルでカスタムスタイル使用にチェックを入れると、自由な大きさの用紙に設定できる。
Altium_Designer_82_120109.png

・これで回路図を作成する準備ができた。ここでは、チュートリアルのマルチバイブレータの回路図を作成する。マルチバイブレータの回路図を下に貼っておく。
Altium_Designer_100_120110.png

6.ウインドウの右はじのライブラリタブをクリックすると、ライブラリパネルが表示される。2N3904を選択する。PCBモデルは最初表示されていなかったが、モデル名の下のペインをクリックして、”トンカチと釘”のアイコンをクリックし、3Dのチェックを外したら、PCBシンボルが表示された。(Miscellaneous Devices.IntLib)
Altium_Designer_83_120109.png

7.Place 2N3904ボタンをクリックする。そうすると2N3904のシンボルが出てくるので、回路図シートの適当な位置にクリックして配置する。Xキーを押すと左右が反転するので、もう1個配置する。(Yキーを押すと上下反転。スペースキーを押すと反時計回りに90度ずつ回転する)
Altium_Designer_84_120109.png

・この状態でTABキーを押すと、Properties for Schmatic Component in Sheetダイアログが開く。ここでいろいろな設定ができるようだ。
Altium_Designer_85_120109.png

次に抵抗を置いていく。

8.ライブラリタブをクリックする。Miscellaneous Devices.IntLibが指定されていることを確認して、キーワードに*res1を指定する。
Place Res1ボタンをクリックして、抵抗シンボルをつかみ、回路図に持っていく。
Altium_Designer_86_120109.png

9.抵抗値を決定するためにTABキーを押す。Properties for Schmatic Component in Sheetダイアログが開く。ここで、Orientaionを90Degreesに変更し、PametersのValueを100Kに変更して、クリックし回路図に配置する。再度、抵抗シンボルをつかんでいるが、ESCボタンを押すと状態がクリアされる。
Altium_Designer_87_120109.png

10.抵抗をCTRL+Cキーでコピーし、CTRL+Vキーでペーストする。3つペーストして、その内の内側の2つを1Kに変更する。値を変更するために、100Kの文字列をクリックすると編集することができる。Z, Aキーで今の回路図シンボル全体をズームした。
Altium_Designer_89_120109.png

11.ライブラリタブをクリックする。Miscellaneous Devices.IntLibが指定されていることを確認して、キーワードに*CAPを入力するとCapが表示される。Place Capボタンをクリックして、コンデンサ・シンボルをつかみ、回路図に2つ配置する。

12.値をクリックして、100pFから20nFに変更した。
Altium_Designer_90_120109.png

13.ライブラリタブをクリックする。Miscellaneous Connectors.IntLibを選択して、キーワードに*2*を入れる。
Altium_Designer_91_120109.png

14.Place Header2ボタンをクリックしてヘッダ・シンボルをつかみ、Xキーで反転して回路図上に1つ配置した。
Altium_Designer_92_120109.png

・部品番号を振る。

15.ツールメニューからアノテーションを選択する。

16.アノテーション・ダイアログが開く。デジグネータインデックス コントロールにチェックを入れ、変更を更新ボタンをクリックすると、変更案が示される。変更を承認(ECO生成)ボタンをクリックする。(左上の処理順序で番号の振り方を変えることが出来る)
Altium_Designer_93_120109.png

17.Informationダイアログが出るのでOKボタンをクリックする。

18.ECOダイアログが開く。部品番号が振られたのがわかる。変更の実行ボタンをクリックする。
Altium_Designer_94_120109.png

19.ECOダイアログとアノテーション・ダイアログを閉じるボタンで閉じると、回路図の部品に部品番号が振られているのがわかる。
Altium_Designer_95_120109.png

Altium Designer によるPCB設計入門2(回路図シートの作成2)”に続く。
  1. 2012年01月09日 13:10 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0

friends もののけ島のナキ(映画)を見てきました

今日は、”friends もののけ島のナキ”を見てきました。
日本のCG映画はどのくらいか見たかったからです。物語は最初、モンスターズ・インクぽいかな?と思いましたが、見終わった感想は、CG版日本昔ばなし。鬼が主役だったからでしょうか?
後ろの背景が風になびいてたりしていないのが気になりました。ジブリ作品見ているせいでしょうか?物理計算が大変なのかな?
物理計算はしないで、カメラの背景のゆらぎを取得してポリゴンを動かしたら?どうかな?とか思っちゃいました。ブログねたになりますかね?
  1. 2012年01月07日 22:10 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ar37425のAXI4 Masterサンプルを試す4(シミュレーション)

ar37425のAXI4 Masterサンプルを試す3(SDK)”の続き。

今回はシミュレーションを行う。
シミュレーション方法は”EDKのシミュレーション”とほぼ同じ、この記事を参照しながら行う。

1.axi_timer_test.elfをプロジェクトに追加した。

2.Project Navigatorをシミュレーションモードに変更した。

3.テストベンチsystem_top_tb.v を新規作成した。
Atlys_51_120107.png

下にsystem_top_tb.v を示す。

`timescale 100ps / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   05:18:27 01/07/2012
// Design Name:   system_top
// Module Name:   H:/HDL/FndtnISEWork/Spartan6/Atlys/test/Atlys_XPS_CamDisp/ISE/Atlys_XPS_CamDisp/system_top_tb.v
// Project Name:  Atlys_XPS_CamDisp
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: system_top
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module system_top_tb;

    // Inputs
    reg RS232_Uart_1_sin;
    reg RESET;
    reg [0:4] Push_Buttons_5Bits_TRI_I;
    reg GCLK;
    reg Ethernet_Lite_TX_CLK;
    reg Ethernet_Lite_RX_ER;
    reg Ethernet_Lite_RX_DV;
    reg Ethernet_Lite_RX_CLK;
    reg [3:0] Ethernet_Lite_RXD;
    reg Ethernet_Lite_CRS;
    reg Ethernet_Lite_COL;
    reg [7:0] DIP_Switches_8Bits_TRI_I;

    // Outputs
    wire mcbx_dram_we_n;
    wire mcbx_dram_udm;
    wire mcbx_dram_ras_n;
    wire mcbx_dram_odt;
    wire mcbx_dram_ldm;
    wire mcbx_dram_clk_n;
    wire mcbx_dram_clk;
    wire mcbx_dram_cke;
    wire mcbx_dram_cas_n;
    wire [2:0] mcbx_dram_ba;
    wire [12:0] mcbx_dram_addr;
    wire RS232_Uart_1_sout;
    wire [7:0] LEDs_8Bits_TRI_O;
    wire Ethernet_Lite_TX_EN;
    wire [3:0] Ethernet_Lite_TXD;
    wire Ethernet_Lite_PHY_RST_N;
    wire Ethernet_Lite_MDC;
    wire axi_master_0_ERROR;

    // Bidirs
    wire zio;
    wire rzq;
    wire mcbx_dram_udqs_n;
    wire mcbx_dram_udqs;
    wire mcbx_dram_dqs_n;
    wire mcbx_dram_dqs;
    wire [15:0] mcbx_dram_dq;
    wire Ethernet_Lite_MDIO;

    // Instantiate the Unit Under Test (UUT)
    system_top uut (
        .zio(zio), 
        .rzq(rzq), 
        .mcbx_dram_we_n(mcbx_dram_we_n), 
        .mcbx_dram_udqs_n(mcbx_dram_udqs_n), 
        .mcbx_dram_udqs(mcbx_dram_udqs), 
        .mcbx_dram_udm(mcbx_dram_udm), 
        .mcbx_dram_ras_n(mcbx_dram_ras_n), 
        .mcbx_dram_odt(mcbx_dram_odt), 
        .mcbx_dram_ldm(mcbx_dram_ldm), 
        .mcbx_dram_dqs_n(mcbx_dram_dqs_n), 
        .mcbx_dram_dqs(mcbx_dram_dqs), 
        .mcbx_dram_dq(mcbx_dram_dq), 
        .mcbx_dram_clk_n(mcbx_dram_clk_n), 
        .mcbx_dram_clk(mcbx_dram_clk), 
        .mcbx_dram_cke(mcbx_dram_cke), 
        .mcbx_dram_cas_n(mcbx_dram_cas_n), 
        .mcbx_dram_ba(mcbx_dram_ba), 
        .mcbx_dram_addr(mcbx_dram_addr), 
        .RS232_Uart_1_sout(RS232_Uart_1_sout), 
        .RS232_Uart_1_sin(RS232_Uart_1_sin), 
        .RESET(RESET), 
        .Push_Buttons_5Bits_TRI_I(Push_Buttons_5Bits_TRI_I), 
        .LEDs_8Bits_TRI_O(LEDs_8Bits_TRI_O), 
        .GCLK(GCLK), 
        .Ethernet_Lite_TX_EN(Ethernet_Lite_TX_EN), 
        .Ethernet_Lite_TX_CLK(Ethernet_Lite_TX_CLK), 
        .Ethernet_Lite_TXD(Ethernet_Lite_TXD), 
        .Ethernet_Lite_RX_ER(Ethernet_Lite_RX_ER), 
        .Ethernet_Lite_RX_DV(Ethernet_Lite_RX_DV), 
        .Ethernet_Lite_RX_CLK(Ethernet_Lite_RX_CLK), 
        .Ethernet_Lite_RXD(Ethernet_Lite_RXD), 
        .Ethernet_Lite_PHY_RST_N(Ethernet_Lite_PHY_RST_N), 
        .Ethernet_Lite_MDIO(Ethernet_Lite_MDIO), 
        .Ethernet_Lite_MDC(Ethernet_Lite_MDC), 
        .Ethernet_Lite_CRS(Ethernet_Lite_CRS), 
        .Ethernet_Lite_COL(Ethernet_Lite_COL), 
        .DIP_Switches_8Bits_TRI_I(DIP_Switches_8Bits_TRI_I), 
        .axi_master_0_ERROR(axi_master_0_ERROR)
    );

    parameter PERIOD = 100; // 100MHz clock
    parameter real DUTY_CYCLE = 0.5;
    parameter OFFSET = 0;
    
    initial    // Clock process for clk
    begin
        GCLK = 1'b0;
        #OFFSET;
        forever begin
            GCLK = 1'b0;
            #(PERIOD-(PERIOD*DUTY_CYCLE)) GCLK = 1'b1;
            #(PERIOD*DUTY_CYCLE);
        end
    end

    initial begin
        // Initialize Inputs
        RS232_Uart_1_sin = 0;
        RESET = 1'b0;
        Push_Buttons_5Bits_TRI_I = 0;
        Ethernet_Lite_TX_CLK = 0;
        Ethernet_Lite_RX_ER = 0;
        Ethernet_Lite_RX_DV = 0;
        Ethernet_Lite_RX_CLK = 0;
        Ethernet_Lite_RXD = 0;
        Ethernet_Lite_CRS = 0;
        Ethernet_Lite_COL = 0;
        DIP_Switches_8Bits_TRI_I = 0;

        // Wait 100 ns for global reset to finish
        #1000;
        
        // Add stimulus here
        #500;
        RESET = 1'b1;
    end
      
endmodule



4.Simulate Behavioral Modelをダブルクリックすると、コンパイルし始めたが、下のエラーが発生して終了してしまった。

ERROR:Simulator:754 - Signal EXCEPTION_ACCESS_VIOLATION received
ERROR:Simulator:754 - Signal EXCEPTION_ACCESS_VIOLATION receivedPrinting stacktrace...


検索した所、”Spartan-6 FPGA コネクティビティ キット TRD - Windows で ISim を実行すると「ERROR:Simulator:754 - Signal EXCEPTION_ACCESS_VIOLATION received」というエラー メッセージが表示される”がヒットした。

これは、32ビットWindows XPでは無理ということか?いよいよ64ビットWindows 7にする必要があるかな?

他のアプリをすべて落としたらコンパイルできました。
DDR2 SDRAMのモデルを接続するのを忘れていました。ブログを後で書きなおします。
  1. 2012年01月07日 05:52 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

ar37425のAXI4 Masterサンプルを試す3(SDK)

ar37425のAXI4 Masterサンプルを試す2(インプリメント)”の続き。

ISEの下にXPSプロジェクトが入った状態で、SDKを立ち上げ、”AtlysボードでXPSプロジェクトを試す2(ソフトウェアを試す)”で作ったLED+1ソフトウェアを起動してみる。

1.Project Navigator上のHierarchyでSystem_i(XPSプロジェクト)を選択した状態で、下のProcessesウインドウからExport Hardware Design to SDK with BitStream をダブルクリックする。
Atlys_48_120107.png

2.Workspace Launcherが起動する。WorkspaceをBrowse...ボタンで、test\Atlys_XPS_CamDisp\SDK\SDK_Exportに設定して、OKボタンをクリックする。
Atlys_49_120107.png

3.SDKが立ち上がり、axi_timer_testプロジェクトをコンパイルして成功した。
Atlys_50_120107.png

4.Program FPGAダイアログでSoftware Configuratioで、ElF File to Initialize in Block RAMで、axi_timer_test.elfを選択した。Programボタンを押して、Atlysボードにソフトウェア入りのビットファイルをダウンロードすると動作した。

これでaxi_timer_test.elf は変更したハードウェア環境(といってもソフトウェアが動作するデバイスの環境は何も変えていないけど。。。)で動作した。
  1. 2012年01月07日 04:41 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

ar37425のAXI4 Masterサンプルを試す2(インプリメント)

ar37425のAXI4 Masterサンプルを試す1(AXI_Master IPの登録、接続)”の続き。

今回は最初にインプリメントしてみようと思う。

1.XPSで、左のGenerate BitStreamボタンをクリックして、ビットファイルを生成した。

2.MAPで”MapLib:979 - LUT5 symbol”などのエラーで止まってしまった。UARTやEthernetデバイスでエラーが出ている。そこは何もいじっていないはずなのだが?調べてみたがよくわからない?

ISEの下にXPSプロジェクトを入れてやってみることにした。

3.ISEプロジェクトを生成して、Project NavigatorからAtlys_XPS_CamDispのsystem.xmpをAdd Sourceした。

4.ProcessesウインドウのGenerate Top HDL Sourceをダブルクリックして、トップファイル(system_top.v)を生成した。

5.system_top.vをクリックして、インプリメントしたら成功した。
Atlys_47_120107.png

MAPリポートを下に貼り付ける。

Release 13.3 Map O.76xd (nt)
Xilinx Mapping Report File for Design 'system_top'

Design Information
------------------
Command Line   : map -intstyle ise -p xc6slx45-csg324-2 -w -logic_opt off -ol
high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off
-pr off -lc off -power off -o system_top_map.ncd system_top.ngd system_top.pcf 
Target Device  : xc6slx45
Target Package : csg324
Target Speed   : -2
Mapper Version : spartan6 -- $Revision: 1.55 $
Mapped Date    : FRI 6 JAN 6:11:18 2012

Design Summary
--------------
Number of errors:      0
Number of warnings:   28
Slice Logic Utilization:
  Number of Slice Registers:                 3,894 out of  54,576    7%
    Number used as Flip Flops:               3,885
    Number used as Latches:                      0
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:                9
  Number of Slice LUTs:                      4,982 out of  27,288   18%
    Number used as logic:                    4,588 out of  27,288   16%
      Number using O6 output only:           3,549
      Number using O5 output only:             138
      Number using O5 and O6:                  901
      Number used as ROM:                        0
    Number used as Memory:                     253 out of   6,408    3%
      Number used as Dual Port RAM:             96
        Number using O6 output only:             4
        Number using O5 output only:             1
        Number using O5 and O6:                 91
      Number used as Single Port RAM:            4
        Number using O6 output only:             4
        Number using O5 output only:             0
        Number using O5 and O6:                  0
      Number used as Shift Register:           153
        Number using O6 output only:            53
        Number using O5 output only:             1
        Number using O5 and O6:                 99
    Number used exclusively as route-thrus:    141
      Number with same-slice register load:    121
      Number with same-slice carry load:        15
      Number with other load:                    5

Slice Logic Distribution:
  Number of occupied Slices:                 1,931 out of   6,822   28%
  Nummber of MUXCYs used:                      728 out of  13,644    5%
  Number of LUT Flip Flop pairs used:        5,714
    Number with an unused Flip Flop:         2,197 out of   5,714   38%
    Number with an unused LUT:                 732 out of   5,714   12%
    Number of fully used LUT-FF pairs:       2,785 out of   5,714   48%
    Number of unique control sets:             336
    Number of slice register sites lost
      to control set restrictions:           1,352 out of  54,576    2%

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

IO Utilization:
  Number of bonded IOBs:                        90 out of     218   41%
    Number of LOCed IOBs:                       90 out of      90  100%
    IOB Flip Flops:                             11

Specific Feature Utilization:
  Number of RAMB16BWERs:                        20 out of     116   17%
  Number of RAMB8BWERs:                          0 out of     232    0%
  Number of BUFIO2/BUFIO2_2CLKs:                 1 out of      32    3%
    Number used as BUFIO2s:                      1
    Number used as BUFIO2_2CLKs:                 0
  Number of BUFIO2FB/BUFIO2FB_2CLKs:             0 out of      32    0%
  Number of BUFG/BUFGMUXs:                       2 out of      16   12%
    Number used as BUFGs:                        2
    Number used as BUFGMUX:                      0
  Number of DCM/DCM_CLKGENs:                     0 out of       8    0%
  Number of ILOGIC2/ISERDES2s:                   6 out of     376    1%
    Number used as ILOGIC2s:                     6
    Number used as ISERDES2s:                    0
  Number of IODELAY2/IODRP2/IODRP2_MCBs:        24 out of     376    6%
    Number used as IODELAY2s:                    0
    Number used as IODRP2s:                      2
    Number used as IODRP2_MCBs:                 22
  Number of OLOGIC2/OSERDES2s:                  50 out of     376   13%
    Number used as OLOGIC2s:                     5
    Number used as OSERDES2s:                   45
  Number of BSCANs:                              1 out of       4   25%
  Number of BUFHs:                               0 out of     256    0%
  Number of BUFPLLs:                             0 out of       8    0%
  Number of BUFPLL_MCBs:                         1 out of       4   25%
  Number of DSP48A1s:                            3 out of      58    5%
  Number of ICAPs:                               0 out of       1    0%
  Number of MCBs:                                1 out of       2   50%
  Number of PCILOGICSEs:                         0 out of       2    0%
  Number of PLL_ADVs:                            1 out of       4   25%
  Number of PMVs:                                0 out of       1    0%
  Number of STARTUPs:                            0 out of       1    0%
  Number of SUSPEND_SYNCs:                       0 out of       1    0%

Average Fanout of Non-Clock Nets:                3.97

Peak Memory Usage:  397 MB
Total REAL time to MAP completion:  6 mins 32 secs 
Total CPU time to MAP completion:   6 mins 28 secs 

  1. 2012年01月07日 04:19 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

ar37425のAXI4 Masterサンプルを試す1(AXI_Master IPの登録、接続)

AXI4バスのマスタIPのテスト1(構想編)”の続き。

ar37425\axi_master_v1_00_a\hdl\verilog\axi_master.vのサンプルコードを”AtlysボードでXPSプロジェクトを試す1(XPSのプロジェクト作成、インプリメント)”のXPSプロジェクトに接続してみようと思う。

1.ar37425.zipをダウンロードして、Atlys_XPS_CamDisp\pcoresの下に全てコピーした。(12.3 EDK、12.3 ISE - カスタム AXI IP コアの作成方法を参照した)
Atlys_29_120104.png

2.ProjectメニューからRescan User Repositoriesを選択した。

3.IP CatalogウインドウのProject Local PCores -> USERにAXIのIPが追加された。
Atlys_30_120104.png

3B.Addressタブの情報を下に示す。
Atlys_37_120104.png

4.AXI Masterで右クリックメニューからAdd IPを選択した。

5.XPS Core Config - axi_master_0 ダイアログが立ち上がる。User, System, Interconnect Setting for BUSIFの各タブの情報を下に示す。UserタブのC_M_AXT_TARGETのみを0xD0000000に変更した。
Atlys_31_120104.png

Atlys_32_120104.png

Atlys_33_120104.png

6.Instantiate and Connect IPダイアログでは、MjcroBlazeにつなぎたくないので、Usre will make necessary connections and settings のラジオボタンをクリックした。
Atlys_34_120104.png

7.axi_master_0が入って、No Connectionになった。
Atlys_35_120104.png

8.Bus InterfaceタブでMCB_DDR2をダブルクリックする。

9.Xilinx Memory Interface Generatorダイアログが開く。Next->ボタンをクリックして行って、Multi-port Configurationにする。Port1にチェックを入れた。
Atlys_36_120104.png

10.FPGA OptionsでFinishボタンをクリックした。

11.MCB_DDR2にS1_AXIポートが追加された。
Atlys_38_120104.png

12.axi_master_0のM_AXIのNo Connectionをクリックして、プルダウンメニューからaxi4_0を選択した。
Atlys_39_120105.png

13.MCB_DDR2のS1_AXIポートのNo Connectionをクリックすると、MCB_DDR2.S1_AXI Connection Dialogが出る。Select AXI Interconnectでaxi4_0を選択し、Select Master(s)でaxi_master_0.M_AXIを選択した。
Atlys_40_120105.png

14.これで、MCB_DDR2のS1_AXIポートとaxi_master_0のM_AXIポートがaxi4_0(axi_interconnect)経由で接続された。
Atlys_41_120105.png

axi_masterやMCB_DDR2のclkポートなどを接続するのを忘れていたので、接続する。

15.MCB_DDR2のS1_AXIのs1_axi_aclkとaxi_master_0のACLKをclk_100_0000MHzPLL0に接続する必要があるが、GUIではできないようだ?
Atlys_42_120105.png

16.system.mhsに記述を追加することにする。”BEGIN axi_s6_ddrx”の中に”PORT s1_axi_aclk = clk_100_0000MHzPLL0”を追加した。”BEGIN axi_master”の中に”PORT ACLK = clk_100_0000MHzPLL0”を追加した。

17.system.mhsをセーブして、ProjectメニューからRescan User Repositoriesを選択した。

18.MCB_DDR2のS1_AXIのs1_axi_aclkとaxi_master_0のACLKがclk_100_0000MHzPLL0に接続された。
Atlys_43_120105.png

19.Portsタブで、axi_master_0のERRORのConnected Porsをクリックする。External Portsを選択して、右側にaxi_master_0_ERROR_pinと入るので、_pinを削除した。これでリターンキーを押した。
Atlys_44_120105.png

20.External Portsにリストされた。
Atlys_45_120105.png

21.axi_master_0_ERRORの出力ピンを設定する。UCFファイルを開く。

NET axi_master_0_ERROR LOC = "T3" | IOSTANDARD = "LVCMOS33";


を追加した。

22.MCB_DDR2のS1_AXIポートのアドレスを設定する。system.mhsの”BEGIN axi_s6_ddrx”の中に

PARAMETER C_S1_AXI_BASEADDR = 0xD0000000
PARAMETER C_S1_AXI_HIGHADDR = 0xD7FFFFFF


を追加した。

23.system.mhsをセーブして、ProjectメニューからRescan User Repositoriesを選択した。

24.MCB_DDR2のC_S1_AXI_BASEADDRが0xD0000000に設定された。
Atlys_46_120104.png
  1. 2012年01月05日 04:45 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

映画『源氏物語 千年の謎』を見てきました

今日は休暇を取って、奥さんと映画『源氏物語 千年の謎』を見てきました。今年はじめての映画です。
時代劇は良くてきましたが、平安時代の映画を見るのは初めてです。映画が衣擦れの音が印象的でした。十二単の衣擦れの音をわざと入れている気がしました。実際に平安時代の音を聞いている気がしました。平安時代の朝廷の浮気を描いた映画のようです。コンピュータ・グラフィクスも使ってあって、なかなか楽しめました。
  1. 2012年01月04日 21:55 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

AXI4バスのマスタIPのテスト1(構想編)

XilinxのXPS上にAXI4バスのマスタIPを作ることにした。手順は以下の通りだ。

・”AtlysボードでXPSプロジェクトを試す1(XPSのプロジェクト作成、インプリメント)”で作成したXPSのプロジェクトで、MCB_DDR2にAXI4バスのポートを2つ増やす。
・2つのポートのうちの1つはWrite専用、もう1つはRead専用だ。
・Writeポートには0からインクリメントするデータをVGAのスピードで書き込む回路を付ける。アドレスの0は32ビット長の0で、インクリメントしていく。つまりアドレス値とデータの値を一緒にする。それを640X480/2のアドレスまで行い、その後はアドレス0に戻って同じ値を書く。これを16ビットデータ換算60fpsで、ずーとやり続ける。
・Readポートには、Writeしたデータが正しいかどうかをチェックする機能を付ける。同様に16ビットデータ換算60fpsで、ずーとやり続ける。
・Writeしたデータが正しいかどうかは、SDKのXMDでReadして見ることが出来る。


最終目標はMT9D112からのピクセルデータをWriteポートからMCB_DDR2に書いて、それをReadポートからディスプレイ回路が読んでHDMIに変換してディスプレイに出力するのだが、今回はAXI4バスのマスタプロトコル回路だけを設計して確かめることを目標とする。一度に不確定要素が2つになるとデバックが厳しくなるからだ。

AXI4バスプロトコルは、”AXI4 プロトコルの勉強1”、”AXI4 プロトコルの勉強2(読み出しバースト例)”、”AXI4 プロトコルの勉強3(書きこみバースト例)”を参照のこと。

作ろうとするAXI4バスプロトコル・モジュールのユーザー・インターフェース側はVirtex-5のMIGの入力インターフェースと同じプロトコルにしようと思う。”XUPV5-LX110T Development SystemでMIGを試す4(Virtex-5のMIGの動作)”参照。

AXI4マスタIPのテンプレートは、http://www.xilinx.com/txpatches/pub/applications/misc/ar37425.zipからダウンロードすることが出来る。

今見た所、ar37425\axi_master_v1_00_a\hdl\vhdl\axi_master.vhdはテンプレートのみだったが、ar37425\axi_master_v1_00_a\hdl\verilog\axi_master.vはサンプルコードが書いてある。

The example user application performs a simple memory
test through continuous burst writes to memory, followed by burst
reads. The simple data pattern is checked and any data comparison or
interface errors are latched with the example ERROR output.


ということなので、とりあえず自分で作らないで、このExample codeをMCB_DDR2に接続して試してみることにする。
  1. 2012年01月03日 06:08 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0
»