1 This ZPU implementation, codenamed "avalanche" was
2 contributed by Antonio Anton <antonio.anton@anro-ingenieros.com>.
4 It's most interesting aspects are it's implementation using
5 microcode, small size, reduced code size overhead and that
6 it's implemented in Verilog.
8 Please direct any questions to the zylin-zpu mailing list.
10 The most urgently needed patches would be to provide working
11 simulation examples and improved documentation.
21 attached goes my zpu implementation in verilog in case anybody is
22 interested in. Code is quite commented. Also microcode and opcodes are
23 exhaustive commented (and more accurate that the HTML documentation in
26 At the moment I have no time to send a working environment but I will
27 get some time in next days and prepare a clean environment
28 (software/hardware) and send to the list. The target HW is spartan3
29 starter kit board (all peripherals working: vga, sram, uarts, etc.).
31 Feel free to ask any question to the list I will do my best to answer
39 the zpu_core is complete and lot of bugs has been solved in the past but
40 extensive testing and a complete test program has not been
41 defined/executed; anyway I'm quite confident it works: this core
42 executes eCos, FreeRTOS, Forth and other applications.
44 Regarding FPGA resources for a "balanced" implementation (not the
45 smallest, not the fastest):
47 -cpu+alu+microcode rom: 671 LUT + 239 FF + 1 BRAM (50% of LUT is ALU)
48 -complete soc (cpu, vga, uart, memory controller, interrupt controller,
49 timers, gpio, spi, etc.): 1317 LUT + 716 FF + 1 BRAM
51 Regarding "modelsim hello world"; I'm sorry but I don't modelsim;
52 instead I use Icarus Verilog & gtkwave. The core has a "debug" facility
53 which displays all opcode and registers (memory changes, sp, pc, etc..)
54 during simulation execution.
60 > > Regarding FPGA resources for a "balanced" implementation (not the
61 > > smallest, not the fastest):
63 > > -cpu+alu+microcode rom: 671 LUT + 239 FF + 1 BRAM (50% of LUT is ALU)
65 > Are there any emulated instructions not implemented in
69 *All* zpu opcodes are microcoded. For some opcodes (like *shift*),
70 there are two versions; 32 bit barrel shift in HDL (up to 32 clocks) or
71 1 bit shift in HDL microcode drived (up to ~130 clocks). They are
72 selectable via `DEFINES in the zpu_core_defines.v
74 Other opcodes like mult and div are 32 bit HDL only at the moment (there
75 are enough room in microcode memory to implement as microcode) and
76 software emulable as well.
78 For the above figures (671 LUT + 239 FF): *shift* are 32 bit HDL and
79 mult/div are software implemented.
81 There are new opcodes (as per my needs) like memory bulk copy (sncpy,
82 wcpy, wset) and ip checksum calculation (ipsum). There are room in
83 microccode memory to define new opcodes using the holes in the ISA (for
84 a complete list of opcodes and its function please see
87 Some future ideas (easy to implement in microcode)
89 -microcode update via software