VME Embedded System ユーザーズマニュアル ~ Full VME Embedded ~ Tecstar Page: 1
Agenda 1. VME Embedded System 概要 2. VME Embedded の特徴 3. Embedded Overview 4. VMEファイルとHEXファイルについて 5. Deployment Toolの起動方法について 6. VME Embedded 用意されているファイル 7. JTAG Full VME Embedded 8. ispvmeソースファイルについて 9. ispvme_epromソースファイルについて 10. VME Embedded ユーザーフロー 11. CPUへのマッピング結果 12. Diamond Ver3.1 Support Device 13. Revision Page: 2
1. VME Embedded System 概要 VME Embedded System とは? Embedded VME ( 以下 VME) とは 組み込みシステム向けの ISP プログラムで Lattice 社の ispvm System の機能を C プログラムで構成したものであり お客様が 開発される機器に組み込む ( 実機上のメモリに書き込む ) ことで PC からではなく 実機上の CPU から直接デバイスへの書き込みやリード等を行うことができます CPU GPIO GPIO GPIO GPIO TMS TDI TCK TDO Page: 3
2. VME Embedded の特徴 ispvme には以下の特徴があります C 言語にて提供されています お客様独自の ISP 書き込みエンジンに実装することができます CPU に実装することで CPU ポートから直接 JTAG を介して ISP を実行できます SVF ファイル対応により Lattice 社以外のデバイスにも ISP の実行が可能です 複数 JTAG チェイン構成の ISP にも対応しています IEEE1532 プログラミングプロトコルに対応しています IEEE1532 とは IEEE1149.1(BSCAN テストのための規格で JTAG について定義 ) に よって規定されている中で デバイスへのプログラミングを行う部分を規格化したものです IEEE1532 を使用することで デバイスプログラムの標準化が実現します ispvme ソースは ispvm System を以下 2 種類用意しております 1. JTAG Full VME Embedded JTAG portを用いたフル機能のシステムです 2. JTAG Slim VME Embedded 8051プロセッサの様にリソースの少ないマイクロコントローラ向けに機能を限定したシステムです 本資料では JTAG Full VME Embedded についての内容となります Page: 4
3. Embedded Overview VME Embedded System には 以下 3 つの構成となっております 1. Diamond Programmerを使用してANSI C source codeを用意致します ユーザーはこのANSI C source codeを自分のシステムにコンパイルすることが可能です 2. ご使用のFPGAのプログラムアルゴリズムを含めたAlgorithm VME Fileを用意致します Deployment Toolを使用してこのVME FileまたはHex Fileは生成可能です 3. FPGAの中にプログラムされるData VME FileまたはHex Fileを用意致します Deployment Toolを使用してこのVME FileまたはHex Fileを生成可能です Page: 5
4. VME ファイルと HEX ファイルについて Diamond Programmer ではデバイスに書き込むファイルとして JEDEC ファイルや Bit Stream ファイルを用意しましたが VME Embedded では VME ファイルを生成する必要があります VMEファイルとは? VMEファイルは圧縮されたSVFファイルで バイナリで記述されています JEDECファイルやBit Streamファイルの情報 JTAGチェイン情報 オペレーション (Erase/Program/Read/Verify) の内容を全て合わせ持っています Development Tool 上で生成します HEXファイルについて VMEファイルの内容をそのまま実機上のメモリに書き込むことはできないため HEXファイルに変換する必要があります VMEファイルはバイナリデータですが HEXファイルはヘキサデータです Development Tool 上でVMEファイルから変換します Page: 6
5. Deployment Tool の起動方法について Deployment Tool の起動方法は以下 2 つあります 1Diamond Programmerより Design > Utilities > Deployment Tool 起動 2 Windows スタートメニュー > Lattice Diamond X.X> Accessories Deployment Tool 起動 Page: 7
6. VME Embedded 用意されているファイル 例 : C: lscc diamond 3.1 embedded_source vmembedded sourcecode Development Tool において変換するソフトです Embedded VME には直接関係はございません Name JTAG Full VME Embedded Folder Name Algorithm and Data File Storage Location Files on OS ex Windows Files embedded in the C Code VmEmbedded x x (Default) Files in External Memory (Default is a EPROM) x (modify ivm_eprom.c Getbyte function for memory type) System Files Hardware Processor VM Engine Deployment Tool Files hardware.c ivm_core.c *.vme Page: 8
7. JTAG Full VME Embedded Algorithm と Data ファイルのために 3 つのオペレーションモードがあります 1. File Mode DOS Flash や Hard Drive の様ファイルの中にデータを保存しておく方法です 2. Static Linking Mode Deployment Toolを使用してBitstream ファイルをHard Driveのファイルから C source codeの中へ変換して使用する方法です 3. External Mode ( EPROM フォルダ ) Bitstream ファイルをHard DraiveからIntel HEX fileに変換して使用する方法です GetByte 関数を持っているCPUであれば使用可能です Page: 9
8. ispvme ソースファイルについて ispvme ファイルは CPU 内蔵の Flash 領域にプログラムファイルを格納する場合に使用します [ 格納場所 ] 例 : C: lscc diamond 3.1 embedded_source vmembedded sourcecode ispvme 各ソースファイルの内容は次の通りです hardware.c ハードウェア制御モジュール ( ユーザー側で唯一カスタマイズが必要なソースです ) 以下は カスタマイズする必要の無いソースです ispvm_ui.c 入出力の方向の定義ファイル vmopcode.h オペレーションコード定義ヘッダ (VME アルゴリズムフォーマットやプログラムエンジンに使用する Byte Code) ivm_core.c JTAG コマンドコアモジュール Page: 10
9. ispvme_eprom ソースファイルについて ispvme_eprom ファイルは CPU の外付け EEPROM にプログラムファイルを格納する場合に使用します [ 格納場所 ] 例 : C: lscc diamond 3.1 embedded_source vmembedded sourcecode ispvme_eprom 各ソースファイルの内容は次の通りです hardware.c ハードウェア制御モジュール ( ユーザー側で唯一カスタマイズが必要なソースです ) 以下は カスタマイズする必要の無いソースです ivm_eprom.c VME コアモジュール ( HEX ファイルで使用する場合には生成した HEX ファイルに合わせて編集が必要 ) vmopcode.h オペレーションコード定義ヘッダ (VME アルゴリズムフォーマットやプログラムエンジンに使用する Byte Code) ivm_core.c JTAG コマンドコアモジュール Page: 11
10. VME Embedded ユーザーフロー 以下に, VME Embedded (ispvme_eprom ) ユーザーフローを示します 1 JEDEC ファイル生成 Bit Stream ファイル生成 2 JTAG チェインの作成 4 ivm_eprom.c の編集 システムに 3 VMEファイル /HEXファイルの生成 5 hardwear.c の編集 組み込み! (Development Tool で行う ) 6 ispvm ソースと HEX ファイルをコンパイル Page: 12
10. VME Embedded ユーザーフロー 12 1JEDEC ファイル Bit Stream ファイルの用意 Diamond で設計し JEDEC ファイルまたは Bit Stream ファイルを生成して おきます 他社デバイスへの書き込みの場合は SVF ファイルを用意します 2JTAG チェインの作成 Diamond Programmer にて Chain 構成を作成します チェイン情報は JEDEC ファイルや Bit Stream ファイルと共に VME ファイルに書き込まれます VME ファイルを生成するためにコンフィグレーション情報をセーブしておく必要があります データを保存して XCF ファイルを生成しておきます ( または SVF ファイルを用意します ) 下記画面にて File > Save にて XCF ファイルを生成可能です Page: 13
10. VME Embedded ユーザーフロー 3 3 データファイルとアルゴリズムファイルを生成します 1) Deployment Tool を開きます Function 及び Output File を以下選択し OK を選択します Function Type: Embedded System Output File Type: JTAG Full VME Embedded 2) INPUT XCF ファイルにて XCF ファイルをロードし NEXT を選択します Page: 14
10. VME Embedded ユーザーフロー 3 3) 所望のオプション (File Mode 用の.c 等 ) を選択します ( 通常使用はデフォルト ) 各オプションの詳細設定は次ページをご参照下さい Page: 15
10. VME Embedded ユーザーフロー 3 補足 : JTAG Full VME Embedded Optionについて Compress VME File (Default Check) VMEファイルを生成する際に圧縮します ファイルの内容によっては大幅にサイズを小さくすることができます Compact VME File HuffmanAlgorismを使用して Program Settingで設定したモードを無視してVMEファイルを生成します VMEのためのROM 領域を削減し プログラムに要する時間は短くなります Include Header ( Default Check ) Header 情報をVMEファイルに含めます Include Comment SVFファイルに記述されているコメントをVMEファイルに付けることができます Fixed Pulse Width(Rev D) VMEファイルの固定パルス幅を生成します Generate HEX(.c) File VMEファイルをHEXファイルに変換したものを生成します Maximum Memory Allocation Size Per Row of Data(KB) [<8 16 32 64 128 256> ]: 一行あたりのデータサイズの最大値を入力出来ます < 対応表はHelp 参照 > Verify USERCODE, Program Device if Fails VMEファイルにユーザーコードを付与します プログラム前にデバイスのユーザーコードとVMEファイルのユーザーコードが同じかチェックし PASSした場合のみプログラムを続行します Page: 16
10. VME Embedded ユーザーフロー 3 4) 生成するファイル名を選択し Next を選択 Generate ボタンにてファイルを生成します 生成されるファイルは以下の 2 種類になります vme_file.h: VMEの関数群へ生成したHEXファイルを渡す際に必要となる変数の定義が記載されている xxxx.c( 生成したHexファイル ): 書き込み用のデータ ( 開くと以下のように書き込みデータが配列で変数定義されている ) Hexファイルの中身 unsigned char vme1[6921l] = { 0x65, 0xD8, 0x33, 0x5F, 0x5F, 0x5F, 0x5F, 0x31, 0x32, 0x2E, 0x31, 0xF1, 0x19, 0xB8, 0x0C, 0x56, 0x01, 0x08, 0x00, 0x06, 0x00, 0x09, 0x00, 0x07, 0x00, 0x02, 0x01, 0x03, 0x01, 0x0B, Page: 17
10. VME Embedded ユーザーフロー 5 5 hardware.cの編集以下ご使用のシステムに合わせてhardware.cの修正が必要となります 編集が必要な関数 :writeport,readport,ispvmdelay,main 1) ケーブルアドレス及びシステムクロック周波数を定義設定して下さい 2) JTAG ピン (TDI,TCK,TMS,TDO 等 ) のアドレスを設定して下さい Page: 18
3) WritePort の設定をして下さい 10. VME Embedded ユーザーフロー 5 *a_ucpinsは他関数においては出力ポートレジスタのビット指定をしております 例えば 青枠例にて a_uspins=a_uspintdiの場合 0x01( 前ページ参照 ) と定義されているので8ビットの出力ポートの最下位ビット以外全てマスクされます この例では CPUの出力ポート8へ書き込み信号を出力しています P8.DR.BYTE = g_siisppins; CPU の出力ポートへ信号を代入 Page: 19
4) Read Port の設定をして下さい 10. VME Embedded ユーザーフロー 5 編集例赤線 if (P8.DR.BIT.B6) { TDO として定義した CPU ポートのビットを記入 * 上記の編集においては CPU ポート 8 の 7 ビット目を入力ポートとして定義しております 更に このビットを TDO 入力ビットとして定義しております TDO 用入力ビットが High なのか Low なのかを判断して ucret の変数へ値を代入しております Page: 20
10. VME Embedded ユーザーフロー 5 5) デフォルトの ispvmdelay function(1ms Delay) をご使用下さい または ユーザーサイドで生成下さい * 左記のコメントアウト以下をModifyする必要があります usidelaytimeの変数のmsbが 1 の場合はMillisec 単位のWaitを入れて usidelaytimeの変数のmsbが 0 の場合はMicrosec 単位のWaitを入れるような関数にする必要があります ただし 現在のVMEソースではMicrosecのWaitが必要になるような構造になっておりませんので Millisec 単位でのWaitのみ考慮してください この例ではH8S/2669( 周波数 26Mhz) での修正例になります 約 26Mhz 周波数動作を行うCPUなので1msタイマは6250カウントする必要があります そして usidelaytimeの変数に応じてタイマカウントが可変するように修正しております void DelayTime(int nmilisec) { int cnt; for(cnt=0; cnt<nmilisec; cnt++){ TPU0.TGRA = 6250; TPU0.TCNT = 0; TPU.TSTR.BIT.CST0 = 1; while(!tpu0.tsr.bit.tgfa); TPU0.TSR.BIT.TGFA = 0; TPU.TSTR.BIT.CST0 = 0; } return; } 1ms 用タイマー関数を作成し usidelaytime の変数に応じてタイマー長が可変します Page: 21
6) Clock Calibration 機能を実行して下さい 10. VME Embedded ユーザーフロー 5 一般に 1ラインのコードを実行するシステムクロック数 : 8クロックとしますと The total number of clock for one pulse = 2x8 = 16. The total amount of time for one pulse = 1/Fx 16 Lattice Device TCK frequency max = 25MHz The equation becomes: 1/25 = 1/F x16 CPUの最大動作周波数 F = 16 x 25 = 400MHz CPUのシステムクロック数が400MHzより早い場合 VME Emdedded Fileでは TCKのパルス幅は 25MHzの最大スペックに合わせるために Slow Downさせなければなりません Page: 22
10. VME Embedded ユーザーフロー 5 7) Delay を生成して下さい ( システムクロックが 25MHz 以上の場合 ) Idle Time は通常 初期値 0 となっております JTAG Embedded VME Delay Calibration TCKのパルス幅が1ms 以下のパルス幅の場合 Calibration 機能より1ms 以下の遅延量まで CPUの周波数の値を増やします 初期値を 1 にした場合 TCK の周波数が半分まで下がります TCK のパルス幅を 1ms 以内に下げるために調整します TCK の周波数が 25MHz よりも早い場合 hardware.c ファイル内の sclok() 関数を変更します ( 次ページ参照 ) Page: 23
10. VME Embedded ユーザーフロー 5 8) main 関数の編集について void main(/*int argc, signed char *argv[]*/) 編集例 main 関数の編集 { short siretcode = 0; lcd_watch("lattice VME","STANBY OK"); while(!p4.dr.bit.b4); lcd_watch("lattice VME","WRITE START"); siretcode = ispvm(); } if ( siretcode < 0 ) { lcd_watch("lattice VME","FAIL"); } else { lcd_watch("lattice VME","SUCCESS"); } * この VME ソース自体が組み込み用として作成されておらず main 関数には printf 等の標準 入出力関数が使用されております この main 関数は組込み用にカスタマイズしてお使いください Page: 24
10. VME Embedded ユーザーフロー 6 6 ご使用の CPU 開発環境下にて ispvm ソースと HEX ファイルをコンパイルを行い システムに組み込んで頂きます 一度 キャリブレーション機能を実行したあとに VME Embeddedはデバイスをプログラムする準備に入ります 主要なVME Emdeddedプログラムの機能は以下 6つです 1. Check the IDCODE 2. Erase the Device 3. Program the Device 4. Verify the device 5. Program the done fuse 6. Wake-up the Device Page: 25
11. CPU へのマッピング結果 H8/3048F マイコンにマッピング後の結果一覧 ROM 使用領域 :44.3KB( 内 9KB が書き込みファイル ) RAM 使用領域 :21.6KB 内訳 : 関数 23.8KB 大域変数 定数 1.7KB 大域変数 初期化データ領域 18.7KB 大域変数 未初期化データ領域 2.3KB 局所変数 0.5KB Page: 26
Page: 27 12. Diamond Ver3.1 Support Device
13. Revision リビジョンデータ作成者備考 rev-0 2007/8/4 Machida FirstRevision Rev-1 2014/6/30 Takahashi Kenta 参考文献 * 詳細は以下 Lattice 資料をご参照下さい jtag_full_vme.pdf Lattice JTAG Full VME Manual (Diamond2.2 ) Embedded_VME.pdf Porting Embedded VME into Embedded System( Diamond2.2 ) Page: 28