1 |
2 |
robfinch |
# rf68000
|
2 |
|
|
|
3 |
|
|
## Overview
|
4 |
|
|
This is a mc68000 similar core. It is not the smallest core, some aspects of the core are not well thought out, but it runs.
|
5 |
|
|
It is *not* micro-coded and instead uses a large state machine. Many classes of instructions have their own states.
|
6 |
|
|
ALU operations are distributed and there are three separate result lanes for byte, word and long-word operations.
|
7 |
|
|
The core may be configured for little-endian operation. The default is for big-endian.
|
8 |
|
|
There is some 68010 compatibility. The movec instruction and vector base register are present. Instructions that operate on the status register are restricted to supervisor mode. This is to support virtual machine.
|
9 |
|
|
movec was desired to allow access to additional control registers. tick-tick count, coreno-the multi-core core number
|
10 |
|
|
|
11 |
|
|
## Status
|
12 |
|
|
The core fails to complete the test suite dervied from https://github.com/cdifan/cputest. which itself is derived from MicroCoreLabs https://github.com/MicroCoreLabs/Projects/MCL68/MC68000_Test_Code. Known to be a good test of operation of a 68000. It gets about 3/4 of the way through. So there are some bugs yet. Almost all instructions are working. The following instructions are not working correctly: ABCD, SBCD, NBCD, and DIVS. The procedure to handle BCD numbers is to convert to binary, perform the operation, then convert back to BCD. Suspect illegal combinations of BCD digits are working differently.
|
13 |
|
|
The core works well enough to run a small monitor program that allows dumping and editing memory.
|
14 |
|
|
It is used in a multi-core network-on-chip.
|
15 |
|
|
|
16 |
|
|
## History
|
17 |
|
|
Work started on the core in 2008. It was set aside for a long time, and work resumed in November 2022.
|
18 |
|
|
|
19 |
|
|
## Supported Bus Interface
|
20 |
|
|
The core is *WISHBONE* B.3 master compatible.
|
21 |
|
|
Supported cycles: master read/write, master read/modify/write
|
22 |
|
|
Address and data bus are both 32-bits wide.
|
23 |
|
|
|
24 |
|
|
## Size / Performance
|
25 |
4 |
robfinch |
approx. 13,000 LUTs (21,000 LC's) without FP, approx <80 MHz max (in -1 part).
|
26 |
2 |
robfinch |
No idea how the cycle times compare to a stock 68000, but suspect it may be a little faster due to minimum bus cycle time of two clocks and a 32-bit data bus.
|
27 |
|
|
|
28 |
|
|
## Software
|
29 |
|
|
The core may use 68000 software. There is a modified 68k vasm assembler. Additional control registers were added for movec.
|
30 |
|
|
There are some software examples in the examples folder.
|
31 |
|
|
|
32 |
4 |
robfinch |
## Instruction Set
|
33 |
|
|
The core includes BCD to binary and binary to BCD conversion functions in addition to the standard 68k instructions.
|
34 |
|
|
|
35 |
|
|
### Floating-Point
|
36 |
|
|
The core supports 96-bit triple precision decimal floating-point. The core repurposes the packed BCD floating-point instructions to implement triple precision densely-packed-decimal floating point. This may be
|
37 |
|
|
disabled by commenting out the 'SUPPORT_DECFLT' definition to reduce the core
|
38 |
|
|
size.
|
39 |
|
|
The following floating-point instructions are at least partially supported:
|
40 |
|
|
FADD, FSUB, FMUL, FDIV, FNEG, FSCALE, FCMP, FTST, FBcc, FMOVE
|
41 |
5 |
robfinch |
Decimal floating-point primitives are found in the ft816float project at
|
42 |
|
|
opencores.org.
|
43 |
4 |
robfinch |
|
44 |
2 |
robfinch |
## License
|
45 |
|
|
BSD-3
|
46 |
|
|
|
47 |
|
|
## Other 68k Cores
|
48 |
|
|
http://www.opencores.org/project,ao68000
|
49 |
|
|
http://www.opencores.org/project,tg68
|
50 |
|
|
http://www.experiment-s.de/en
|
51 |
|
|
http://www.opencores.org/project,k68
|
52 |
|
|
http://www.opencores.org/project,ae68
|