| 1 |
210 |
ja_rd |
|
| 2 |
|
|
\chapter{Tools}
|
| 3 |
|
|
\label{tools}
|
| 4 |
|
|
|
| 5 |
221 |
ja_rd |
Directory '/tools' of the project includes a few tools -- small C or Python
|
| 6 |
|
|
programs purpose-built for this project.
|
| 7 |
|
|
|
| 8 |
|
|
What follows is a brief description of each of the tools. This document
|
| 9 |
|
|
won't go into the implementation or usage details. The tools themselves have
|
| 10 |
|
|
brief usage instructions and for any further details the user must read
|
| 11 |
|
|
the source code.
|
| 12 |
|
|
|
| 13 |
|
|
|
| 14 |
|
|
|
| 15 |
210 |
ja_rd |
\section{MIPS Software Simulator}
|
| 16 |
|
|
\label{sw_simulator}
|
| 17 |
|
|
|
| 18 |
|
|
Plasma project includes a MIPS-I simulator made by Steve Rhoads, called
|
| 19 |
|
|
'mlite.c'. According the the author, it was used as a golden model for the
|
| 20 |
|
|
construction of the cpu, the same as I have done.\\
|
| 21 |
|
|
I have made some modifications on Rhoads' code, mostly for logging, and
|
| 22 |
|
|
called the new program 'slite' ('/tools/slite/src/slite.c').\\
|
| 23 |
|
|
|
| 24 |
|
|
The most salient features are:
|
| 25 |
|
|
|
| 26 |
|
|
\begin{itemize}
|
| 27 |
|
|
\item Logs CPU state to a text file.
|
| 28 |
|
|
The format is identical to that of the vhdl test bench log.
|
| 29 |
|
|
You can select the code address that triggers the logging.
|
| 30 |
|
|
\item Echoes CPU UART output to the host console or to a log file.
|
| 31 |
|
|
\item Can be run in interactive mode (like a monitor).\\
|
| 32 |
|
|
Step by step execution, breakpoints, that kind of thing.
|
| 33 |
|
|
\item Can be run in batch (unattended) mode.\\
|
| 34 |
|
|
So that you can easily run a program to compare logs with the
|
| 35 |
|
|
vhdl test bench.
|
| 36 |
|
|
\item Does not simulate the cache at all.
|
| 37 |
|
|
\end{itemize}
|
| 38 |
|
|
|
| 39 |
|
|
Each code sample includes a DOS batch file named 'swsim.bat' that runs the
|
| 40 |
221 |
ja_rd |
simulator in batch mode. Note that the BAT file invokes a windows binary
|
| 41 |
|
|
which is included in the SVN repository and should be immediately useable
|
| 42 |
|
|
after checkout.\\
|
| 43 |
210 |
ja_rd |
|
| 44 |
|
|
The program includes usage help (a short description of the command line
|
| 45 |
221 |
ja_rd |
parameters). The source code (very simple and straighforward) is included in
|
| 46 |
210 |
ja_rd |
the project. The BAT files provide an usage example. And anyone who is
|
| 47 |
|
|
interested and finds trouble can always contact me.
|
| 48 |
|
|
|
| 49 |
|
|
For all these reasons I think it is not necessary to explain the simulator
|
| 50 |
|
|
in detail. Nothing to do with laziness, as you can see.\\
|
| 51 |
|
|
|
| 52 |
|
|
Many system parameters are hardcoded, including the log file name, the
|
| 53 |
|
|
simulated memory sizes and the code and data addresses.\\
|
| 54 |
|
|
|
| 55 |
|
|
The hardcoded log file name is "sw\_sim\_log.txt" and it is generated in the
|
| 56 |
|
|
same directory from which the simulator is run.\\
|
| 57 |
|
|
|
| 58 |
221 |
ja_rd |
\section{Configuration Package Builder Script build\_pkg.py}
|
| 59 |
|
|
\label{python_script}
|
| 60 |
|
|
|
| 61 |
|
|
This tools is used to build a simulation and synthesis configuration
|
| 62 |
|
|
package.
|
| 63 |
|
|
|
| 64 |
|
|
The generated package contains configuration constants used by the
|
| 65 |
|
|
simulation test bench \emph{'mips\_tb.vhdl'} and by the hardware demo
|
| 66 |
|
|
\emph{'c2sb\_demo.vhdl'}.
|
| 67 |
|
|
|
| 68 |
|
|
It too includes memory initialization constants containing object code,
|
| 69 |
|
|
used to initialize simulated and inferred memories, both in simulation
|
| 70 |
|
|
and in synthesis.
|
| 71 |
|
|
|
| 72 |
|
|
In the code samples, this script is used to generate two separate packages
|
| 73 |
|
|
for simulation and synthesis. Please refer to the makefiles for detailed
|
| 74 |
|
|
usage examples.
|
| 75 |
|
|
|
| 76 |
|
|
|
| 77 |
210 |
ja_rd |
\section{Conversion Script bin2hdl.py}
|
| 78 |
|
|
\label{python_script}
|
| 79 |
|
|
|
| 80 |
221 |
ja_rd |
|
| 81 |
|
|
\begin{figure*}[ht]
|
| 82 |
|
|
\begin{center}
|
| 83 |
|
|
{\small
|
| 84 |
|
|
\framebox[7in]{
|
| 85 |
|
|
\begin{minipage}[t]{6.0in}
|
| 86 |
|
|
|
| 87 |
|
|
NOTE: This script was used in previous versions of the project -- it came
|
| 88 |
|
|
in handy to initialize byte-sliced memories when the caches were under
|
| 89 |
|
|
development.
|
| 90 |
|
|
|
| 91 |
|
|
It has been abandoned because it was far too complicated and no longer
|
| 92 |
|
|
necessary. The VHDL
|
| 93 |
|
|
templates it refers to and the script itself have been moved from the /src
|
| 94 |
|
|
directory to their own subdirectory in /tools.
|
| 95 |
|
|
|
| 96 |
|
|
It is being retained in case it becomes useful again but it is no longer
|
| 97 |
|
|
used.
|
| 98 |
|
|
|
| 99 |
|
|
\end{minipage}
|
| 100 |
|
|
}
|
| 101 |
|
|
}
|
| 102 |
|
|
\end{center}
|
| 103 |
|
|
\label{lb}
|
| 104 |
|
|
\end{figure*}
|
| 105 |
|
|
|
| 106 |
|
|
|
| 107 |
|
|
|
| 108 |
210 |
ja_rd |
This Python script reads one or more binary files and 'inserts' them in a
|
| 109 |
|
|
vhdl template. It makes the
|
| 110 |
|
|
conversion from binary to vhdl strings and slices the data in byte columns,
|
| 111 |
|
|
as required by the RAM implementation (in which each byte in a word is
|
| 112 |
|
|
stored in a different RAM with a separate WE, 4 blocks in all).\\
|
| 113 |
|
|
|
| 114 |
|
|
The 3 binary files the script can read are the object code image, the
|
| 115 |
|
|
data image (initialized data sections) and a FLASH image.
|
| 116 |
|
|
|
| 117 |
|
|
The script inserts a number of simulation parameters in the template file,
|
| 118 |
|
|
as illustrated by the makefiles.\\
|
| 119 |
|
|
|
| 120 |
|
|
The makefiles of the code samples can be used as an example. The script code
|
| 121 |
|
|
is a bit convoluted but it is understandable if you do know Python,
|
| 122 |
|
|
and includes some usage instructions.\\
|
| 123 |
|
|
|
| 124 |
|
|
The vhdl templates (/src/*\_template.vhdl) have placeholder 'tags' that are
|
| 125 |
|
|
replaced with real application data by this script.
|
| 126 |
|
|
|
| 127 |
|
|
Some of the tags are these:
|
| 128 |
|
|
|
| 129 |
|
|
\begin{tabular}{ l l }
|
| 130 |
|
|
"@code0@" & : Contents of RAM block for slice 0 (lsb) of code\\
|
| 131 |
|
|
...\\
|
| 132 |
|
|
"@code3@" & : Contents of RAM block for slice 3 (msb) of code\\
|
| 133 |
|
|
"@code31@" & : Contents of RAM block for slices 3 \& 1 (odd) of code\\
|
| 134 |
|
|
"@code20@" & : Contents of RAM block for slices 2 \& 0 (odd) of code\\
|
| 135 |
|
|
"@data0@" & : Contents of RAM block for slice 0 (lsb) of data\\
|
| 136 |
|
|
...\\
|
| 137 |
|
|
"@data3@" & : Contents of RAM block for slice 3 (msb) of data\\
|
| 138 |
|
|
"@data31@" & : Contents of RAM block for slices 3 \& 1 (odd) of data\\
|
| 139 |
|
|
"@data20@" & : Contents of RAM block for slices 2 \& 0 (odd) of data\\
|
| 140 |
|
|
"@flash@" & : Contents of simulated FLASH\\
|
| 141 |
|
|
"@data-32bit@" & : Contents of 32-bit-wide RAM block of data\\
|
| 142 |
|
|
"@entity\_name@" & : Name of entity in target vhdl file\\
|
| 143 |
|
|
"@arch\_name@" & : Name of architecture in target vhdl file\\
|
| 144 |
|
|
"@code\_table\_size@" & : Size of RAM block to be used for code, in words\\
|
| 145 |
|
|
"@code\_addr\_size@" & : ceil(log2(@code\_table\_size@))\\
|
| 146 |
|
|
"@data\_table\_size@" & : Size of RAM block to be used for data, in words\\
|
| 147 |
|
|
"@data\_addr\_size@" & : ceil(log2(@data\_table\_size@))\\
|
| 148 |
|
|
\end{tabular}\\
|
| 149 |
|
|
|
| 150 |
|
|
There's a few more tags; they are described in the script source and the
|
| 151 |
|
|
usage help.\\
|
| 152 |
|
|
|
| 153 |
|
|
These placeholders will be replaced with object code or with data values
|
| 154 |
|
|
provided by the script command line (see makefiles).\\
|
| 155 |
|
|
|
| 156 |
|
|
The script has been used with Python 2.6.2. It should work with earlier
|
| 157 |
|
|
or later versions but I haven't tested.\\
|
| 158 |
|
|
|
| 159 |
|
|
Note: all of the above info is in the script itself, and can be shown
|
| 160 |
|
|
with command line option --h. Since it will be more up to date than this
|
| 161 |
|
|
doc, you're advised to read the script.\\
|
| 162 |
|
|
|