« XILINXのUSER_ACCESSをJTAGで見る | トップページ | Amazonフルフィルメントに委託 »

2018.11.22

MAX10のJTAG書き込みシーケンス

MITOUJTAGからMAX10に書き込みをができるようにするため、MAX10の書き込みシーケンスを解析しています。

まず、Qualtus Primeで適当なデザインを作り、pofファイルを作ります。

Qualtus

POFファイルの中身はこんな感じです。

Pof

じっと眺めていると、最初の12バイトを読み飛ばした後、キー(2バイト)+長さ(4バイト)+データの順にレコードが並んでいるのがわかります。0x00a8からはじまるFFFFFFFF・・・の部分が本体のデータです。

これをQualtus PrimeのProgrammerを使ってSVFに変換します。

Qualtus_programmer

SVFというのは、Serial Vector Formatの略で、JTAGのシーケンスを記述する汎用的な言語です。

Svf

これをじーっと眺めながらPOFファイルと見比べます。

SIR 10 TDI

の行を探します。SIRはJTAGの命令レジスタへのシフト命令で、続く10bitの値がコマンドです。ただし、このコマンドはIDCODEくらいしか公開されていないので、残りはリバースエンジニアリングしながら推定するしかありません。

その解析結果は、

  • (006)はIDCODE命令
  • (2CC)はCFGモードへの切り替え
  • (203)はメモリアレイへのアドレス指定
  • (2F4)は書き込み
  • (205)はベリファイ
  • (3F2)はDSMの消去
  • (307)はDSMのベリファイ
  • (201)はCFGモードからの復帰
であることが推定できます。

基本的にはPOFファイルの内容をどんどん書き込んでいるだけなのですが、たまに

Svf_skip_2

というふうにアドレスを与えなおしています。それは元のFFFFFFFFが出てきたところでそうなるようで、消去後にはROMの内容はFFFFFFFFになっているから、書く必要のない部分はスキップするという方針のようです。

これでMAX10へのCFMへの書き込みシーケンスの作り方は80%くらい理解できました。

|

« XILINXのUSER_ACCESSをJTAGで見る | トップページ | Amazonフルフィルメントに委託 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« XILINXのUSER_ACCESSをJTAGで見る | トップページ | Amazonフルフィルメントに委託 »