JTAGでバウンダリスキャンしてみよう

by K.I
2010/04/28

Index


概要

UrJTAG

UrJTAGのインストール

ケーブルの設定

やっぱりダメ?

デバイス情報の設定


1PRO版はスクリプトが使えるし、BASIC版はSVFプレイヤーで出来ると思う。

[top]

BSDLファイル

PIN_MAP

BOUNDARY_LENGTH

BOUNDARY_REGISTER

XC9572のピンとレジスタの関係

PIN SIGNAL IN OUT CONT CONNECTREG
1 PB00_01 212 211 210 A8 70 1
2 PB00_04 203 202 201 A9 67 4
3 PB00_05 200 199 198 A11 66 5
4 PB00_07 194 193 192 /OE 64 7
5 PB00_08 191 190 189 A10 63 8
6 PB00_10 185 184 183 /CE 61 10
7 PB00_13 176 175 174 CLK 58 13
8 PB00_14 173 172 171 OUT2 57 14
9 PB00_16 167 166 165 OUT 55 16
35 PB01_01 158 157 156 A7 52 19
36 PB01_04 149 148 147 A12 49 22
37 PB01_05 146 145 144 A15 48 23
38 PB01_07 140 139 138 A16 46 25
39 PB01_08 137 136 135 /RES 45 26
40 PB01_10 131 130 129 /WE 43 28
42 PB01_13 122 121 120 A17 40 31
43 PB01_14 119 118 117 A14 39 32
44 PB01_16 113 112 111 A13 37 34
11 PB02_01 104 103 102 NC 34 37
12 PB02_04 95 94 93 DQ7 31 40
13 PB02_07 86 85 84 DQ6 28 43
14 PB02_08 83 82 81 DQ5 27 44
18 PB02_10 77 76 75 DQ4 25 46
19 PB02_13 68 67 66 DQ3 22 49
20 PB02_14 65 64 63 DQ2 21 50
22 PB02_16 59 58 57 DQ1 19 52
24 PB03_01 50 49 48 DQ0 16 55
25 PB03_04 41 40 39 A0 13 58
26 PB03_07 32 31 30 A1 10 61
27 PB03_08 29 28 27 A2 9 62
28 PB03_10 23 22 21 A3 7 64
29 PB03_13 14 13 12 A4 4 67
33 PB03_14 11 10 9 A5 3 68
34 PB03_16 5 4 3 A6 1 70

[top]

バウンダリスキャンしてみる

IDCODE出力

SAMPLE/PRELOAD

EXTEST


[top]

スクリプトで実行

スクリプト実行でエラー

プログラム変更

$ jtag extest_script
Initializing ppdev port /dev/parport0
IR length: 8
Chain length: 1
Device Id: 00101001010100000100000010010011 (0x0000000029504093)
  Manufacturer: Xilinx
  Part(0):         xc9572_pc44
  Stepping:     2
  Filename:     /usr/local/share/urjtag/xilinx/xc9572_pc44/xc9572_pc44
100101100100101101100101101100101100100111101100101100100101100100101101100101101100111100100101101100101100100100100100101100100101101100101100100101101100101100100101100100101100100101101100101100100101101100101100

試しスクリプト


[top]

スクリプト

ケーブル設定

スキャンレジスタの設定

sub xxx {
  ($x) = @_;
  if ($x==0) {$line .= "101";}          # set 0
  elsif ($x>0) {$line .= "111";}        # set 1
  else {$line .= "100";}                # Hi-Z
}

sub set_data {
  $line = "";
  &xxx(-1);
  &xxx($ADRS&0x00100);  #A8
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x00200);  #A9
  &xxx($ADRS&0x00800);  #A11
  &xxx(-1);
  &xxx($oen);           #/OE
  &xxx($ADRS&0x00400);  #A10
  &xxx(-1);
  &xxx($CEN);           #/CE
  &xxx(-1);
  &xxx(-1);
  &xxx($CLK);           #CLK
  &xxx($TRIG);          #TRIGOUT
  &xxx(-1);
  &xxx($OUT);           #STREAMOUT
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x00080);  #A7
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x01000);  #A12
  &xxx($ADRS&0x08000);  #A15
  &xxx(-1);
  &xxx($ADRS&0x10000);  #A16
  &xxx($RESN);          #/RES
  &xxx(-1);
  &xxx($WEN);           #/WE
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x20000);  #A17
  &xxx($ADRS&0x04000);  #A14
  &xxx(-1);
  &xxx($ADRS&0x02000);  #A13
  &xxx(-1);
  &xxx(-1);
  &xxx(-1);             #NC
  &xxx(-1);
  &xxx(-1);
  &xxx($DATA&0x80);     #DQ7
  &xxx(-1);
  &xxx(-1);
  &xxx($DATA&0x40);     #DQ6
  &xxx($DATA&0x20);     #DQ5
  &xxx(-1);
  &xxx($DATA&0x10);     #DQ4
  &xxx(-1);
  &xxx(-1);
  &xxx($DATA&0x08);     #DQ3
  &xxx($DATA&0x04);     #DQ2
  &xxx(-1);
  &xxx($DATA&0x02);     #DQ1
  &xxx(-1);
  &xxx(-1);
  &xxx($DATA&0x01);     #DQ0
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x00001);  #A0
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x00002);  #A1
  &xxx($ADRS&0x00004);  #A2
  &xxx(-1);
  &xxx($ADRS&0x00008);  #A3
  &xxx(-1);
  &xxx(-1);
  &xxx($ADRS&0x00010);  #A4
  &xxx($ADRS&0x00020);  #A5
  &xxx(-1);
  &xxx($ADRS&0x00040);  #A6
  &xxx(-1);
}

メモリ書込みルーチン

sub extest {
  ($ADRS,$DATA,$CEN,$OEN,$WEN) = @_;
  &set_data;
  print "instruction EXTEST\n";
  print "shift ir\n";
  print "dr $line\n";
  print "shift dr\n";
  print "usleep 1000\n";
  print "\n";
}

sub write_mem {
  ($A,$D) = @_;
  &extest(0x5555,0xAA,0,1,1);
  &extest(0x5555,0xAA,0,1,0);
  &extest(0x2AAA,0x55,0,1,1);
  &extest(0x2AAA,0x55,0,1,0);
  &extest(0x5555,0xA0,0,1,1);
  &extest(0x5555,0xA0,0,1,0);
  &extest($A,$D,0,1,1);
  &extest($A,$D,0,1,0);
  &extest($A,$D,0,1,1);
}

メモリ書込みメインルーチン


[top] [電子工作関連に戻る]