Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#! /bin/bash
#@brief This script provides a basic runner for the 381 Toolflow
#
#@author Braedon Giblin <bgiblin@iastate.edu>
#@date 2022.02.10
#
PYTHON3_VDI=/usr/local/mentor/calibre/bin/python3
PYTHON3_LAB=/bin/python3
red='\033[0;31m'
GREEN='\033[0;32m'
ORANGE='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Check if the user has passed a PYTHON var
if [ -z ${python3+x} ]; then
if [ -f "$PYTHON3_VDI" ]; then
PYTHON=$PYTHON3_VDI
echo "Using VDI Python Environment"
elif [ -f "$PYTHON3_LAB" ]; then
PYTHON=$PYTHON3_LAB
echo "Using LAB Python Environment"
else
echo -e "${RED}Python Missing... Try running this with PYTHON=path/to/python3 ./381_tf.sh${NC}"
exit 1
fi
else
if [ -f "$PYTHON" ]; then
echo "Using $PYTHON"
else
echo -e "${RED}Provided Python path $PYTHON does not exists ${NC}"
exit 1
fi
fi
if [ "$1" == "new" ]; then
if [ -d "proj" ]; then
echo -e "${RED}Projet already exists, trying moving your extiing project using the 'mov' *nix command${NC}"
else
mkdir -p "proj"
mkdir -p "proj/src"
mkdir -p "proj/test"
mkdir -p "proj/mips"
touch "proj/test/.gitkeep"
cp -r "internal/boilerplate_src/"* "proj/src"
cp -r "internal/boilerplate_mips/"* "proj/mips"
echo "New project Created"
fi
elif [ "$1" == "test" ]; then
echo "Testing"
$PYTHON internal/testpy/test_framework.py "${@:2}"
elif [ "$1" == "synth" ]; then
echo "Synth"
$PYTHON internal/snthpy/synthesis.py "${@:2}"
elif [ "$1" == "submit" ]; then
if [ ! -d "proj" ]; then
echo -e "${RED}Project 'proj' doesn't exist${NC}"
echo -e "${RED}Please make sure your project exists at ./proj/ ${NC}"
exit 1
fi
if [ ! -n "$(ls -A proj/src/*.vhd 2>/dev/null )" ]; then
echo -e "${RED}Missing proj/src diretory (or no vhd files present)${NC}"
exit 1
fi
if [ ! -n "$(ls -A proj/mips/*.s 2>/dev/null)" ]; then
echo -e "${RED}Missing proj/mips diretory (or no s files present)${NC}"
exit 1
fi
if [ ! -n "$(ls -A proj/test/*.vhd 2>/dev/null)" ]; then
echo -e "${RED}Missing proj/test diretory (or no vhd files present)${NC}"
exit 1
fi
if [ ! -f "proj/"*".pdf" ]; then
echo -e "${RED}Missing report PDF (proj/*.pdf)${NC}"
echo -e "${RED}Please export your report to PDF, and place in the ${NC}"
echo -e "${RED}'proj' directory${NC}"
exit 1
fi
if [ $# == 2 ]; then
proj1=0
if [ "$2" == "sw" ]; then
suff="_proj2_sw"
elif [ "$2" == "hw" ]; then
suff="_proj2_hw"
else
echo -e "${RED}Argument for submit [$2] not recognized${NC}"
echo -e "${ORANGE}Accepted options are 'hw' or 'sw' or nothing.${NC}"
exit 1
fi
echo -e "${GREEN}Making Project 2 Submission${NC}"
else
proj1=1
suff=_proj1
echo -e "${GREEN}Making Project 1 Submission${NC}"
fi
echo "Creating submission in submissions/"
echo "When submitting to Canvas, please make sure to upload both the .zip"
echo "directory and the pdf as a submission. All files needed for submisison"
echo "are included in the submission directory."
mkdir -p "submissions/"
cp -r "proj/src" "submissions"
cp -r "proj/mips" "submissions"
cp -r "proj/test" "submissions"
cp "proj/"*".pdf" "submissions"
(cd "submissions" && zip --quiet -r "submit${suff}.zip" *)
rm -rf "submissions/src"
rm -rf "submissions/mips"
rm -rf "submissions/test"
if [ $proj1 == 1 ]; then
mkdir -p "submissions/proj1"
mv "submissions/submit${suff}.zip" "submissions/proj1"
else
mkdir -p "submissions/proj2"
mv "submissions/submit${suff}.zip" "submissions/proj2"
fi
else
echo "==========================================================================================="
echo " _____ _____ _____ ______ ____ ___ __ _______ _ __ _ "
echo " / ____| __ \| __ \ | ____| |___ \ / _ \/_ | |__ __| | |/ _| | "
echo " | | | |__) | |__) | | |__ __) | (_) || | | | ___ ___ | | |_| | _____ __ "
echo " | | | ___/| _ / | __| |__ < > _ < | | | |/ _ \ / _ \| | _| |/ _ \ \ /\ / / "
echo " | |____| | | | \ \ | |____ ___) | (_) || | | | (_) | (_) | | | | | (_) \ V V / "
echo " \_____|_| |_| \_\ |______| |____/ \___/ |_| |_|\___/ \___/|_|_| |_|\___/ \_/\_/ "
echo "==========================================================================================="
echo "Welcome to CPR E 381 Toolflow."
echo "This toolflow may be used to test and synthesize your code, as well as provide a submission"
echo "template for Canvas. For more information on this tool, please see the attached manual file."
echo "The general workflow for this toolflow is to "
echo -e " \t 1) create a project using the 'new' command. "
echo " "
echo -e " \t 2) Build your MIPS processor in the created 'proj' directory using your editor of choice. "
echo "You may create subdirectoryies in both the MIPS and the SRC folder to encompass your tests."
echo " "
echo -e " \t 3) Test your MIPS processor frequently as you go. The toolflow supports testing for both"
echo "provided unit tests, as well as your own tests. See the documentation for a desription on how"
echo "to properly test your processr."
echo " "
echo -e " \t 4) Synthesis framework. This framework allows you to synthesize"
echo "your MIPS processor using the Altera Quartus toolflow. Be aware... This synthesis often takes"
echo "some time to run. Your final outputs from the synthesis will be a timing summary, in which"
echo "you may extrapolate the critical path of your processor. "
echo " "
echo -e " \t 5) The last goal of this toolflow is to sanity check and package your submissision. Please "
echo "pay attention to the submission guidelines highlighted in your lab documentation, and ensure "
echo "that the submission .zip and report generated matches what you intend to submit. Upload all "
echo "files to Canvas as a single group submission."
echo " "
echo -e "${BLUE} Supported Toolflow operations${NC}"
echo " Please contact your TA / professor with any toolflow bugs encountered!"
echo " "
echo -e "${ORANGE}To initialize your project: ${NC}"
echo " "
echo "./381_tf.sh new "
echo " "
echo -e "${ORANGE}To test your code: ${NC}"
echo " "
echo "./381_tf.sh test <options>"
echo " "
echo "You may use the option -h or --help when calling test to print a test help message with all options"
echo " "
echo -e "${ORANGE}To synthesize: ${NC}"
echo " "
echo "./381_tf.sh synth"
echo " "
echo -e "${ORANGE}To generate/check submission: ${NC}"
echo " "
echo "./381_tf.sh submit"
echo "./381_tf.sh submit hw"
echo "./381_tf.sh submit sw"
fi