Work in Progress!

SC3 RISC CPU core

introduction

The project name SC3 is derived from the following properties:
This project is a low-priority work-in-progress with the following objectives:

Regarding the SystemC design flow, I feel that tool support is lacking behind. I have not seen any reports of people using SystemC. So the question is: Is it really possible to create FPGA designs in SystemC today? How will design entry, simulation, synthesis and implementation work? This project should be a good vehicle to try and find out.

Regarding RISC computer concepts, I am not fully satisfied with all the CPUs being out there. OpenRisc and MicroBlaze are wonderful but large. PicoBlaze is a little too limited. I want to have an instruction set, which is human-readable, and I would like to try a few concepts and circuit ideas. I am not sure, if my results will be really better. But at least I‘d like to fully understand the implications of my concepts.

Finally, I have good use for a vendor-independent and lightweight processor. I prefer a design scheme that separates asynchronous and isochronous data flows. A small CPU can usually handle the asynchronous commands, e.g. the USB protocol. A dedicated data path will handle the isochronous data without CPU intervention, e.g. audio data being streamed. So I am targeting a size of about 150 4-LUTS, 100 FFs, and maybe 3500 Gates. 

Regarding available CPUs, I have the following thoughts:

I am planning to use the following tools for this project:

architectural thoughts

overall structure

<put a block diagram here>

pipeline

In principle, the pipeline will compute a result with every clock cycle. The following events have been identified to stall the pipeline:
To simplify the design, all of the above listed stall conditions will be handled by a single entity, the memory arbiter.

instruction set

arithmetic group
00 000 r3ADDAdd register value to accumulator
00 001 r3SUBSubtract register value from accumulator
00 010 r3SHLShift accumulator left by register value
00 011 r3SHRShift accumulator right by register value
00 100 r3ANDAnd register value to accumulator
00 101 r3OR Or register value with accumulator
00 110 r3XORXor register value with accumulator
00 111 x3---Idea: user-defined instruction
load/ store group
01 0 00 r3LDLoad accumulator with register contents
01 0 01 r3ST Store accumulator to register contents
01 0 10 r3LDILoad accumulator with register indirect
01 0 11 r3STIStore accumulator to register indirect
jump group
01 1 00 r3CALLCall subroutine at register contents
01 1 01 x3RETReturn from subroutine
01 1 10 r3JMPJump to register contents
01 1 11 c3IFIf condition not met, skip next instruction
reserved group
10 x3 x3---Idea: synchronized exchange with external device or CPU
immediate group
11 i6IMMLoad 6-bit immediate to accumulator; repeat to load further bits
 
... to be continued...