Saruwatari is a simplified, four-staged, superscalar, general purpose processor, designed
as the final project for the course of Hardware Design
at the University of Catania.
Architecturally, it is similar to the DLX
, except that it has two datapaths and it has
only four stages instead of five (the execution
and the memory
have been condensed).
For the complete instruction set, see https://raw.github.com/kid-a/Saruwatari/master/instruction_set/is.dat
See https://github.com/kid-a/Saruwatari/raw/master/schematic/schematic_complete.png
As in every pipeline, there hazards can occur. We have been given the following assumptions:
- only datapath 1 can perform memory operations
- given a couple of successive instructions, only one can be a memory operation
- the execute stage for instructions lw, sw, mult, multi, div requires two clock cycles
- no data dependency between couple of instructions executed concurrently
We have also been requested to handle hazards in the following way:
- structural hazards: stall
- data hazards: stall
- control hazards: predict untaken with branch outcome known during decode
In order to detect and handle hazards, saruwatari
has an hazard control unit
, whose
input/output signals mapping can be found in
https://github.com/kid-a/Saruwatari/raw/master/doc/control_unit_signals.ods
A more detailed description of how saruwatari
handles hazards can be found in
https://raw.github.com/kid-a/Saruwatari/master/doc/hazards.txt
In order to simulate saruwatari
, you need:
ghdl
, for the vhdl description (http://ghdl.free.fr/)gcc
, for the SystemC descriptionSystemC
(http://www.systemc.org/home/)- a waveform visualizer (such as http://gtkwave.sourceforge.net/)
- Daniele Marletta
- Loris Fichera
saruwatari
is free software, as it is released under the GPL ver 2.1.