[comp.sys.m68k] MC68030 & MC68882 now out and available; comparisons with MC68020?

earle@jplopto.uucp (Greg Earle) (10/29/87)

The new EDN shows a Motorola VME board with a 20 MHz 68030 and 68882 FPU on
it.  It has 256Kb on board and I believe 2 serial ports and PROM debugger.
Now that it's no longer vaporware, can someone (preferably from Motorola)
comment on the differences between the 68030 and 020, and also the 882 vs. 881?
I know the 68030 has some MMU circuitry on chip, but I heard this can be
disabled.

My initial thoughts were, `A Sun-3/60 uses a 20 MHz 68020, I wonder what it
would take to drop a 68030 in there at the same clock speed to turbo-ize it.'
Since Sun handles their own memory management, that part of the 68030 would
have to be turned off/disabled, but I'm sure there are many other factors
and/or incompatibilities (I don't even know how close the pinouts are), so
I'd like a Shell Answer Grape to enlighten me about them.

Thanx,

	Greg Earle		earle@jplopto.JPL.NASA.GOV
	S(*CENSORED*)t		earle%jplopto@jpl-elroy.ARPA	[aka:]
	Rockwell International	earle%jplopto@elroy.JPL.NASA.GOV
	Seal Beach, CA		...!cit-vax!elroy!smeagol!jplopto!earle

motsea@amc.UUCP (Motorola Seattle ) (10/30/87)

In article <4733@elroy.Jpl.Nasa.Gov> earle@jplopto.JPL.NASA.GOV (Greg Earle) writes:
>The new EDN shows a Motorola VME board with a 20 MHz 68030 and 68882 FPU on
>it.  It has 256Kb on board and I believe 2 serial ports and PROM debugger.
>Now that it's no longer vaporware, can someone (preferably from Motorola)
>comment on the differences between the 68030 and 020, and also the 882 vs. 881?

The 68030 incorporates a subset of the 68851 PMMU onchip, as well as an added
logical data cache, on-chip Harvard architecture [independent busses for both
instructions and data], and modified bus interface logic to allow 2 clock
synchronous access, burst filling of caches using nibble mode rams, as well
as the 3clock async bus interface. It is not a drop in replacement for the 020.
The 68882  *** IS *** a drop in replacement for the 68881. By reconfiguring
the internal architecture [primarily in floating point register access], it
is able to achieve typically 50% better performance than an 881 [all other
factors being equal], and can go 2x with minor code mods...

>
>Thanx,
>
>	Greg Earle		earle@jplopto.JPL.NASA.GOV
>	S(*CENSORED*)t		earle%jplopto@jpl-elroy.ARPA	[aka:]
>	Rockwell International	earle%jplopto@elroy.JPL.NASA.GOV
>	Seal Beach, CA		...!cit-vax!elroy!smeagol!jplopto!earle

			...mark konopacky   fae   motorola  seattle
			email: ...uw-beaver!tikal!motsea!mark

[I am fortunate to use Applied Microsystems' node for news...]
<< Standard Disclaimer >>

allen@ccicpg.UUCP (Nebraska Ned) (11/02/87)

>The 68882  *** IS *** a drop in replacement for the 68881.

This may be true for hardware, but not software.  The internal state frames
for the idle and busy states on the '882 are larger than that of the '881.
The operating software can tell the difference by the format word in
the state frame.

Allen

heiby@mcdchg.UUCP (11/04/87)

Allen H. Brumm (allen@ccicpg.UUCP) writes:
> >The 68882  *** IS *** a drop in replacement for the 68881.
> 
> This may be true for hardware, but not software.  The internal state frames
> for the idle and busy states on the '882 are larger than that of the '881.

I think that the intention of the statement was that it is a drop-in
replacement in the hardware sense *and* in the USER LEVEL software sense.
If you are mucking around with the internal state frames of a chip in
a way that violates the documented ways of using it, then you get what
you deserve.  In the same sense, the stack frames generated by (for
example) a BUS ERROR with a MC68030 will differ from those generated by
the same condition with a MC68020.  Obey the rules and you won't get burned.
The whole point is that the '030 is USER LEVEL OBJECT CODE COMPATIBLE
with the '020.
-- 
Ron Heiby, heiby@mcdchg.UUCP	Moderator: comp.newprod & comp.unix
"I know engineers.  They love to change things."  McCoy

root@cca.ucsf.edu (Computer Center) (11/06/87)

In article <2274@mcdchg.UUCP>, heiby@mcdchg.UUCP (Ron Heiby) writes:
: 
: I think that the intention of the statement was that it is a drop-in
: replacement in the hardware sense *and* in the USER LEVEL software sense.
: If you are mucking around with the internal state frames of a chip in
: a way that violates the documented ways of using it, then you get what
: you deserve.  In the same sense, the stack frames generated by (for
: example) a BUS ERROR with a MC68030 will differ from those generated by
: the same condition with a MC68020.  Obey the rules and you won't get burned.
: The whole point is that the '030 is USER LEVEL OBJECT CODE COMPATIBLE
: with the '020.

Ron Heiby seems to suggest that the OS support of these processors may
not be compatible but that the new one is still a "drop-in replacement".

I think this stretches the terminology in an unjustified way.

I take it that the chips are "command level" and "computationally"
compatible in their architecture and physically and electrically
compatible on the hardware side, but their exception handling and
task switching behaviour is different.

"Drop-in replacement" implies that if one of the old chips fails
in a piece of equipment I can use the new one as a replacement
without other changes.

Thos Sumner       (thos@cca.ucsf.edu)   BITNET:  thos@ucsfcca
(The I.G.)        (...ucbvax!ucsfcgl!cca.ucsf!thos)

If he says it's "user friendly" watch out; he's a con artist.

#include <disclaimer.std>

gnu@hoptoad.uucp (John Gilmore) (11/07/87)

> The 68882  *** IS *** a drop in replacement for the 68881.

Allen H. Brumm (allen@ccicpg.UUCP) writes:
> This may be true for hardware, but not software.  The internal state frames
> for the idle and busy states on the '882 are larger than that of the '881.

heiby@mcdchg.UUCP (Ron Heiby) wrote:
> If you are mucking around with the internal state frames of a chip in
> a way that violates the documented ways of using it, then you get what
> you deserve.

The point is that a Sun or Levco customer can't take a 68882 and 
plug it in where the 68881 goes, since the operating system software
provided by the manufacturers does not know to allocate that much space
for the stack frame.  No "mucking around" is required, simple things
like the space allocation for each process's floating point state will
kill you.  Users end up having to wait for the manufacturer
to update the software and/or firmware.

I used to write that kind of code for Sun and it's easy to set it up
*if you know the size of each stack frame*.  Unfortunately, the stack
frame format field is just 4 bits, assigned at random, so there's no
way a program can tell the size of a stack frame that wasn't designed
yet when the program was written.

I built a set of Sun-1 boot PROMs that would boot either a 68000 or a
68010, by causing a trap and seeing how much the stack pointer moved,
and adjusting the other places that needed to know.  But it's likely
that those PROMs would not be able to boot a 68020...or 68030.

> Obey the rules and you won't get burned.

For a manufacturer, this should read "obey the rules and you'll only
have to do a minor software update".  That's certainly better than
having to rewrite all your user programs to go from 8086 to 80286, but
it's not the whole story.

-- 
{pyramid,ptsfa,amdahl,sun,ihnp4}!hoptoad!gnu			  gnu@toad.com
Love your country but never trust its government.
		      -- from a hand-painted road sign in central Pennsylvania

schmitz@ARM.RI.CMU.EDU (Donald Schmitz) (11/09/87)

It seems there is some misunderstanding in this dicussion between exception
stack frames and coprocessor state frames.  The coprocessor state frame
contains the internal state of the chip (micro pc, internal registers, etc.)
It is a variable size frame that contains no externally useful
information.  In the '881, it varies between 4 and 184 bytes.  The first 4
bytes of this frame contain the coprocessor verison number, and the _number
of bytes_ in the frame, not just a random identifier.  The fsave and
frestore functions push and pop them either from a stack or a specified
memory space.  This frame must be stored when doing a context switch, or
otherwise changing state via an interrupt or exception, IF the new
instruction stream will use the coprocessor.  Otherwise, an coprocessor
instruction can be fetched before the currently executing instruction 
terminates (coprocessors are loosely coupled to the CPU).  The size of the
state frame is determined by the state of the coprocessor when the fsave is
executed.

Exception frames are less regular, and are generated by the host CPU on a
variety of error conditions, including a coprocessor signalled floating
point error.  These frames contain the CPU state during an exception, and
are somewhat kludgy in the '020, apprarently to provide some degree of
backward compatibility to the '010. These frames are automatically saved on
the stack by the CPU when an exception is processed.  Upgrading to an '882
should have no effect on these exception frames.

>The point is that a Sun or Levco customer can't take a 68882 and 
>plug it in where the 68881 goes, since the operating system software
>provided by the manufacturers does not know to allocate that much space
>for the stack frame.  No "mucking around" is required, simple things
>like the space allocation for each process's floating point state will
>kill you.  Users end up having to wait for the manufacturer
>to update the software and/or firmware.

The coprocessor save mechanism must already support a variable sized state
frame.  If a little extra space was allocated for the '881, it should
support the '882.  I'd guess Motorola let manufacturers know well before the
rest of us that the new part may take more space, and about how much, so
this should have been a reasonable thing to do (unless they want to make big
bucks selling the upgrade software, since the chip is a low profit item).  I
dont know how SUN or other real OS's handles the gory details of context
swapping, but the code I wrote saves it in a stack maintained for each
process, this stack is also the interrupt stack, so making it a little
oversize is no big deal.  None of the data in the saved frame is useful to
external code, so its exact format should not matter (Motorola explicity
says this in the '881 manual).

>I used to write that kind of code for Sun and it's easy to set it up
>*if you know the size of each stack frame*.  Unfortunately, the stack
>frame format field is just 4 bits, assigned at random, so there's no
>way a program can tell the size of a stack frame that wasn't designed
>yet when the program was written.

See above comments.  The coprocessor state frame concept is much more
regular than the CPU exception frames, and is designed to support variable
size frames.  Good software, at least the kind you pay for, should handle 
this easily.

heiby@mcdchg.UUCP (Ron Heiby) (11/10/87)

Computer Center (root@cca.ucsf.edu) writes:
> In article <2274@mcdchg.UUCP>, heiby@mcdchg.UUCP (Ron Heiby) writes:
> : 
> : I think that the intention of the statement was that it is a drop-in
> : replacement in the hardware sense *and* in the USER LEVEL software sense.
> 
> Ron Heiby seems to suggest that the OS support of these processors may
> not be compatible but that the new one is still a "drop-in replacement".

I apologize if I misled anyone.  I am in the "systems" side of the business
and, as I have not yet seen an '882 from my comrades in the semiconductor
side, I "only know what I read in the papers".

> I take it that the chips are "command level" and "computationally"
> compatible in their architecture and physically and electrically
> compatible on the hardware side,

I know that the above is true, based on information I have received on
the 68882 chip.

> but their exception handling and task switching behaviour is different.

I don't know that this is the case.  I believe that it is not.  What I
meant to say in my original article was that details such as length of
the state information or placement of specific information within that
"state frame" *may* have changed.

Because of this misunderstanding, I asked one of my semiconductor friends
about the chip and he gave me a copy of the "Motorola Semiconductor
Technical Data" sheet entitled "HCMOS Enhanced Floating-Point Coprocessor;
MC68882 Technical summary" with number "BR509/D".  It begins with:
	"The MC68882 enhanced floating-point coprocessor is a full
	implementation of the IEEE Standard for Binary Floating-Point
	Arithmetic (754) for use with the Motorola M68000 Family of
	microprocessors.  It is a pin and software compatible upgrade
	of the MC68881, with an optimized MPU interface that provides
	over 1.5 times the performance of the MC68881.  It is implemented
	using VLSI technology to give systems designers the highest
	possible functionality in a physically small device."

Later (page 7) of the same data sheet talks about FSAVE and FRESTORE,
which seems to be of great concern to some people in this group.  After
explaining what the two instructions are good for, the following is
stated:
			"NOTE
	While the MC68882 is instruction set compatible with the
	MC68881, the idle and busy state frames are both 32 bytes
	larger on the MC68882 than on the MC68881.  A unique format
	word is generated by the MC68882 so that system software
	can detect this difference."

(I think they meant to say "each 32 bytes larger" rather than "both 32
bytes larger", but you get the idea.)

So, it appears that if you have allocated *exactly* enough space for
the MC68881 busy state frame, then you are 32 bytes short if you plop
in an MC68882.  I hope this clears things up sufficiently.  Sorry for
the confusion.  Let me know if I can help further.
-- 
Ron Heiby, heiby@mcdchg.UUCP	Moderator: comp.newprod & comp.unix
"I know engineers.  They love to change things."  McCoy