mirror of
https://github.com/johnwinans/rvalp.git
synced 2025-09-29 06:00:54 -04:00
Make dashes consistent.
This commit is contained in:
parent
eaeee37f2a
commit
3f73dcef96
@ -15,8 +15,8 @@
|
|||||||
\newglossaryentry{hexadecimal}
|
\newglossaryentry{hexadecimal}
|
||||||
{
|
{
|
||||||
name=hexadecimal,
|
name=hexadecimal,
|
||||||
description={A base--16 numbering system whose digits are
|
description={A base-16 numbering system whose digits are
|
||||||
0123456789abcdef. The hex digits (hits) are not case--sensitive}
|
0123456789abcdef. The hex digits (hits) are not case-sensitive}
|
||||||
}
|
}
|
||||||
\newglossaryentry{bit}
|
\newglossaryentry{bit}
|
||||||
{
|
{
|
||||||
@ -86,7 +86,7 @@
|
|||||||
description={The situation where the result of an addition or
|
description={The situation where the result of an addition or
|
||||||
subtraction operation is approaching positive or negative
|
subtraction operation is approaching positive or negative
|
||||||
infinity and exceeds the number of bits alloted to contain
|
infinity and exceeds the number of bits alloted to contain
|
||||||
the result. This is typically caused by high--order truncation}
|
the result. This is typically caused by high-order truncation}
|
||||||
}
|
}
|
||||||
\newglossaryentry{underflow}
|
\newglossaryentry{underflow}
|
||||||
{
|
{
|
||||||
@ -94,7 +94,7 @@
|
|||||||
description={The situation where the result of an addition or
|
description={The situation where the result of an addition or
|
||||||
subtraction operation is approaching zero and exceeds the number
|
subtraction operation is approaching zero and exceeds the number
|
||||||
of bits alloted to contain the result. This is typically
|
of bits alloted to contain the result. This is typically
|
||||||
caused by low--order truncation}
|
caused by low-order truncation}
|
||||||
}
|
}
|
||||||
|
|
||||||
\newglossaryentry{MachineLanguage}
|
\newglossaryentry{MachineLanguage}
|
||||||
|
@ -36,7 +36,7 @@ Computer storage systems are used to hold the data and instructions
|
|||||||
for the CPU.
|
for the CPU.
|
||||||
|
|
||||||
Types of computer storage can be classified into two categories.
|
Types of computer storage can be classified into two categories.
|
||||||
Volatile and non--volatile.
|
Volatile and non-volatile.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsubsection{Volatile Storage}
|
\subsubsection{Volatile Storage}
|
||||||
@ -68,18 +68,18 @@ in its main memory. As a result, optimizing the copying of data between
|
|||||||
the registers and main memory is a desirable trait of good programs.
|
the registers and main memory is a desirable trait of good programs.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsubsection{Non--Volatile Storage}
|
\subsubsection{Non-Volatile Storage}
|
||||||
|
|
||||||
Non--volatile storage is characterized by the fact that it will {\em NOT}
|
Non-volatile storage is characterized by the fact that it will {\em NOT}
|
||||||
lose its contents when it is powered off.
|
lose its contents when it is powered off.
|
||||||
|
|
||||||
Common types of non--volatile storage are disc drives, flash cards and USB
|
Common types of non-volatile storage are disc drives, flash cards and USB
|
||||||
drives. Prices can vary widely depending on size and transfer speeds.
|
drives. Prices can vary widely depending on size and transfer speeds.
|
||||||
|
|
||||||
It is typical for a computer system's non--volatile storage to operate
|
It is typical for a computer system's non-volatile storage to operate
|
||||||
more slowly than its main memory.
|
more slowly than its main memory.
|
||||||
|
|
||||||
This text is not particularly concerned with non--volatile storage.
|
This text is not particularly concerned with non-volatile storage.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{CPU}
|
\subsection{CPU}
|
||||||
@ -115,23 +115,23 @@ An ISA is typically expressed in terms of the specific meaning of
|
|||||||
each binary instruction that a CPU can recognize and how it will
|
each binary instruction that a CPU can recognize and how it will
|
||||||
process each one.
|
process each one.
|
||||||
|
|
||||||
The RISC--V ISA is defined as a set of modules. The purpose of
|
The RISC-V ISA is defined as a set of modules. The purpose of
|
||||||
dividing the ISA into modules is to allow an implementor to select which
|
dividing the ISA into modules is to allow an implementor to select which
|
||||||
features to incorporate into a CPU design.
|
features to incorporate into a CPU design.
|
||||||
|
|
||||||
Any given RISC--V implementation must provide one of the {\em base}
|
Any given RISC-V implementation must provide one of the {\em base}
|
||||||
modules and zero or more of the {\em extension} modules.
|
modules and zero or more of the {\em extension} modules.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{RV Base Modules}
|
\subsection{RV Base Modules}
|
||||||
\index{RV32I}
|
\index{RV32I}
|
||||||
The base modules are RV32I (32--bit general purpose),
|
The base modules are RV32I (32-bit general purpose),
|
||||||
RV32E (32--bit embedded), RV64I (64--bit general purpose)
|
RV32E (32-bit embedded), RV64I (64-bit general purpose)
|
||||||
and RV128I (128--bit general purpose).
|
and RV128I (128-bit general purpose).
|
||||||
|
|
||||||
These base modules provide the minimal functional set of integer operations
|
These base modules provide the minimal functional set of integer operations
|
||||||
needed to execute an application. The differing bit--widths address
|
needed to execute an application. The differing bit-widths address
|
||||||
the needs of different main--memory sizes.
|
the needs of different main-memory sizes.
|
||||||
|
|
||||||
This text primairly focuses on the RV32I base module and how to program it.
|
This text primairly focuses on the RV32I base module and how to program it.
|
||||||
|
|
||||||
@ -149,8 +149,8 @@ RISC-V extension modules may be included by an implementor interested
|
|||||||
in optimizing a design for one or more purposes.
|
in optimizing a design for one or more purposes.
|
||||||
|
|
||||||
Available extension modules include M (integer math), A (atomic),
|
Available extension modules include M (integer math), A (atomic),
|
||||||
F (32--bit floating point), D (64--bit floating point),
|
F (32-bit floating point), D (64-bit floating point),
|
||||||
Q (128--bit floating point), C (compressed size instructions) and others.
|
Q (128-bit floating point), C (compressed size instructions) and others.
|
||||||
|
|
||||||
The extension name {\em G} is used to represent the combined set of IMAFD
|
The extension name {\em G} is used to represent the combined set of IMAFD
|
||||||
extensions as it is expected to be a common combination.
|
extensions as it is expected to be a common combination.
|
||||||
@ -174,14 +174,14 @@ and 65536 bytes of memory.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\section{An Example Program}
|
\section{Executing a Program}
|
||||||
|
|
||||||
To observe the operation of our example computer an RV32I simulator
|
To observe the operation of our example computer an RV32I simulator
|
||||||
will be used that will print a message describing the status of the
|
will be used that will print a message describing the status of the
|
||||||
CPU and the instructions that it executes as it goes along.
|
CPU and the instructions that it executes as it goes along.
|
||||||
|
|
||||||
The process of executing an instruction is called the
|
The process of executing an instruction is called an
|
||||||
\index{instruction cycle} instruction cycle and it is comprised
|
\index{instruction cycle}{\em instruction cycle} and it is comprised
|
||||||
of an {\em instruction fetch} and an {\em instruction execute} phase.
|
of an {\em instruction fetch} and an {\em instruction execute} phase.
|
||||||
|
|
||||||
The status of the CPU is entirely embodied in the data values that
|
The status of the CPU is entirely embodied in the data values that
|
||||||
@ -203,6 +203,7 @@ or read from (or stored into) one or more of the registers.
|
|||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Instruction Fetch}
|
\subsection{Instruction Fetch}
|
||||||
|
\index{instruction fetch}
|
||||||
|
|
||||||
In order to {\em fetch} an instruction from the main memory the CPU
|
In order to {\em fetch} an instruction from the main memory the CPU
|
||||||
must have a method to identify which instruction should be fetched and
|
must have a method to identify which instruction should be fetched and
|
||||||
@ -252,6 +253,7 @@ See~\cite{codriscv:2017} for more information on computer organization.}
|
|||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Instruction Execute}
|
\subsection{Instruction Execute}
|
||||||
|
\index{instruction execute}
|
||||||
|
|
||||||
Once an instruction has been fetched by the CPU, it can be executed.
|
Once an instruction has been fetched by the CPU, it can be executed.
|
||||||
|
|
||||||
@ -335,7 +337,7 @@ This program listing illustrates a number of things:
|
|||||||
will always contain the vlaue zero. It can never be changed.)
|
will always contain the vlaue zero. It can never be changed.)
|
||||||
\item [0] The second addend is the number zero.
|
\item [0] The second addend is the number zero.
|
||||||
\item [\# set \ldots] Any text anywhere in a RISC-V assembly language
|
\item [\# set \ldots] Any text anywhere in a RISC-V assembly language
|
||||||
program that starts with the pound--sign is ignored by the assembler.
|
program that starts with the pound-sign is ignored by the assembler.
|
||||||
They are used to place a {\em comment} in the program to help
|
They are used to place a {\em comment} in the program to help
|
||||||
the reader better understand the motive of the programmer.
|
the reader better understand the motive of the programmer.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
@ -378,7 +380,7 @@ is less than 1700 lines of C++ and was written in one (long) afternoon.}
|
|||||||
It contains the address of the instruction that the CPU will execute.
|
It contains the address of the instruction that the CPU will execute.
|
||||||
After each instruction, the \reg{pc} will either advance four bytes
|
After each instruction, the \reg{pc} will either advance four bytes
|
||||||
ahead or be set to another value by a branch instruction as discussed above.
|
ahead or be set to another value by a branch instruction as discussed above.
|
||||||
\item [$\ell$ 9] A four--byte instruction is fetched from memory at the address
|
\item [$\ell$ 9] A four-byte instruction is fetched from memory at the address
|
||||||
in the \reg{pc} register, is decoded and printed. From left to right
|
in the \reg{pc} register, is decoded and printed. From left to right
|
||||||
the fields shown on this line are:
|
the fields shown on this line are:
|
||||||
|
|
||||||
@ -395,7 +397,7 @@ is less than 1700 lines of C++ and was written in one (long) afternoon.}
|
|||||||
holds one of the two addends of the operation.
|
holds one of the two addends of the operation.
|
||||||
\item [0] The \reg{imm} field of the addi instruction that
|
\item [0] The \reg{imm} field of the addi instruction that
|
||||||
holds the second of the two addends of the operation.
|
holds the second of the two addends of the operation.
|
||||||
\item [\# \ldots] A simulator--generated comment that exaplains
|
\item [\# \ldots] A simulator-generated comment that exaplains
|
||||||
what the instruction is doing. For this instruction it indicates
|
what the instruction is doing. For this instruction it indicates
|
||||||
that \reg{x28} will have the value zero stored into it as a result
|
that \reg{x28} will have the value zero stored into it as a result
|
||||||
of performing the addition: $0+0$.
|
of performing the addition: $0+0$.
|
||||||
|
@ -32,16 +32,16 @@ exhaustive, and do not form part of our licenses.
|
|||||||
applying our licenses so that the public can reuse the
|
applying our licenses so that the public can reuse the
|
||||||
material as expected. Licensors should clearly mark any
|
material as expected. Licensors should clearly mark any
|
||||||
material not subject to the license. This includes other
|
material not subject to the license. This includes other
|
||||||
CC--licensed material, or material used under an exception or
|
CC-licensed material, or material used under an exception or
|
||||||
limitation to copyright. More considerations for licensors:
|
limitation to copyright. More considerations for licensors:
|
||||||
\url{http://wiki.creativecommons.org/Considerations_for_licensors}
|
\url{http://wiki.creativecommons.org/Considerations_for_licensors}
|
||||||
|
|
||||||
Considerations for the public: By using one of our public
|
Considerations for the public: By using one of our public
|
||||||
licenses, a licensor grants the public permission to use the
|
licenses, a licensor grants the public permission to use the
|
||||||
licensed material under specified terms and conditions. If
|
licensed material under specified terms and conditions. If
|
||||||
the licensor's permission is not necessary for any reason--for
|
the licensor's permission is not necessary for any reason-for
|
||||||
example, because of any applicable exception or limitation to
|
example, because of any applicable exception or limitation to
|
||||||
copyright--then that use is not regulated by the license. Our
|
copyright-then that use is not regulated by the license. Our
|
||||||
licenses grant only permissions under copyright and certain
|
licenses grant only permissions under copyright and certain
|
||||||
other rights that a licensor has authority to grant. Use of
|
other rights that a licensor has authority to grant. Use of
|
||||||
the licensed material may still be restricted for other
|
the licensed material may still be restricted for other
|
||||||
|
@ -60,7 +60,7 @@ $10^2$ & $10^1$ & $10^0$ & $2^7$ & $2^6$ & $2^5$ & $2^4$ & $2^3$ & $2^2$ & $2^1$
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
One way to look at this table is on a per--row basis where each place
|
One way to look at this table is on a per-row basis where each place
|
||||||
value is represented by the base raised to the power of the place value
|
value is represented by the base raised to the power of the place value
|
||||||
position (shown in the column headings.) This is useful when
|
position (shown in the column headings.) This is useful when
|
||||||
converting arbitrary values between bases. For example to interpret
|
converting arbitrary values between bases. For example to interpret
|
||||||
@ -72,9 +72,9 @@ And the same for the hexadecimal value:
|
|||||||
\[ 0 \times 16^1 + 3 \times 16^0 = 3_{10} \]
|
\[ 0 \times 16^1 + 3 \times 16^0 = 3_{10} \]
|
||||||
|
|
||||||
|
|
||||||
Another way to look at this table is on a per--column basis. When
|
Another way to look at this table is on a per-column basis. When
|
||||||
tasked with drawing such a table by hand, it might be useful
|
tasked with drawing such a table by hand, it might be useful
|
||||||
to observe that, just as in decimal, the right--most column will
|
to observe that, just as in decimal, the right-most column will
|
||||||
cycle through all of the values represented in the chosen base
|
cycle through all of the values represented in the chosen base
|
||||||
then cycle back to zero and repeat. (For example, in binary this
|
then cycle back to zero and repeat. (For example, in binary this
|
||||||
pattern is 0-1-0-1-0-1-0-\ldots) The next column in each base
|
pattern is 0-1-0-1-0-1-0-\ldots) The next column in each base
|
||||||
@ -138,7 +138,7 @@ To convert from binary to decimal, put the decimal value of the place values
|
|||||||
0 0 0 1 1 0 1 1
|
0 0 0 1 1 0 1 1
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Now sum the place--values that are expressed in decimal for each
|
Now sum the place-values that are expressed in decimal for each
|
||||||
bit with the value of 1: $16+8+2+1$. The integer binary value
|
bit with the value of 1: $16+8+2+1$. The integer binary value
|
||||||
$00011011_2$ represents the decimal value $27_{10}$.
|
$00011011_2$ represents the decimal value $27_{10}$.
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ Decimal: 4+2 =6 8+4+ 1=13 8+ 2 =10 8+4+2 =14
|
|||||||
After the summing, convert each decimal value to hex. The decimal
|
After the summing, convert each decimal value to hex. The decimal
|
||||||
values from 0--9 are the same values in hex. Because we don't have any
|
values from 0--9 are the same values in hex. Because we don't have any
|
||||||
more numerals to represent the values from 10-15, we use the first 6
|
more numerals to represent the values from 10-15, we use the first 6
|
||||||
letters (See the right--most column of \autoref{Figure:integers}.)
|
letters (See the right-most column of \autoref{Figure:integers}.)
|
||||||
Fortunately there are only six hex mappings involving letters. Thus
|
Fortunately there are only six hex mappings involving letters. Thus
|
||||||
it is reasonable to memorize them.
|
it is reasonable to memorize them.
|
||||||
|
|
||||||
@ -178,13 +178,13 @@ Hex: 6 D A E
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsubsection{From Hexadecimal to Binary}
|
\subsubsection{From Hexadecimal to Binary}
|
||||||
|
|
||||||
Again, the four--bit mapping between binary and hex makes this
|
Again, the four-bit mapping between binary and hex makes this
|
||||||
task as straight forward as using a look-up table.
|
task as straight forward as using a look-up table.
|
||||||
|
|
||||||
For each \gls{hit} (Hex digIT), translate it to its unique four--bit pattern.
|
For each \gls{hit} (Hex digIT), translate it to its unique four-bit pattern.
|
||||||
Perform this task either by memorizing each of the 16 patterns
|
Perform this task either by memorizing each of the 16 patterns
|
||||||
or by converting each hit to decimal first and then converting
|
or by converting each hit to decimal first and then converting
|
||||||
each four--bit binary value to decimal using the place--value summing
|
each four-bit binary value to decimal using the place-value summing
|
||||||
method discussed in \autoref{section:bindec}.
|
method discussed in \autoref{section:bindec}.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
@ -233,7 +233,7 @@ the \acrshort{lsb} on the bottom line: $010011010010_2$.
|
|||||||
\subsubsection{From Decimal to Hex}
|
\subsubsection{From Decimal to Hex}
|
||||||
|
|
||||||
Conversion from decimal to hex can be done by using the place
|
Conversion from decimal to hex can be done by using the place
|
||||||
values for base--16 and the same math as from decimal to binary
|
values for base-16 and the same math as from decimal to binary
|
||||||
or by first converting the decimal value to binary and then
|
or by first converting the decimal value to binary and then
|
||||||
from binary to hex by using the methods discussed above.
|
from binary to hex by using the methods discussed above.
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ a conversion by way of binary is quite straight forward.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Addition of Binary Numbers}
|
\subsection{Addition of Binary Numbers}
|
||||||
|
|
||||||
The addition of binary numbers can be performed long--hand the
|
The addition of binary numbers can be performed long-hand the
|
||||||
same way decimal addition is taught in grade school. In fact binary
|
same way decimal addition is taught in grade school. In fact binary
|
||||||
addition is easier since it only involves adding 0 or 1.
|
addition is easier since it only involves adding 0 or 1.
|
||||||
|
|
||||||
@ -372,7 +372,7 @@ signed and unsigned numbers.
|
|||||||
\enote{This section needs more examples of subtracting
|
\enote{This section needs more examples of subtracting
|
||||||
signed an unsigned numbers and a discussion on how
|
signed an unsigned numbers and a discussion on how
|
||||||
signedness is not relevant until the results are interpreted.
|
signedness is not relevant until the results are interpreted.
|
||||||
For example adding $-4+ -8=-12$ using two 8--bit numbers
|
For example adding $-4+ -8=-12$ using two 8-bit numbers
|
||||||
is the same as adding $252+248=500$ and truncating the result
|
is the same as adding $252+248=500$ and truncating the result
|
||||||
to 244.}
|
to 244.}
|
||||||
|
|
||||||
@ -413,10 +413,10 @@ addition and subtraction.}
|
|||||||
\subsection{Logical/Boolean Functions}
|
\subsection{Logical/Boolean Functions}
|
||||||
|
|
||||||
Unlike addition and subtraction, boolean functions apply
|
Unlike addition and subtraction, boolean functions apply
|
||||||
on a per--bit basis.
|
on a per-bit basis.
|
||||||
%in that they do not impact neighboring bits.
|
%in that they do not impact neighboring bits.
|
||||||
%by generating things like a carry or a borrow.
|
%by generating things like a carry or a borrow.
|
||||||
When applied to multi--bit values, each bit position is operated upon
|
When applied to multi-bit values, each bit position is operated upon
|
||||||
independantly of the other bits.
|
independantly of the other bits.
|
||||||
\enote{This is unclear. Need to define bit positions and probably
|
\enote{This is unclear. Need to define bit positions and probably
|
||||||
should add basic truth table diagrams.}
|
should add basic truth table diagrams.}
|
||||||
@ -562,9 +562,9 @@ needed to represent the entire, exact, value of a number.
|
|||||||
|
|
||||||
\item In binary we have $mantissa \times 2^{exponent}$
|
\item In binary we have $mantissa \times 2^{exponent}$
|
||||||
|
|
||||||
\item IEEE--754 format requires binary numbers to be {\em normalized} to
|
\item IEEE-754 format requires binary numbers to be {\em normalized} to
|
||||||
$1.significand \times 2^{exponent}$ where the {\em significand}
|
$1.significand \times 2^{exponent}$ where the {\em significand}
|
||||||
is the portion of the {\em mantissa} that is to the right of the binary--point.
|
is the portion of the {\em mantissa} that is to the right of the binary-point.
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item The unnormalized binary value of $-2.625$ is $10.101$
|
\item The unnormalized binary value of $-2.625$ is $10.101$
|
||||||
@ -643,10 +643,10 @@ normalized values by adding 1 to the significand.
|
|||||||
|
|
||||||
\begin{tabular}{|l|l|l|}
|
\begin{tabular}{|l|l|l|}
|
||||||
\hline
|
\hline
|
||||||
& IEEE754 32--bit & IEEE754 64--bit \\
|
& IEEE754 32-bit & IEEE754 64-bit \\
|
||||||
\hline
|
\hline
|
||||||
sign & 1 bit & 1 bit \\
|
sign & 1 bit & 1 bit \\
|
||||||
exponent & 8 bits (excess--127) & 11 bits (excess-1023) \\
|
exponent & 8 bits (excess-127) & 11 bits (excess-1023) \\
|
||||||
mantissa & 23 bits & 52 bits \\
|
mantissa & 23 bits & 52 bits \\
|
||||||
max exponent & 127 & 1023 \\
|
max exponent & 127 & 1023 \\
|
||||||
min exponent & -126 & -1022 \\
|
min exponent & -126 & -1022 \\
|
||||||
@ -667,21 +667,21 @@ This is why we use excess notation and locate the significand's sign bit on
|
|||||||
the left of the exponent.
|
the left of the exponent.
|
||||||
|
|
||||||
\item Note that zero is a special case number. Recall that a normalized
|
\item Note that zero is a special case number. Recall that a normalized
|
||||||
number has an implied 1--bit to the left of the significand\ldots\ which
|
number has an implied 1-bit to the left of the significand\ldots\ which
|
||||||
means that there is no way to represent zero!
|
means that there is no way to represent zero!
|
||||||
Zero is represented by an exponent of all--zeros and a significand of
|
Zero is represented by an exponent of all-zeros and a significand of
|
||||||
all--zeros. This definition allows for a positive and a negative zero
|
all-zeros. This definition allows for a positive and a negative zero
|
||||||
if we observe that the sign can be either 1 or 0.
|
if we observe that the sign can be either 1 or 0.
|
||||||
|
|
||||||
\item On the number-line, numbers between zero and the smallest fraction in
|
\item On the number-line, numbers between zero and the smallest fraction in
|
||||||
either direction are in the {\em \gls{underflow}} areas.
|
either direction are in the {\em \gls{underflow}} areas.
|
||||||
\enote{Need to add the standard lecture numberline diagram showing
|
\enote{Need to add the standard lecture numberline diagram showing
|
||||||
where the over/under--flow areas are and why.}
|
where the over/under-flow areas are and why.}
|
||||||
|
|
||||||
\item On the number line, numbers greater than the mantissa of all--ones and the
|
\item On the number line, numbers greater than the mantissa of all-ones and the
|
||||||
largest exponent allowed are in the {\em \gls{overflow}} areas.
|
largest exponent allowed are in the {\em \gls{overflow}} areas.
|
||||||
|
|
||||||
\item Note that numbers have a higher resolution on the number--line when the
|
\item Note that numbers have a higher resolution on the number line when the
|
||||||
exponent is smaller.
|
exponent is smaller.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
@ -725,10 +725,10 @@ These rounding errors can be exaggerated when the number we multiply
|
|||||||
the \verb@x.f@ value by is, itself, something that can not be accurately
|
the \verb@x.f@ value by is, itself, something that can not be accurately
|
||||||
represented in IEEE
|
represented in IEEE
|
||||||
form.\footnote{Applications requiring accurate decimal values, such as
|
form.\footnote{Applications requiring accurate decimal values, such as
|
||||||
financial accounting systems, can use a packed--decimal numeric format
|
financial accounting systems, can use a packed-decimal numeric format
|
||||||
to avoid unexpected oddities caused by the use of binary numbers.}
|
to avoid unexpected oddities caused by the use of binary numbers.}
|
||||||
\enote{In a lecture one would show that one tenth is a repeating
|
\enote{In a lecture one would show that one tenth is a repeating
|
||||||
non--terminating binary number that gets truncated. This discussion
|
non-terminating binary number that gets truncated. This discussion
|
||||||
should be reproduced here in text form.}
|
should be reproduced here in text form.}
|
||||||
|
|
||||||
For example, if we multiply our \verb@x.f@ value by $\frac{1}{10}$ each time,
|
For example, if we multiply our \verb@x.f@ value by $\frac{1}{10}$ each time,
|
||||||
@ -743,7 +743,7 @@ In order to use floating point numbers in a program without causing
|
|||||||
excessive rounding problems an algorithm can be redesigned such that the
|
excessive rounding problems an algorithm can be redesigned such that the
|
||||||
accumulation is eliminated.
|
accumulation is eliminated.
|
||||||
This example is similar to the previous one, but this time we recalculate the
|
This example is similar to the previous one, but this time we recalculate the
|
||||||
desired value from a known--accurate integer value.
|
desired value from a known-accurate integer value.
|
||||||
Some rounding errors remain present, but they can not accumulate.
|
Some rounding errors remain present, but they can not accumulate.
|
||||||
|
|
||||||
\listing{errorcompensation.c}{Accumulation of Error}
|
\listing{errorcompensation.c}{Accumulation of Error}
|
||||||
|
@ -36,7 +36,7 @@ my shelves) such as:
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
One way or another all of them discuss each CPU instruction in excruciating detail
|
One way or another all of them discuss each CPU instruction in excruciating detail
|
||||||
with both a logical and narrative description. For RISC--V this is
|
with both a logical and narrative description. For RISC-V this is
|
||||||
also the case for the {\em RISC-V Reader}\cite{riscvreader:2017} and the
|
also the case for the {\em RISC-V Reader}\cite{riscvreader:2017} and the
|
||||||
{\em Computer Organization and Design RISC-V Edition}\cite{codriscv:2017} books
|
{\em Computer Organization and Design RISC-V Edition}\cite{codriscv:2017} books
|
||||||
and is also present in this text (I consider that to be the minimal
|
and is also present in this text (I consider that to be the minimal
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
\section{Introduction}
|
\section{Introduction}
|
||||||
|
|
||||||
\enote{Discuss what the IMAFD, G and other ISA extensions mean as well as the
|
\enote{Discuss what the IMAFD, G and other ISA extensions mean as well as the
|
||||||
32, 64 and 128--bit versions.}
|
32, 64 and 128-bit versions.}
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -17,7 +17,7 @@ When discussing instructions, the following abbreviations/notations are used:
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{XLEN}
|
\subsection{XLEN}
|
||||||
|
|
||||||
XLEN represents the bit--length of an \reg{x} register in the machine architecture.
|
XLEN represents the bit-length of an \reg{x} register in the machine architecture.
|
||||||
Possible values are 32, 64 and 128.
|
Possible values are 32, 64 and 128.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -42,7 +42,7 @@ to the left of it to 1 as well.
|
|||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxSignExtendedPicture{32}{10100000000000000010}
|
\DrawBitBoxSignExtendedPicture{32}{10100000000000000010}
|
||||||
\captionof{figure}{Sign--extending a negative integer from 20 bits to 32 bits.}
|
\captionof{figure}{Sign-extending a negative integer from 20 bits to 32 bits.}
|
||||||
\label{Figure:SignExtendNegative}
|
\label{Figure:SignExtendNegative}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ value to the left will set all the new bits to the left of it to 0 as well.
|
|||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxSignExtendedPicture{32}{01000000000000000010}
|
\DrawBitBoxSignExtendedPicture{32}{01000000000000000010}
|
||||||
\captionof{figure}{Sign--extending a positive integer from 20 bits to 32 bits.}
|
\captionof{figure}{Sign-extending a positive integer from 20 bits to 32 bits.}
|
||||||
\label{Figure:SignExtendPositive}
|
\label{Figure:SignExtendPositive}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@ -72,15 +72,15 @@ This is used to convert an unsigned integer value expressed using some number of
|
|||||||
bits to a larger number of bits by adding more bits to the left. In doing so,
|
bits to a larger number of bits by adding more bits to the left. In doing so,
|
||||||
the new bits added will all be set to zero. As is the case with \verb@sx(val)@,
|
the new bits added will all be set to zero. As is the case with \verb@sx(val)@,
|
||||||
{\em val} represents the \acrshort{lsb}s of the final value.
|
{\em val} represents the \acrshort{lsb}s of the final value.
|
||||||
\autoref{Figure:ZeroExtend} illustrates zero--extending a 20--bit {\em val} to the
|
\autoref{Figure:ZeroExtend} illustrates zero-extending a 20-bit {\em val} to the
|
||||||
left to form a 32--bit fullword.
|
left to form a 32-bit fullword.
|
||||||
|
|
||||||
For more on binary numbers see \autoref{chapter:NumberSystems}.
|
For more on binary numbers see \autoref{chapter:NumberSystems}.
|
||||||
|
|
||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxZeroExtendedPicture{32}{10000000000000000010}
|
\DrawBitBoxZeroExtendedPicture{32}{10000000000000000010}
|
||||||
\captionof{figure}{Zero--extending an unsigned integer from 20 bits to 32 bits.}
|
\captionof{figure}{Zero-extending an unsigned integer from 20 bits to 32 bits.}
|
||||||
\label{Figure:ZeroExtend}
|
\label{Figure:ZeroExtend}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@ -99,13 +99,13 @@ value.
|
|||||||
In this case it is necessary to append zeros to the right to convert \verb@val@ to
|
In this case it is necessary to append zeros to the right to convert \verb@val@ to
|
||||||
the longer value.
|
the longer value.
|
||||||
|
|
||||||
\autoref{Figure:ZeroRightExtend} illustrates converting a 20--bit {\em val} to
|
\autoref{Figure:ZeroRightExtend} illustrates converting a 20-bit {\em val} to
|
||||||
a 32--bit fullword.
|
a 32-bit fullword.
|
||||||
|
|
||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{01000000000000000010}{12}
|
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{01000000000000000010}{12}
|
||||||
\captionof{figure}{Zero--extending an integer to the right from 20 bits to 32 bits.}
|
\captionof{figure}{Zero-extending an integer to the right from 20 bits to 32 bits.}
|
||||||
\label{Figure:ZeroRightExtend}
|
\label{Figure:ZeroRightExtend}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ a 32--bit fullword.
|
|||||||
%\DrawBitBoxUnsignedPicture{01000000000000000010}\\
|
%\DrawBitBoxUnsignedPicture{01000000000000000010}\\
|
||||||
%\DrawBitBoxUnsignedPicture{01000000000000000010000000000000}
|
%\DrawBitBoxUnsignedPicture{01000000000000000010000000000000}
|
||||||
%}
|
%}
|
||||||
%\captionof{figure}{Zero--extending an integer to the right from 20 bits to 32 bits.}
|
%\captionof{figure}{Zero-extending an integer to the right from 20 bits to 32 bits.}
|
||||||
%\label{Figure:ZeroRightExtend}
|
%\label{Figure:ZeroRightExtend}
|
||||||
%\end{figure}
|
%\end{figure}
|
||||||
|
|
||||||
@ -124,17 +124,17 @@ a 32--bit fullword.
|
|||||||
\subsection{Sign Entended Left and Zero Extend Right}
|
\subsection{Sign Entended Left and Zero Extend Right}
|
||||||
\label{extension:slzr}
|
\label{extension:slzr}
|
||||||
|
|
||||||
Some instructions such as the J--type (see \autoref{insnformat:jtype}) include
|
Some instructions such as the J-type (see \autoref{insnformat:jtype}) include
|
||||||
immediate operands that are extended in both directions.
|
immediate operands that are extended in both directions.
|
||||||
|
|
||||||
\autoref{Figure:slzrPositive} and \autoref{Figure:slzrNegative}
|
\autoref{Figure:slzrPositive} and \autoref{Figure:slzrNegative}
|
||||||
illustrates zero--extending a 20--bit negative number one bit to the right
|
illustrates zero-extending a 20-bit negative number one bit to the right
|
||||||
and sign--extending it 11 bits to the left:
|
and sign-extending it 11 bits to the left:
|
||||||
|
|
||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{01000100011101001001}{1}
|
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{01000100011101001001}{1}
|
||||||
\captionof{figure}{Sign--extending a positive 20--bit number
|
\captionof{figure}{Sign-extending a positive 20-bit number
|
||||||
11 bits to the left and one bit to the right.}
|
11 bits to the left and one bit to the right.}
|
||||||
\label{Figure:slzrPositive}
|
\label{Figure:slzrPositive}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -142,7 +142,7 @@ and sign--extending it 11 bits to the left:
|
|||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\centering
|
\centering
|
||||||
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11000100011101001001}{1}
|
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11000100011101001001}{1}
|
||||||
\captionof{figure}{Sign--extending a negative 20--bit number
|
\captionof{figure}{Sign-extending a negative 20-bit number
|
||||||
11 bits to the left and one bit to the right.}
|
11 bits to the left and one bit to the right.}
|
||||||
\label{Figure:slzrNegative}
|
\label{Figure:slzrNegative}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -152,12 +152,12 @@ and sign--extending it 11 bits to the left:
|
|||||||
\subsection{m8(addr)}
|
\subsection{m8(addr)}
|
||||||
\label{memory:m8}
|
\label{memory:m8}
|
||||||
|
|
||||||
The contents of an 8--bit value in memory at address {\em addr}.
|
The contents of an 8-bit value in memory at address {\em addr}.
|
||||||
|
|
||||||
Given the contents of the memory dump shown in
|
Given the contents of the memory dump shown in
|
||||||
\autoref{Figure:SampleMemoryContents},
|
\autoref{Figure:SampleMemoryContents},
|
||||||
\verb@m8(42)@ refers to the memory location at address \verb@42@$_{16}$
|
\verb@m8(42)@ refers to the memory location at address \verb@42@$_{16}$
|
||||||
that currently contains the 8--bit value \verb@fc@$_{16}$.
|
that currently contains the 8-bit value \verb@fc@$_{16}$.
|
||||||
|
|
||||||
The \verb@mn(addr)@ notation can be used to refer to memory that is being
|
The \verb@mn(addr)@ notation can be used to refer to memory that is being
|
||||||
read or written depending on the context.
|
read or written depending on the context.
|
||||||
@ -193,7 +193,7 @@ Note that {\em source} and {\em dest} are typically registers.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{m16(addr)}
|
\subsection{m16(addr)}
|
||||||
|
|
||||||
The contents of an 16--bit little--endian value in memory at address {\em addr}.
|
The contents of an 16-bit little-endian value in memory at address {\em addr}.
|
||||||
|
|
||||||
Given the contents of the memory dump shown in
|
Given the contents of the memory dump shown in
|
||||||
\autoref{Figure:SampleMemoryContents},
|
\autoref{Figure:SampleMemoryContents},
|
||||||
@ -204,7 +204,7 @@ that currently contains \verb@65fc@$_{16}$. See also~\autoref{memory:m8}.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{m32(addr)}
|
\subsection{m32(addr)}
|
||||||
|
|
||||||
The contents of an 32--bit little--endian value in memory at address {\em addr}.
|
The contents of an 32-bit little-endian value in memory at address {\em addr}.
|
||||||
|
|
||||||
Given the contents of the memory dump shown in
|
Given the contents of the memory dump shown in
|
||||||
\autoref{Figure:SampleMemoryContents},
|
\autoref{Figure:SampleMemoryContents},
|
||||||
@ -215,7 +215,7 @@ See also~\autoref{memory:m8}.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{m64(addr)}
|
\subsection{m64(addr)}
|
||||||
|
|
||||||
The contents of an 64--bit little--endian value in memory at address {\em addr}.
|
The contents of an 64-bit little-endian value in memory at address {\em addr}.
|
||||||
|
|
||||||
Given the contents of the memory dump shown in
|
Given the contents of the memory dump shown in
|
||||||
\autoref{Figure:SampleMemoryContents},
|
\autoref{Figure:SampleMemoryContents},
|
||||||
@ -226,7 +226,7 @@ See also~\autoref{memory:m8}.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{m128(addr)}
|
\subsection{m128(addr)}
|
||||||
|
|
||||||
The contents of an 128--bit little--endian value in memory at
|
The contents of an 128-bit little-endian value in memory at
|
||||||
address {\em addr}.
|
address {\em addr}.
|
||||||
|
|
||||||
Given the contents of the memory dump shown in
|
Given the contents of the memory dump shown in
|
||||||
@ -253,17 +253,17 @@ The current value of the program counter.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{rd}
|
\subsection{rd}
|
||||||
|
|
||||||
An x--register used to store the result of instruction.
|
An x-register used to store the result of instruction.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{rs1}
|
\subsection{rs1}
|
||||||
|
|
||||||
An x--register value used as a source operand for an instruction.
|
An x-register value used as a source operand for an instruction.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{rs2}
|
\subsection{rs2}
|
||||||
|
|
||||||
An x--register value used as a source operand for an instruction.
|
An x-register value used as a source operand for an instruction.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{imm}
|
\subsection{imm}
|
||||||
@ -274,7 +274,7 @@ to the fact that the operand is stored within an instruction.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{rsN[h:l]}
|
\subsection{rsN[h:l]}
|
||||||
|
|
||||||
The value of bits from {\em h} through {\em l} of x--register rsN.
|
The value of bits from {\em h} through {\em l} of x-register rsN.
|
||||||
For example: rs1[15:0] refers to the contents of
|
For example: rs1[15:0] refers to the contents of
|
||||||
the 16 \acrshort{lsb}s of rs1.
|
the 16 \acrshort{lsb}s of rs1.
|
||||||
|
|
||||||
@ -326,7 +326,7 @@ This simplification can also allow it operate faster.
|
|||||||
\subsection{U Type}
|
\subsection{U Type}
|
||||||
\label{insnformat:utype}
|
\label{insnformat:utype}
|
||||||
|
|
||||||
The U--Type format is used for instructions that use a 20--bit immediate operand
|
The U-Type format is used for instructions that use a 20-bit immediate operand
|
||||||
and a destination register.
|
and a destination register.
|
||||||
|
|
||||||
\DrawInsnTypeUTikz{11010110000000000011001010110111}
|
\DrawInsnTypeUTikz{11010110000000000011001010110111}
|
||||||
@ -335,9 +335,9 @@ The \reg{rd} field contains an \reg{x} register number to be set to a value that
|
|||||||
depends on the instruction.
|
depends on the instruction.
|
||||||
|
|
||||||
The imm field
|
The imm field
|
||||||
contains a 20--bit value that will be converted into \Gls{xlen} bits by
|
contains a 20-bit value that will be converted into \Gls{xlen} bits by
|
||||||
using the {\em imm} operand for bits 31:12 and then sign-extending it
|
using the {\em imm} operand for bits 31:12 and then sign-extending it
|
||||||
to the left\footnote{When XLEN is larger than 32.} and zero--extending
|
to the left\footnote{When XLEN is larger than 32.} and zero-extending
|
||||||
the LSBs as discussed in \autoref{extension:zr}.
|
the LSBs as discussed in \autoref{extension:zr}.
|
||||||
|
|
||||||
If \Gls{xlen}=32 then the imm value in this example will be
|
If \Gls{xlen}=32 then the imm value in this example will be
|
||||||
@ -345,7 +345,7 @@ converted as shown below.
|
|||||||
|
|
||||||
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11010110000000000011}{12}
|
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11010110000000000011}{12}
|
||||||
|
|
||||||
Notice that the 20--bits of the imm field are mapped in the same order and
|
Notice that the 20-bits of the imm field are mapped in the same order and
|
||||||
in the same relative position that they appear in the instruction when
|
in the same relative position that they appear in the instruction when
|
||||||
they are used to create the value of the immediate operand.
|
they are used to create the value of the immediate operand.
|
||||||
Shifting the imm value to the left, into the ``upper bits'' of the immediate
|
Shifting the imm value to the left, into the ``upper bits'' of the immediate
|
||||||
@ -365,8 +365,8 @@ same two's complement integer value by extending the sign to the left.
|
|||||||
\subsection{J Type}
|
\subsection{J Type}
|
||||||
\label{insnformat:jtype}
|
\label{insnformat:jtype}
|
||||||
|
|
||||||
The J--type format is used for instructions that use a 20--bit immediate operand
|
The J-type format is used for instructions that use a 20-bit immediate operand
|
||||||
and a destination register. It is similar to the U--type. However, the immediate
|
and a destination register. It is similar to the U-type. However, the immediate
|
||||||
operand is constructed by arranging the {\em imm} bits in a different manner.
|
operand is constructed by arranging the {\em imm} bits in a different manner.
|
||||||
|
|
||||||
\DrawInsnTypeJTikz{00111001001110000001001111101111}
|
\DrawInsnTypeJTikz{00111001001110000001001111101111}
|
||||||
@ -375,16 +375,16 @@ The \reg{rd} field contains an \reg{x} register number to be set to a value that
|
|||||||
depends on the instruction.
|
depends on the instruction.
|
||||||
|
|
||||||
|
|
||||||
In the J--type format the 20 {\em imm} bits are arranged such
|
In the J-type format the 20 {\em imm} bits are arranged such
|
||||||
that they represent the ``lower'' portion of the immediate value. Unlike
|
that they represent the ``lower'' portion of the immediate value. Unlike
|
||||||
the U--type
|
the U-type
|
||||||
instructions, the J-type requires the bits to be re--ordered and shifted
|
instructions, the J-type requires the bits to be re-ordered and shifted
|
||||||
to the right before they are used.\footnote{The reason that the J--type
|
to the right before they are used.\footnote{The reason that the J-type
|
||||||
bits are reordered like this is because it simplifies the implementation of
|
bits are reordered like this is because it simplifies the implementation of
|
||||||
hardware as discussed in \autoref{section:EncodingFormats}.}
|
hardware as discussed in \autoref{section:EncodingFormats}.}
|
||||||
|
|
||||||
The example above shows that the bit positions in the {\em imm} field
|
The example above shows that the bit positions in the {\em imm} field
|
||||||
description. We see that the 20 {\em imm} bits are re--ordered according to:
|
description. We see that the 20 {\em imm} bits are re-ordered according to:
|
||||||
[20\textbar10:1\textbar11\textbar19:12].
|
[20\textbar10:1\textbar11\textbar19:12].
|
||||||
This means that the \acrshort{msb} of the {\em imm} field is to be placed
|
This means that the \acrshort{msb} of the {\em imm} field is to be placed
|
||||||
into bit 20 of the immediate integer value ultimately used by the instruction
|
into bit 20 of the immediate integer value ultimately used by the instruction
|
||||||
@ -393,8 +393,8 @@ The next bit to the right in the {\em imm} field is to be placed into bit 10 of
|
|||||||
the immediate value and so on.
|
the immediate value and so on.
|
||||||
|
|
||||||
After the {\em imm} bits are re-positioned into bits 20:1 of the immediate value
|
After the {\em imm} bits are re-positioned into bits 20:1 of the immediate value
|
||||||
being constructed, a zero--bit will be added to the \acrshort{lsb}
|
being constructed, a zero-bit will be added to the \acrshort{lsb}
|
||||||
and the value in bit--position 20 will be replicated to sign--extend the
|
and the value in bit-position 20 will be replicated to sign-extend the
|
||||||
value to \Gls{xlen} bits as discussed in \autoref{extension:slzr}.
|
value to \Gls{xlen} bits as discussed in \autoref{extension:slzr}.
|
||||||
|
|
||||||
If \Gls{xlen}=32 then the {\em imm} value in this example will be converted as
|
If \Gls{xlen}=32 then the {\em imm} value in this example will be converted as
|
||||||
@ -409,7 +409,7 @@ shown below.
|
|||||||
%$0000000000000000000000000000000000000000000010000001101110010010_2$
|
%$0000000000000000000000000000000000000000000010000001101110010010_2$
|
||||||
%(\verb@0000000000081b92@$_16$).
|
%(\verb@0000000000081b92@$_16$).
|
||||||
|
|
||||||
A J--type example with a negative imm field:
|
A J-type example with a negative imm field:
|
||||||
|
|
||||||
\DrawInsnTypeJTikz{10111001001110000001001111101111}
|
\DrawInsnTypeJTikz{10111001001110000001001111101111}
|
||||||
|
|
||||||
@ -424,11 +424,11 @@ shown below.
|
|||||||
%If \Gls{xlen}=32 then the imm value in this example will be converted to
|
%If \Gls{xlen}=32 then the imm value in this example will be converted to
|
||||||
%\verb@fffffffffff81b92@$_16$.
|
%\verb@fffffffffff81b92@$_16$.
|
||||||
|
|
||||||
The J--type format is used by the Jump And Link instruction that calculates
|
The J-type format is used by the Jump And Link instruction that calculates
|
||||||
a target address by adding a signed immediate value to the current program
|
a target address by adding a signed immediate value to the current program
|
||||||
counter. Since no instruction can be placed at an odd address the 20--bit
|
counter. Since no instruction can be placed at an odd address the 20-bit
|
||||||
imm value is zero--extended to the right to represent a 21-bit signed offset
|
imm value is zero-extended to the right to represent a 21-bit signed offset
|
||||||
capable of representing numbers twice the magnitude of the 20--bit imm value.
|
capable of representing numbers twice the magnitude of the 20-bit imm value.
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -436,7 +436,7 @@ capable of representing numbers twice the magnitude of the 20--bit imm value.
|
|||||||
\label{insnformat:rtype}
|
\label{insnformat:rtype}
|
||||||
\DrawInsnTypeRTikz{01000001111100011000001110110011}
|
\DrawInsnTypeRTikz{01000001111100011000001110110011}
|
||||||
|
|
||||||
A special case of the R-type used for shift--immediate instructions where
|
A special case of the R-type used for shift-immediate instructions where
|
||||||
the {\em rs2} field is used as an immediate value named {\em shamt}
|
the {\em rs2} field is used as an immediate value named {\em shamt}
|
||||||
representing the number of bit positions to shift:
|
representing the number of bit positions to shift:
|
||||||
|
|
||||||
@ -537,11 +537,11 @@ x31 & t6 & Temporary & \\
|
|||||||
|
|
||||||
Note that RISC-V is a little-endian machine.
|
Note that RISC-V is a little-endian machine.
|
||||||
|
|
||||||
All instructions must be naturally aligned to their 4--byte
|
All instructions must be naturally aligned to their 4-byte
|
||||||
boundaries.~\cite[p.~5]{rvismv1v22:2017}
|
boundaries.~\cite[p.~5]{rvismv1v22:2017}
|
||||||
|
|
||||||
If a RISC-V processor implements the C (compressed) extension then
|
If a RISC-V processor implements the C (compressed) extension then
|
||||||
instructions may be aligned to 2--byte
|
instructions may be aligned to 2-byte
|
||||||
boundaries.\cite[p.~68]{rvismv1v22:2017}
|
boundaries.\cite[p.~68]{rvismv1v22:2017}
|
||||||
|
|
||||||
Data alignment is not necessary but unaligned data can be inefficient.
|
Data alignment is not necessary but unaligned data can be inefficient.
|
||||||
@ -571,7 +571,7 @@ Load Upper Immediate.
|
|||||||
|
|
||||||
Copy the immediate value into bits 31:12 of the destination register and
|
Copy the immediate value into bits 31:12 of the destination register and
|
||||||
place zeros into bits 11:0.
|
place zeros into bits 11:0.
|
||||||
When XLEN is 64 or 128, the immediate value is sign--extended to the left.
|
When XLEN is 64 or 128, the immediate value is sign-extended to the left.
|
||||||
|
|
||||||
Instruction Format and Example:
|
Instruction Format and Example:
|
||||||
|
|
||||||
@ -606,11 +606,11 @@ Add Upper Immediate to PC.
|
|||||||
|
|
||||||
\verb@rd@ $\leftarrow$ \verb@pc + zr(imm)@
|
\verb@rd@ $\leftarrow$ \verb@pc + zr(imm)@
|
||||||
|
|
||||||
Create a signed 32--bit value by zero--extending imm[31:12] to the
|
Create a signed 32-bit value by zero-extending imm[31:12] to the
|
||||||
right (see \autoref{extension:zr}) and add this value to the
|
right (see \autoref{extension:zr}) and add this value to the
|
||||||
\reg{pc} register, placing the result into \reg{rd}.
|
\reg{pc} register, placing the result into \reg{rd}.
|
||||||
|
|
||||||
When XLEN is 64 or 128, the immediate value is also sign--extended
|
When XLEN is 64 or 128, the immediate value is also sign-extended
|
||||||
to the left prior to being added to the \reg{pc} register.
|
to the left prior to being added to the \reg{pc} register.
|
||||||
|
|
||||||
\DrawInsnTypeUPicture{AUIPC t0, 3}{00000000000000000011001010110111}
|
\DrawInsnTypeUPicture{AUIPC t0, 3}{00000000000000000011001010110111}
|
||||||
@ -710,7 +710,7 @@ register and stores the sum into the \reg{pc} register causing
|
|||||||
an unconditional branch to take place.
|
an unconditional branch to take place.
|
||||||
|
|
||||||
Note that the branch target address is calculated by
|
Note that the branch target address is calculated by
|
||||||
sign--extending the imm[11:0] bits from the instruction,
|
sign-extending the imm[11:0] bits from the instruction,
|
||||||
adding it to the \reg{rs1} register and {\em then} the
|
adding it to the \reg{rs1} register and {\em then} the
|
||||||
LSB of the sum is to zero and the result is stored into the
|
LSB of the sum is to zero and the result is stored into the
|
||||||
\reg{pc} register.
|
\reg{pc} register.
|
||||||
@ -877,7 +877,7 @@ Load byte.
|
|||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
Load an 8-bit value from memory at address \verb@rs1+imm@, then
|
Load an 8-bit value from memory at address \verb@rs1+imm@, then
|
||||||
sign--extend it to 32 bits before storing it in \verb@rd@
|
sign-extend it to 32 bits before storing it in \verb@rd@
|
||||||
|
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
@ -894,7 +894,7 @@ Load halfword.
|
|||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
Load a 16-bit value from memory at address \verb@rs1+imm@, then
|
Load a 16-bit value from memory at address \verb@rs1+imm@, then
|
||||||
sign--extend it to 32 bits before storing it in \verb@rd@
|
sign-extend it to 32 bits before storing it in \verb@rd@
|
||||||
|
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
@ -928,7 +928,7 @@ Load byte unsigned.
|
|||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
Load an 8-bit value from memory at address \verb@rs1+imm@, then
|
Load an 8-bit value from memory at address \verb@rs1+imm@, then
|
||||||
zero--extend it to 32 bits before storing it in \verb@rd@
|
zero-extend it to 32 bits before storing it in \verb@rd@
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
|
|
||||||
@ -944,7 +944,7 @@ Load halfword unsigned.
|
|||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
Load an 16-bit value from memory at address \verb@rs1+imm@, then
|
Load an 16-bit value from memory at address \verb@rs1+imm@, then
|
||||||
zero--extend it to 32 bits before storing it in \verb@rd@
|
zero-extend it to 32 bits before storing it in \verb@rd@
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
|
|
||||||
@ -1030,7 +1030,7 @@ Set LessThan Immediate
|
|||||||
\verb@rd@ $\leftarrow$ \verb@(rs1 < sx(imm)) ? 1 : 0@\\
|
\verb@rd@ $\leftarrow$ \verb@(rs1 < sx(imm)) ? 1 : 0@\\
|
||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
If the sign--extended immediate value is less than the value
|
If the sign-extended immediate value is less than the value
|
||||||
in the \reg{rs1} register then the value 1 is stored in the
|
in the \reg{rs1} register then the value 1 is stored in the
|
||||||
\reg{rd} register. Otherwise the value 0 is stored in the
|
\reg{rd} register. Otherwise the value 0 is stored in the
|
||||||
\reg{rd} register.
|
\reg{rd} register.
|
||||||
@ -1056,7 +1056,7 @@ Set LessThan Immediate Unsigned
|
|||||||
\verb@rd@ $\leftarrow$ \verb@(rs1 < sx(imm)) ? 1 : 0@\\
|
\verb@rd@ $\leftarrow$ \verb@(rs1 < sx(imm)) ? 1 : 0@\\
|
||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
If the sign--extended immediate value is less than the value
|
If the sign-extended immediate value is less than the value
|
||||||
in the \reg{rs1} register then the value 1 is stored in the
|
in the \reg{rs1} register then the value 1 is stored in the
|
||||||
\reg{rd} register. Otherwise the value 0 is stored in the
|
\reg{rd} register. Otherwise the value 0 is stored in the
|
||||||
\reg{rd} register. Both the immediate and \reg{rs1} register
|
\reg{rd} register. Both the immediate and \reg{rs1} register
|
||||||
@ -1086,7 +1086,7 @@ Exclusive Or Immediate
|
|||||||
\verb@rd@ $\leftarrow$ \verb@rs1 ^ sx(imm)@\\
|
\verb@rd@ $\leftarrow$ \verb@rs1 ^ sx(imm)@\\
|
||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
The logical XOR of the sign--extended immediate value and the value
|
The logical XOR of the sign-extended immediate value and the value
|
||||||
in the \reg{rs1} register is stored in the \reg{rd} register.
|
in the \reg{rs1} register is stored in the \reg{rd} register.
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
@ -1110,7 +1110,7 @@ Or Immediate
|
|||||||
\verb@rd@ $\leftarrow$ \verb@rs1 | sx(imm)@\\
|
\verb@rd@ $\leftarrow$ \verb@rs1 | sx(imm)@\\
|
||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
The logical OR of the sign--extended immediate value and the value
|
The logical OR of the sign-extended immediate value and the value
|
||||||
in the \reg{rs1} register is stored in the \reg{rd} register.
|
in the \reg{rs1} register is stored in the \reg{rd} register.
|
||||||
|
|
||||||
Encoding:
|
Encoding:
|
||||||
@ -1134,7 +1134,7 @@ And Immediate
|
|||||||
\verb@rd@ $\leftarrow$ \verb@rs1 & sx(imm)@\\
|
\verb@rd@ $\leftarrow$ \verb@rs1 & sx(imm)@\\
|
||||||
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
\verb@pc@ $\leftarrow$ \verb@pc+4@
|
||||||
|
|
||||||
The logical AND of the sign--extended immediate value and the value
|
The logical AND of the sign-extended immediate value and the value
|
||||||
in the \reg{rs1} register is stored in the \reg{rd} register.
|
in the \reg{rs1} register is stored in the \reg{rd} register.
|
||||||
|
|
||||||
|
|
||||||
@ -1684,7 +1684,7 @@ read.~\cite[p.~22]{rvismv1v22:2017}
|
|||||||
\subsection{MUL rd, rs1, rs2}
|
\subsection{MUL rd, rs1, rs2}
|
||||||
\index{Instruction!MUL}
|
\index{Instruction!MUL}
|
||||||
|
|
||||||
Multiply \reg{rs1} by \reg{rs2} and store the least significant 32--bits
|
Multiply \reg{rs1} by \reg{rs2} and store the least significant 32-bits
|
||||||
of the result in \reg{rd}.
|
of the result in \reg{rd}.
|
||||||
|
|
||||||
\DrawInsnTypeRPicture{MUL x7, x3, x31}{00000011111100111000001110110011}
|
\DrawInsnTypeRPicture{MUL x7, x3, x31}{00000011111100111000001110110011}
|
||||||
|
@ -70,7 +70,7 @@ text, data, bss, stack
|
|||||||
|
|
||||||
Labels and scope.
|
Labels and scope.
|
||||||
|
|
||||||
Forward \& backward references to throw--away labels.
|
Forward \& backward references to throw-away labels.
|
||||||
|
|
||||||
The entry address of an application.
|
The entry address of an application.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user