mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-15 13:28:59 +00:00
Progress on AppNote 010
This commit is contained in:
parent
bf501b9ba3
commit
3c023054bc
|
@ -76,7 +76,7 @@ to use an actual script file.
|
||||||
With a script file we have better control over Yosys. The following script
|
With a script file we have better control over Yosys. The following script
|
||||||
file replicates what the command from the last section did:
|
file replicates what the command from the last section did:
|
||||||
|
|
||||||
\begin{lstlisting}[frame=trBL,xleftmargin=2em,numbers=left]
|
\begin{lstlisting}[frame=trBL,xleftmargin=1.5em,numbers=left,caption={\tt softusb\_navre.ys}]
|
||||||
read_verilog softusb_navre.v
|
read_verilog softusb_navre.v
|
||||||
hierarchy
|
hierarchy
|
||||||
proc; opt; memory; opt; techmap; opt
|
proc; opt; memory; opt; techmap; opt
|
||||||
|
@ -122,9 +122,40 @@ to provide a custom set of rules for this process in the form of a Verilog
|
||||||
source file, as we will see in the next section.
|
source file, as we will see in the next section.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
{\color{red} FIXME}
|
Now Yosys can be run with the file of the synthesis script as argument:
|
||||||
|
|
||||||
\begin{lstlisting}[frame=trBL,xleftmargin=2em,numbers=left]
|
\begin{lstlisting}[frame=trBL,xleftmargin=1.5em,numbers=left]
|
||||||
|
yosys softusb_navre.ys
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
Now that we are using a synthesis script we can easily modify how Yosys
|
||||||
|
synthesizes the design. The first thing we should customize is the
|
||||||
|
call to the {\tt history} command:
|
||||||
|
|
||||||
|
Whenever it is known that there are no implicit blackboxes in the design, i.e.
|
||||||
|
modules that are referred to but are not defined, the {\tt hierarchy} command
|
||||||
|
should be called with the {\tt -check} option. The 2nd thing we can improve
|
||||||
|
regarding the {\tt hierarchy} command is that we can tell it the name of the
|
||||||
|
top level module of the design hierarchy. It will then automatically remove
|
||||||
|
all modules that are not referenced from this top level module.
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
For many designs it is also desired to optimize the encodings for the finite
|
||||||
|
state machines (FSM) in the design. The {\tt fsm command} finds FSMs, extracts
|
||||||
|
them, performs some basic optimizations and then generate a circuit from
|
||||||
|
the extracted and optimized description. It would also be possible to tell
|
||||||
|
the FSM command to leave the FSMs in their extracted form, so they can be
|
||||||
|
processed using custom commands. But in this case we don't need that.
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
So now we have the final synthesis script for generating a BLIF file
|
||||||
|
for the navre CPU:
|
||||||
|
|
||||||
|
\begin{lstlisting}[frame=trBL,xleftmargin=1.5em,numbers=left,caption={\tt softusb\_navre.ys} (improved)]
|
||||||
read_verilog softusb_navre.v
|
read_verilog softusb_navre.v
|
||||||
hierarchy -check -top softusb_navre
|
hierarchy -check -top softusb_navre
|
||||||
proc; opt; memory; opt;
|
proc; opt; memory; opt;
|
||||||
|
@ -132,9 +163,35 @@ proc; opt; memory; opt;
|
||||||
write_blif softusb_navre.blif
|
write_blif softusb_navre.blif
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
{\color{red} FIXME}
|
|
||||||
|
|
||||||
\section{Advanced Example: The Amber23 ARMv2a CPU}
|
\section{Advanced Example: The Amber23 ARMv2a CPU}
|
||||||
|
|
||||||
{\color{red} FIXME}
|
Our 2nd example is the Amber23\footnote{\url{http://opencores.org/project,amber}}
|
||||||
|
ARMv2a CPU. Once again we base our example on the Verilog code that is included
|
||||||
|
in {\it yosys-bigsim}.
|
||||||
|
|
||||||
|
\begin{lstlisting}[frame=trBL,xleftmargin=1.5em,numbers=left,caption={\tt amber23.ys}]
|
||||||
|
read_verilog a23_alu.v
|
||||||
|
read_verilog a23_barrel_shift_fpga.v
|
||||||
|
read_verilog a23_barrel_shift.v
|
||||||
|
read_verilog a23_cache.v
|
||||||
|
read_verilog a23_coprocessor.v
|
||||||
|
read_verilog a23_core.v
|
||||||
|
read_verilog a23_decode.v
|
||||||
|
read_verilog a23_execute.v
|
||||||
|
read_verilog a23_fetch.v
|
||||||
|
read_verilog a23_multiply.v
|
||||||
|
read_verilog a23_ram_register_bank.v
|
||||||
|
read_verilog a23_register_bank.v
|
||||||
|
read_verilog a23_wishbone.v
|
||||||
|
read_verilog generic_sram_byte_en.v
|
||||||
|
read_verilog generic_sram_line_en.v
|
||||||
|
hierarchy -check -top a23_core
|
||||||
|
add -global_input globrst 1
|
||||||
|
proc -global_arst globrst
|
||||||
|
opt; memory; opt; fsm; opt
|
||||||
|
techmap -map adff2dff.v
|
||||||
|
techmap
|
||||||
|
write_blif amber23.blif
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue