The design, at the moment, consists of three large data structures, although two of them are going to be merged together. These two objects are going to be wrapped in a large interface class for easy access. The first object (hmodel) represents both an abstract processor hardware design, and an interface to an actual hardware design file for simulation and implementation. The second object (optstruct) represents the design for the associated assembler. These two are non-orthogonal, in that some pieces of data overlap (machine code word formats, opcodes, etc). Integral to this relationship is the implementation of frequent sanity checks, to ensure that the overlapping data items are equal.
The hmodel object interfaces with a Xilinx microprocessor model and a set of associated libraries. As changes are made to the object, changes are effected in the hardware model itself. The processor is broken down into 6 primary components: Instruction Fetch (IF), Instruction Decode (ID), Register File (REG), ALU, IO Ports (IO) and Writeback (WB). For each component there exists a library of plug-in options to choose from. As options are set in the hmodel object, the libraries are scanned for components that match those values. If a match is found, that library component is put into the model. This interface is nearly complete.
Here is a basic rundown of my progress:
- Hardware and software design: 90%
- Basic classes and interfaces: 90% (barring a partial rewrite)
- Component libraries: 30%
- Graphical User Interfaces (GUI): 50%