1
1
#! /bin/bash
2
2
3
3
ARTIQ_PREFIX=$( python3 -c " import artiq; print(artiq.__path__[0])" )
4
- BIN_PREFIX=$ARTIQ_PREFIX /binaries
5
4
6
- while getopts " bBrh" opt
5
+ # Default is ppro
6
+ BOARD=ppro
7
+
8
+ while getopts " bBrht:d:" opt
7
9
do
8
10
case $opt in
9
11
b)
15
17
r)
16
18
FLASH_RUNTIME=1
17
19
;;
20
+ t)
21
+ if [ " $OPTARG " == " kc705" ]
22
+ then
23
+ BOARD=kc705
24
+ elif [ " $OPTARG " == " ppro" ]
25
+ then
26
+ BOARD=ppro
27
+ else
28
+ echo " Supported targets (-t option) are: kc705 and ppro"
29
+ exit 1
30
+ fi
31
+ ;;
32
+ d)
33
+ if [ -d $OPTARG ]
34
+ then
35
+ BIN_PATH=$OPTARG
36
+ else
37
+ echo " You specified a non-existing directory: $OPTARG "
38
+ exit 1
39
+ fi
40
+ ;;
18
41
* )
19
42
echo " ARTIQ flashing tool"
20
43
echo " "
21
- echo " To flash everything, do not use any command line option."
44
+ echo " To flash everything, do not use any of the -b|-B|-r option."
22
45
echo " "
23
- echo " usage: $0 [-b] [-B] [-r] [-h]"
46
+ echo " usage: $0 [-b] [-B] [-r] [-h] [-t kc705|ppro] [-d path] "
24
47
echo " -b Flash bitstream"
25
48
echo " -B Flash BIOS"
26
49
echo " -r Flash ARTIQ runtime"
27
50
echo " -h Show this help message"
51
+ echo " -t Target (kc705 or ppro, default is: ppro)"
52
+ echo " -d Directory containing the binaries to be flashed"
28
53
exit 1
29
54
;;
30
55
esac
31
56
done
32
57
33
- if [ -z $@ ]
58
+ if ! [ -z " $BIN_PATH " ]
59
+ then
60
+ BIN_PREFIX=$BIN_PATH
61
+ fi
62
+
63
+ if [ " $BOARD " == " ppro" ]
64
+ then
65
+ UDEV_RULES=99-ppro.rules
66
+ BITSTREAM=artiq_ppro-up-papilio_pro.bin
67
+ CABLE=papilio
68
+ PROXY=bscan_spi_lx9_papilio.bit
69
+ BIN_PREFIX=$ARTIQ_PREFIX /binaries/ppro
70
+ PROXY_PATH=$BIN_PREFIX
71
+ BIOS_ADDR=0x60000
72
+ RUNTIME_ADDR=0x70000
73
+ elif [ " $BOARD " == " kc705" ]
74
+ then
75
+ UDEV_RULES=99-kc705.rules
76
+ BITSTREAM=artiq_kc705-artiqsocbasic-kc705.bit
77
+ CABLE=jtaghs1_fast
78
+ PROXY=bscan_spi_kc705.bit
79
+ BIN_PREFIX=$ARTIQ_PREFIX /binaries/kc705
80
+ BIOS_ADDR=0xaf0000
81
+ RUNTIME_ADDR=0xb00000
82
+ if [ -f $HOME /.migen/$PROXY ]
83
+ then
84
+ PROXY_PATH=$HOME /.migen/
85
+ elif [ -f /usr/local/share/migen/$PROXY ]
86
+ then
87
+ PROXY_PATH=/usr/local/share/migen/
88
+ elif [ -f /usr/share/migen/$PROXY ]
89
+ then
90
+ PROXY_PATH=/usr/share/migen/
91
+ else
92
+ echo " KC705 flash proxy ($PROXY ) not found."
93
+ echo " Please build it from https://github.com/m-labs/bscan_spi_kc705"
94
+ echo " and put it in ~/.migen or /usr/local/share/migen or /usr/share/migen"
95
+ exit 1
96
+ fi
97
+ fi
98
+
99
+ # Check if neither of -b|-B|-r have been used
100
+ if [ -z " $FLASH_RUNTIME " -a -z " $FLASH_BIOS " -a -z " $FLASH_BITSTREAM " ]
34
101
then
35
102
FLASH_RUNTIME=1
36
103
FLASH_BIOS=1
@@ -42,12 +109,12 @@ check_return() {
42
109
exit
43
110
}
44
111
45
- xc3sprog -c papilio -R 2& > 1 > /dev/null
112
+ xc3sprog -c $CABLE -R 2& > 1 > /dev/null
46
113
if [ " $? " != " 0" ]
47
114
then
48
115
echo " Flashing failed because it seems you do not have permission to access the USB device."
49
116
echo " To fix this you might want to add a udev rule by doing:"
50
- echo " $ sudo cp $ARTIQ_PREFIX /misc/99-ppro.rules /etc/udev/rules.d"
117
+ echo " $ sudo cp $ARTIQ_PREFIX /misc/$UDEV_RULES /etc/udev/rules.d"
51
118
echo " Then unplug/replug your device and try flashing again"
52
119
exit
53
120
fi
@@ -57,19 +124,19 @@ trap check_return ERR
57
124
if [ " ${FLASH_BITSTREAM} " == " 1" ]
58
125
then
59
126
echo " Flashing FPGA bitstream..."
60
- xc3sprog -v -c papilio -I$BIN_PREFIX /bscan_spi_lx9_papilio.bit $BIN_PREFIX /artiqminisoc-papilio_pro.bin :w:0x0:BIN
127
+ xc3sprog -v -c $CABLE -I$PROXY_PATH / $PROXY $BIN_PREFIX /$BITSTREAM :w:0x0:BIN
61
128
fi
62
129
63
130
if [ " ${FLASH_BIOS} " == " 1" ]
64
131
then
65
132
echo " Flashing BIOS..."
66
- xc3sprog -v -c papilio -I$BIN_PREFIX /bscan_spi_lx9_papilio.bit $BIN_PREFIX /bios.bin:w:0x60000 :BIN
133
+ xc3sprog -v -c $CABLE -I$PROXY_PATH / $PROXY $BIN_PREFIX /bios.bin:w:$BIOS_ADDR :BIN
67
134
fi
68
135
69
136
if [ " ${FLASH_RUNTIME} " == " 1" ]
70
137
then
71
138
echo " Flashing ARTIQ runtime..."
72
- xc3sprog -v -c papilio -I$BIN_PREFIX /bscan_spi_lx9_papilio.bit $BIN_PREFIX /runtime.fbi:w:0x70000 :BIN
139
+ xc3sprog -v -c $CABLE -I$PROXY_PATH / $PROXY $BIN_PREFIX /runtime.fbi:w:$RUNTIME_ADDR :BIN
73
140
fi
74
141
echo " Done."
75
- xc3sprog -v -c papilio -R 2& > 1 > /dev/null
142
+ xc3sprog -v -c $CABLE -R 2& > 1 > /dev/null
0 commit comments