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...微妙にわからない」と感じている方に本レポートを見てもらえればうれしいです。
|