JTAG Boundary Scan(8)
2022/05/22
BSDLの内容
  • 今回はBSDLの内容を説明します。また前回レポートで使用したBSDLの内容を読んで構造化データにするPerlモジュール IPat_ReadBsdl.pm についても併せて説明します。

  • BSDLのサンプルは XA6SLX25_CSG324.zip です。また、IPat_ReadBsdl.pm のオブジェクトは $bsdl とします。
entity名
  • 131行: entity XA6SLX25_CSG324 is

    • 対象FPGA/ICのentity名/module名です。この例では 'XA6SLX25_CSG324' がentity名になります。

    • $bsdl->{entity}: entity名
port情報
  • 139行: port (
    140行:  CMPCS_B: in bit; -- CMPCS_B_2
    141行:  DONE: inout bit; -- DONE_2
    142行:  GND: linkage bit_vector (1 to 37);
    ...(略)...

    • ポート名: ディレクション bit幅;です。
    • bit_vector (MSB to LSB)は複数bit幅のポートです。
    • -- 以降はコメントです。BSDL内共通でコメント扱いです。VHDLと同じです。
    • ディレクション 'linkage' は Vcc/GND等BSR対象外ポートです。$bsdlでも収集対象外です。

    • $bsdl->{port}
      ->{ポート名}
        ->{dir}: ディレクション
        ->{width}: bit幅
        ->{msb}: MSB
        ->{lsb}: LSB
TAP情報
  • 649行: attribute TAP_SCAN_IN of TDI : signal is true;
    650行: attribute TAP_SCAN_MODE of TMS : signal is true;
    651行: attribute TAP_SCAN_OUT of TDO : signal is true;
    652行: attribute TAP_SCAN_CLOCK of TCK : signal is (25.0e6, BOTH);

    • TAPポートの定義です。たまに独自のポート名になっていることがあります。特にTRSTは要注意です。
    • TCKに書かれている(25.0e6, BOTH)は、TCK 25MHz, Pos/Neg両エッジ使用を意味しています。

    • $bsdl->{tap}
      ->{mode}: TAP_SCAN_MODE信号名
      ->{in}: TAP_SCAN_IN信号名
      ->{out}: TAP_SCAN_OUT信号名
      ->{reset}: TAP_SCAN_RESET信号名 ※無い場合が多い
      ->{clock}: TAP_SCAN_CLOCK信号名
      ->{freq}: TAP_SCAN_CLOCK周波数
コンプライアンス
  • 656行: attribute COMPLIANCE_PATTERNS of XA6SLX25_CSG324 : entity is
    657行:   "(PROGRAM_B) (1)";

    • BSR設定時に値の制約があるポートの情報です。上記例ではPROGRAM_Bの値は'1'とする制約です。
    • ですがCOMPLINACE以外にも制約があり、それは後述のBSR定義に記述されています。

    • $bsdl->{compl}
      ->{ポート名}: 制約値
インストラクション
  • 661行: attribute INSTRUCTION_LENGTH of XA6SLX25_CSG324 : entity is 6;
    662行:
    663行: attribute INSTRUCTION_OPCODE of XA6SLX25_CSG324 : entity is
    664行:   "EXTEST (001111)," &
    665行:   "SAMPLE (000001)," &
    666行:   "PRELOAD (000001)," & -- Same as SAMPLE
    ...(略)...

    • INSTRUCTION_LENGTH は、JTAG命令のbit長です。今回の例では6です。
    • 以後、各命令(EXTEST,SAMPLE等...)に相当するオペコードが列挙されます。

    • $bsdl->{opcode}
      ->{length}: JTAG IR bit長
      ->{capture}: IR capture時の値
      ->{インストラクション名}: 設定IR値(複数割当あるためリストのリファレンスが戻る)
        (例)$bsdl->{opcode}->{EXTEST}->[0]: '001111'が戻る
デバイスID
  • 732行: attribute IDCODE_REGISTER of XA6SLX25_CSG324 : entity is
    732行:   "XXXX" & -- version
    733行:   "0100000" & -- family
    734行:   "000000100" & -- array size
    735行:   "00001001001" & -- manufacturer
    736行:   "1"; -- required by 1149.1

    • IDCODE命令で読むことができる32bitのデバイスIDです。

    • $bsdl->{devid}: デバイスID
BSR情報
  • 762行: attribute BOUNDARY_REGISTER of XA6SLX25_CSG324 : entity is
    763行: -- cellnum (type, port, function, safe[, ccell, disval, disrslt])
    764行:   " 0 (BC_2, *, controlr, 1)," & -- TDO
    765行:   " 1 (BC_2, IO_A16, output3, X, 0, 1, Z)," & -- PAD58
    766行:   " 2 (BC_2, IO_A16, input, X)," & -- PAD58
    767行:   " 3 (BC_2, *, controlr, 1)," &
    768行:   " 4 (BC_2, IO_B16, output3, X, 3, 1, Z)," & -- PAD57
    769行:   " 5 (BC_2, IO_B16, input, X)," & -- PAD57
    ...(略)...

    • BSR ID, BSRセルタイプ, 制御対象ポート名, 機能... が記述されています。

    • 機能: controlr: output enable制御です
       "BSR番号 (BSRタイプ, *, controlr, 安全な値)"
    • 機能: output3: トライステートoutputです
       "BSR番号 (BSRタイプ, 対象ポート名, output3, 初期値, Enable制御BSR番号, Disable設定値, Disable時出力値)"
       ※Disable時出力値には0/1/Z以外にPULL0/1もあります。
    • 機能: input: inputです
    •  "BSR番号 (BSRタイプ, 対象ポート名, input, 初期値)"
    • 機能: internal: IOに接続されないBSRです
       "BSR番号 (BSRタイプ, internal, 初期値/設定すべき値)"
       ※IOに関係しないBSRは、ここに記述された値を設定するのが安全です。

    • $bsdl->{bsr}
      ->[BSR番号]
        ->{type}: BSRセルタイプ: BC_1/BC_2/BC_4等 ...
        ->{pin}: 制御対象ポート名(*1)
        ->{func}: 機能名: controlr/input/output3等 ...
        ->{init}: 初期値(又は初期値として設定すべき値)
        ->{o_cont}: output3: output enableを制御するBSR番号
        ->{o_val}: output3: output disable設定値
        ->{o_stat}: output3: output disable時の値

  • BSR情報はメーカーによってバリエーションがあり、上記の説明ではカバーしていない機能があります。とりあえずXilinx/Altera系は上記でOKそうです。

最後に
  • 2月末からJTAG Boundary Scanの話をしてきました。FPGAのBoundary Scan Simモデルはサイトに行けば転がっているだろうと思ったのですが、BSDLしか見つからなかったため、仕方なく自分で作ることにしたのがきっかけです。

  • とにかく個人レベルでは仕様が調べにくく、わかるようでわからない感がありました。実際にFPGAで動作確認するまでは「大丈夫かな...」と不安が。どうにかPCB上のIC/FPGA/IO間接続テストには使えるレベルのSimモデルが作れたかなと。

  • 私と同じように「Boundary Scan...微妙にわからない」と感じている方に本レポートを見てもらえればうれしいです。
Notes
  • キー名をportにすべきだった...どこかで直します。
Copyright(C) 2022 Altmo
本HPについて