1 |
2 |
ZTEX |
#!/bin/bash
|
2 |
|
|
|
3 |
|
|
for txt in *.txt; do
|
4 |
|
|
ucf=${txt%*.txt}.ucf
|
5 |
|
|
xdc=${txt%*.txt}.xdc
|
6 |
|
|
tf=${txt%*.txt}.tmp
|
7 |
|
|
|
8 |
|
|
rm -f $tf
|
9 |
|
|
[ -f "${txt%*.txt}.repl" ] && cp ${txt%*.txt}.repl $tf
|
10 |
|
|
cat convert.repl >> $tf
|
11 |
|
|
|
12 |
|
|
echo "# !!! Constraint files are application specific !!!" > $ucf
|
13 |
|
|
echo "# !!! This is a template only !!!" >> $ucf
|
14 |
|
|
echo -e "\n# on-board signals\n" >> $ucf
|
15 |
|
|
|
16 |
|
|
echo "# !!! Constraint files are application specific !!!" > $xdc
|
17 |
|
|
echo "# !!! This is a template only !!!" >> $xdc
|
18 |
|
|
echo -e "\n# on-board signals\n" >> $xdc
|
19 |
|
|
|
20 |
|
|
|
21 |
|
|
pa=""
|
22 |
|
|
while read a b c; do
|
23 |
|
|
if [ "$pa" != "" -a "$a" = "" ]; then
|
24 |
|
|
echo >> $ucf
|
25 |
|
|
echo >> $xdc
|
26 |
|
|
fi
|
27 |
|
|
if [ "$a" = "-" ]; then
|
28 |
|
|
if [ "$c" != "" ]; then
|
29 |
|
|
case "$b" in
|
30 |
|
|
"CLKOUT/FXCLK")
|
31 |
|
|
echo "# CLKOUT/FXCLK " >> $ucf
|
32 |
|
|
echo "NET \"fxclk_in\" TNM_NET = \"fxclk_in\";" >> $ucf
|
33 |
|
|
echo "TIMESPEC \"ts_fxclk_in\" = PERIOD \"fxclk_in\" 48 MHz HIGH 50 %;" >> $ucf
|
34 |
|
|
echo "NET \"fxclk_in\" LOC = \"$c\" | IOSTANDARD = LVCMOS33 ;" >> $ucf
|
35 |
|
|
|
36 |
|
|
echo "# CLKOUT/FXCLK " >> $xdc
|
37 |
|
|
echo "create_clock -name fxclk_in -period 20.833 [get_ports fxclk_in]" >> $xdc
|
38 |
|
|
echo "set_property PACKAGE_PIN $c [get_ports fxclk_in]" >> $xdc
|
39 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports fxclk_in]" >> $xdc
|
40 |
|
|
;;
|
41 |
|
|
"IFCLK")
|
42 |
|
|
echo "# IFCLK " >> $ucf
|
43 |
|
|
echo "NET \"ifclk_in\" TNM_NET = \"ifclk_in\";" >> $ucf
|
44 |
|
|
echo "TIMESPEC \"ts_ifclk_in\" = PERIOD \"ifclk_in\" 48 MHz HIGH 50 %;" >> $ucf
|
45 |
|
|
echo "NET \"ifclk_in\" LOC = \"$c\" | IOSTANDARD = LVCMOS33 ;" >> $ucf
|
46 |
|
|
|
47 |
|
|
echo "# IFCLK " >> $xdc
|
48 |
|
|
echo "create_clock -name ifclk_in -period 20.833 [get_ports ifclk_in]" >> $xdc
|
49 |
|
|
echo "set_property PACKAGE_PIN $c [get_ports ifclk_in]" >> $xdc
|
50 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports ifclk_in]" >> $xdc
|
51 |
|
|
;;
|
52 |
|
|
"IFCLK100")
|
53 |
|
|
echo "# IFCLK " >> $ucf
|
54 |
|
|
echo "NET \"ifclk_in\" TNM_NET = \"ifclk_in\";" >> $ucf
|
55 |
|
|
echo "TIMESPEC \"ts_ifclk_in\" = PERIOD \"ifclk_in\" 100 MHz HIGH 50 %;" >> $ucf
|
56 |
|
|
echo "NET \"ifclk_in\" LOC = \"$c\" | IOSTANDARD = LVCMOS33 ;" >> $ucf
|
57 |
|
|
|
58 |
|
|
echo "# IFCLK " >> $xdc
|
59 |
|
|
echo "create_clock -name ifclk_in -period 10 [get_ports ifclk_in]" >> $xdc
|
60 |
|
|
echo "set_property PACKAGE_PIN $c [get_ports ifclk_in]" >> $xdc
|
61 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports ifclk_in]" >> $xdc
|
62 |
|
|
;;
|
63 |
|
|
"CLK26")
|
64 |
|
|
echo "# CLK " >> $ucf
|
65 |
|
|
echo "NET \"clk_in\" TNM_NET = \"clk_in\";" >> $ucf
|
66 |
|
|
echo "TIMESPEC \"ts_clk_in\" = PERIOD \"clk_in\" 26 MHz HIGH 50 %;" >> $ucf
|
67 |
|
|
echo "NET \"clk_in\" LOC = \"$c\" | IOSTANDARD = LVCMOS33 ;" >> $ucf
|
68 |
|
|
|
69 |
|
|
echo "# CLK " >> $xdc
|
70 |
|
|
echo "create_clock -name clk_in -period 38.462 [get_ports clk_in]" >> $xdc
|
71 |
|
|
echo "set_property PACKAGE_PIN $c [get_ports clk_in]" >> $xdc
|
72 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports clk_in]" >> $xdc
|
73 |
|
|
;;
|
74 |
|
|
*)
|
75 |
|
|
b2=`echo "$b" | tr -d "*" `
|
76 |
|
|
c2=`grep -i -m 1 -x "$b2.*" $tf | ( read a b c; echo $b )`
|
77 |
|
|
if [ "$c2" != "" ]; then
|
78 |
|
|
echo "NET \"$c2\" LOC = \"$c\" | IOSTANDARD = LVCMOS33 ; # $b2" | tr "[]" "<>" >> $ucf
|
79 |
|
|
|
80 |
|
|
# echo -e "\n# $b2" >> $xdc
|
81 |
|
|
# echo "set_property PACKAGE_PIN $c [get_ports {$c2}]" >> $xdc
|
82 |
|
|
echo -e "\nset_property PACKAGE_PIN $c [get_ports {$c2}] ;# $b2" >> $xdc
|
83 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports {$c2}]" >> $xdc
|
84 |
|
|
else
|
85 |
|
|
echo "Unknown signal: $b" >&2
|
86 |
|
|
echo "$b" >> convert.unknown
|
87 |
|
|
fi
|
88 |
|
|
;;
|
89 |
|
|
esac
|
90 |
|
|
fi
|
91 |
|
|
pa=$a
|
92 |
|
|
else
|
93 |
|
|
pa=""
|
94 |
|
|
fi
|
95 |
|
|
done < $txt
|
96 |
|
|
|
97 |
|
|
echo -e "\n# external I/O\n" >> $ucf
|
98 |
|
|
echo -e "\n\n# external I/O" >> $xdc
|
99 |
|
|
|
100 |
|
|
rm -f $tf
|
101 |
|
|
pa=""
|
102 |
|
|
while read a b c; do
|
103 |
|
|
if [ "$a" != "-" -a "$c" != "" ]; then
|
104 |
|
|
echo "$a $c $a / $b" >> $tf
|
105 |
|
|
fi
|
106 |
|
|
done < $txt
|
107 |
|
|
|
108 |
|
|
pa="A"
|
109 |
|
|
cnt=0
|
110 |
|
|
sort -V $tf | while read a b c; do
|
111 |
|
|
a0=${a:0:1}
|
112 |
|
|
if [ "$a0" != "$pa" ]; then
|
113 |
|
|
cnt=0
|
114 |
|
|
echo >> $ucf
|
115 |
|
|
echo >> $xdc
|
116 |
|
|
fi
|
117 |
|
|
echo "NET \"IO_$a0<$cnt>\" LOC = \"$b\" | IOSTANDARD = LVCMOS33 ; # $c" >> $ucf
|
118 |
|
|
|
119 |
|
|
# echo -e "\n# $c" >> $xdc
|
120 |
|
|
# echo "set_property PACKAGE_PIN $b [get_ports {IO_$a0[$cnt]}]" >> $xdc
|
121 |
|
|
echo -e "\nset_property PACKAGE_PIN $b [get_ports {IO_$a0[$cnt]}] ;# $c" >> $xdc
|
122 |
|
|
echo "set_property IOSTANDARD LVCMOS33 [get_ports {IO_$a0[$cnt]}]" >> $xdc
|
123 |
|
|
|
124 |
|
|
let "cnt+=1"
|
125 |
|
|
pa=$a0
|
126 |
|
|
done
|
127 |
|
|
|
128 |
|
|
rm -f $tf
|
129 |
|
|
done
|