/***********************************************************************
* Pipelined Y86-64 Simulator
*
* Copyright (c) 2002, 2010, 2015 R. Bryant and D. O'Hallaron,
* All rights reserved.
* May not be used, modified, or copied without permission.
***********************************************************************/
This directory contains the code to construct simulators for PIPE and
the variants of it described in the homework exercises.
*************************
1. Building the simulator
*************************
Different versions of the PIPE simulator can be constructed to use
different HCL files when working on the different homework problems.
Binary VERSION HCL File Description
psim std pipe-std.hcl Standard simulator (default)
psim broken pipe-broken.hcl Does not handle any hazards
psim full pipe-full.hcl For adding iaddq
psim nobypass pipe-nobypass.hcl For implementing PIPE-
(called pipe-stall.hcl in text)
psim lf pipe-lf.hcl For implementing load forwarding
psim nt pipe-nt.hcl For implementing NT branch prediction
psim btfnt pipe-btfnt.hcl For implementing BTFNT branch pred.
psim 1w pipe-1w.hcl For implementing single write port
psim super pipe-super.hcl Implements iaddq & load forwarding
The Makefile can be configured to build simulators that support GUI
and/or TTY interfaces. A simulator running in TTY mode prints all
information about its runtime behavior on the terminal. It's hard to
understand what's going on, but useful for automated testing, and
doesn't require any special installation features. A simulator
running in GUI mode uses a fancy graphical user interface. Nice for
visualizing and debugging, but requires installation of Tcl/Tk on your
system.
The Makefile has simple instructions for building the TTY and GUI
forms. In either case, once you've configured the Makefile, you can
build different versions of the simulators with different HCL files
with commands of the form:
unix> make clean; make psim VERSION=xxx
where "xxx" is one of the versions listed above. To save typing, you
can set the Makefile's VERSION variable. For example, if you are working
on Problems 4.52 and 4.53, which require to modify pipe-full.hcl, then
you could set VERSION=full in the Makefile. Typing
unix> make clean; make psim
would then make the pipe-full.hcl version of PIPE.
***********************
2. Using the simulators
***********************
The simulator recognizes the following command line arguments:
Usage: psim [-htg] [-l m] [-v n] file.yo
file.yo required in GUI mode, optional in TTY mode (default stdin)
-h Print this message
-g Run in GUI mode instead of TTY mode (default TTY mode)
-l m Set instruction limit to m [TTY mode only] (default 10000)
-v n Set verbosity level to 0 <= n <= 2 [TTY mode only] (default 2)
-t Test result against the ISA simulator (yis) [TTY model only]
********
3. Files
********
Makefile Build the simulator
Makefile-sim Makefile for the student distribution
README This file
**********************************************
* Files related to the CS:APP Architecture Lab
**********************************************
* Sample programs
ncopy.ys The default version of ncopy that the students optimize
ncopy.c C version of ncopy that defines its semantics
* Preconstructed driver programs (by gen-driver.pl)
sdriver.ys Driver that calls ncopy.ys on a short (4-word) array
ldriver.ys Driver that calls ncopy.ys on a longer (63-word) array
Both drivers are generated automatically by the
Makefile by typing "make drivers".
* Solution files (Instructors only)
gen-ncopy.pl Generates versions of benchmark program with various
optimizations. See comments in file for explanation.
* Testing scripts
gen-driver.pl Generate a driver program for an arbitrary ncopy
implementation (default ncopy.ys). Type "make drivers"
to construct sdriver.ys and ldriver.ys.
benchmark.pl Runs an implementation of ncopy on array sizes
1 to 64 (default ncopy.ys) and computes its performance
in units of CPE (cycles per element).
correctness.pl Runs an implementation of ncopy on array sizes
0 to 64, and several longer ones and checks each for
correctness.
check-len.pl Determines number of bytes in .yo representation of
ncopy function.
****************************************************
* HCL files for different versions of the simulators
****************************************************
pipe-std.hcl The standard PIPE processor described in the text
pipe-broken.hcl A simulator that does not detect or handle hazards
(useful when explaining hazards in lectures)
* HCL files for various CS:APP Homework Problems
pipe-nobypass.hcl 4.51: Build version of PIPE without bypassing
(called pipe-stall.hcl in the text)
pipe-full.hcl 4.52-53: Add iaddq instruction to PIPE
pipe-nt.hcl 4.54: Implement branch not taken strategy
pipe-btfnt.hcl 4.55: Implement back-taken forward-not-taken strategy
pipe-lf.hcl 4.56: Implement load forwarding logic
pipe-1w.hcl 4.57: Implement single ported register file
* HCL solution files for the CS:APP Homework Problems (Instructors only)
pipe-nobypass-ans.hcl 4.51 solution
pipe-full-ans.hcl 4.52-53 solutions
pipe-nt-ans.hcl 4.54 solution
pipe-btfnt-ans.hcl 4.55 solution
pipe-lf-ans.hcl 4.56 solutions
pipe-1w-ans.hcl 4.57 solutions
pipe-super.hcl Gives best performance for lab
*****************************
* PIPE simulator source files
*****************************
psim.c Base simulator code
sim.h PIPE header files
pipeline.h
stages.h
pipe.tcl TCL script for the GUI version of PIPE