Re: FPGA for PCI based servo control board



On Sat, Apr 05, 2003 at 11:25:40PM -0500, John Kasunich wrote:
> 
> At 07:27 PM 4/5/03 -0500, John Sheahan wrote:
> 
> >On Sat, Apr 05, 2003 at 04:49:22PM -0500, John Kasunich wrote:
> >>
> >> With ethernet, there are two possibilities.  One is to send
> >> a 256 byte packet from FPGA to PC, transferring the entire
> >>...
> >> makes it better, but your're still transferring far more data
> >> than is actually needed.
> >
> >how come one scheme here always transmits max size data,
> >and one transmits a delta?  All schemes could run either way.
> 
> I don't understand what you are saying.  One scheme sends 256
> bytes.  The other scheme sends only the bytes needed by the
> specific machine, which depends on the number of axes, etc.
> For any given machine, the number of bytes in each packet is
> always the same, and all data is updated every servo cycle.
> No deltas.  One scheme is simpler to implement but slower,
> the other is faster but more complicated.  I don't care which
> one is used, but obviously the software in the PC and the
> micro or state machine at the other end of the link have to be
> using the same scheme.

Sorry - I was particularly unclear.

I see (at least) two interfaces and (at least) two ways of
sending the data.
Either send all data , of a delta.  
Either scheme can be used on either interface. 
Doing transfer-time- sums for the max data at the slowest 
serial interface rate seemed unreasonable.

Sending all data takes longer, but is more robust to packet loss. 
 


> 
> >> I see the micro-fpga interface as a set of registers.  Not too
> >> complex at all.
> >
> >which is the model used inside the pc. What did we gain with the
> >interface card exactly?
> 
> Again I don't understand.  There are two interfaces in the system.
> One is between the PC and the FPGA, and the other is between
> the FPGA and the physical devices like encoders, stepper drivers,
> limit switches, etc.
> 
> The PC to FPGA interface can be ISA or EPP for low cost,
> PCI for performance, or ethernet to let the FPGA board be
> closer to the machine.  The user makes the choice depending
> on what he thinks is most important.

minor quibble. gigabit ethernet is as fast as pci.  

> 
> The FPGA to device interface common to all four designs, and
> I/O boards can be used with any FPGA board.  I/O boards are
> designed to mix and match I/O to keep cost down.  For a one
> off project, the I/O board could be custom made on perf-board
> or wire-wrap, using published schematics.  That's much harder
> to do with an FPGA, especially if your gonna connect it to a
> 33MHz PCI bus!

agreed on PCI.  not a givem for a PLCC on eth I think. 
Could even put a fpga on a couple-inch square smd that plugs in 
to the perf board - like many of the current usb-style interfaces.



> 
> >> 1)  PCI - big FPGA, containing a PCI interface and the control
> >> hardware.  The control registers are mapped to a block of PCI
> >> I/O addresses.  PnP complicates things, but it really comes
> >> down to getting the base address to the EMC code somehow.
> >
> >on a new SMD board inside the PC. Not complex, but
> >hard to assemble.
> 
> Complexity is in the eye of the beholder.  Yes, the parts count is
> low.  But that's like saying a 2003 PC motherboard is less complex
> than a 1985 one because there are fewer parts on it.  In my view,
> complexity = design time, not parts count.  The FPGA is complex,
> the I/O interface is simple.  But the interface costs as much or
> more than the FPGA, because terminal blocks, relays, optocouplers,
> and such are expensive.
> 

I think this shows our relative experience bases. I'd see the fpga as
a couple of days to get the rtl simulating. It would take me longer
than that to decide on the IO drivers, sort out footprints and draw
the board. 


> >Whats the model for the connection between this card and the target?
> >some kind of wide, high-density connector?
> 
> Yes.  I was thinking SCSI-3 cables (68 pins), but there are other
> possibilities.
> 
> >Thats what I was actually trying to eliminate.
> 
> Why?
> 

I find HD SCSI cables relatively expensive, short  and fragile.
And the sockets are expensive in small qty.  


> >The IO card is still required.
> 
> Yes.  You will always have an I/O card, unless you intend to take
> the limit switch leads, spindle on/off, coolant pump, and all the
> other wires directly to the back of the PC slot.  Whether it's a
> 25 pin parallel port cable, or 60+ wires on a complex machine
> with a many axes, jog wheels, and a tool changer, you will need
> something to break them out from high density fragile electronic
> connectors to rugged industrial screw terminal strips.  What I am
> advocating is making that breakout board design cheap, modular
> and expandable.

sure. I'd just add the interface electronics at that point. 


> 
> >> 2)  ISA - small FPGA, containing an ISA interface and the control
> >> hardware.  The control registers are mapped to a block of ISA I/O
> >> addresses.  The base address is set by jumpers, and entered into
> >> the EMC ini file.  Old-fashioned, but it works.
> >
> >what do we gain with this we do not have today?  Also the transaction
> >speed on the ISA interface is an issue for the real-time loops.
> 
> We gain lower cost.  It works just like a Servo to Go card, but costs
> less.  Improvements don't have to be in performance.  The cheapest
> solution that does the job at hand is the right one.  ISA performance
> obviously isn't a problem for the people using STG cards today.
> 
> >> 3)  EPP - small FPGA, containing an EPP interface and the control
> >> hardware.  The control registers are accessed sequentially through
> >> the EPP "bus".  The parallel port address (378h, etc.) is entered
> >> into the EMC ini file.
> >>
> >
> >yes. Again, seems to be pretty much what Jon has done well.
> 
> Yes, and if Jon's I/O mix is OK for your application, buy his board.
> If not, this one is more flexible, and still fairly cheap.
> 
> >> 4)  Ethernet - big FPGA, containing an ethernet MAC and the
> >> control hardware.  The packet format is as I described above.
> >> The PC NIC ID (eth0, etc.) and the FPGA MAC address are
> >> entered into the EMC ini file.
> >>
> >
> >10 or 20 k gates I'd assume, but not a particularly high pin count.
> >probably plcc (hence socketable, hence buildable by most)
> >On the same board as all the IO buffers, physically located close to
> >the machine.  My picture here is just a cheap longish cable.
> 
> You could put it all on one board if you want.  But when you lay out
> that board, you better know what I/O mix you need.  And be prepared
> to re-do the layout if you change your mix.  I/O and FPGA on two
> boards lets the I/O change without affecting the FPGA board.  If you
> have a medium to high volume application with a fixed set of I/O, by
> all means put everything on one board.
> 


perhaps that daughter board I mentioned would be useful here.


> >> Most of the EMC code is the same for all 4 versions.  Versions
> >> 1 and 2 use the exact same code, once the base address is
> >> known.  Version 3 uses a simple interface layer that translates
> >> each access into one or two EPP cycles.  Version 4 uses a
> >> more complex interface layer that handles packets.
> >>
> >
> >moving the same sort of data to a register map in the NIC, then saying
> >go. not much more complex. Perhaps less cpu as it does not have to
> >bi bash out a slow interface.  (just how many cycles does a 1G pentium
> >waste sinning on an ISA read or write? 100's to thousands. ouch.
> 
> Nothing is being bit bashed.  Byte bashed maybe ;-)   If cycles spent
> waiting for ISA or EPP bug you, then get the PCI or ethernet versions.
> 
> Each of the four designs listed has strong and weak points.
> I'm not advocating any one over the others.  I am advocating
> an overall concept that allows all four to be built.  The control
> portion of the FPGA, as well as all of the I/O stuff, is common
> to all four designs.  The EMC servo and I/O code is also the same,
> and EMC interacts with the control hardware through a register
> map that is the same in all four designs.  The only difference is
> the mechanism used by EMC to read/write those registers - from
> single instructions for ISA or PCI, to packet drivers for ethernet.
> 
> What I'd really like to do is define two things:
> 
> 1)  A set of registers by which EMC communicates with the control
> hardware part of the FPGA.
> 
> 2)  A set of pins by which the control hardware part of the FPGA
> communicates with the outside world of encoders, switches, motors, etc.
> 
> If we had these two things, then several parts of the design could
> begin to make progress:
> 
> I/O hardware to go from pins to terminal blocks could be designed.
> For digital inputs this would be either discrete optocoupler inputs,
> or OPTO-22 modules.  For outputs it would be relays or OPTO-22
> modules.  For analog outputs it would be filters and buffers for
> +/-5v, +/-10v, and maybe 4-20mA.  For step/dir outputs it would
> be a one-shot and line drivers, with selectable polarity and pulse
> length.
> 
> The FPGA logic that goes from the register set to the pins could
> also be designed.  For outputs, this would be a pulse rate generator
> whose output could be filtered on the I/O board for analog outputs,
> or buffered for step/dir outputs.  For inputs, an up/down encoder
> counter with a quadrature decode state machine.  And for digital
> I/O, a simple 8 bit bus.
> 

I'm happy to design the ethernet-mac to pins of an fpga.
I've got a Xilinx eval board uncommited it should be testable on.


> The EMC software that to perform the basic servo loops and I/O
> could be written.  The interface to the registers would be through
> a wrapper, something like this:
> 
> void WriteReg ( unsigned char reg_no, unsigned char data )
> unsigned char ReadReg ( unsigned char reg_no )
> 
> And finally, advocates of each method of PC to FPGA communication
> could start their designs.  Each method would supply its own copy
> of the wrapper functions.  For example, the PCI & ISA versions would
> look like:
> 
> static unsigned int BaseAddress;
> 
> void WriteReg ( unsigned char reg_no, unsigned char data )
> {
> outportb ( BaseAddress + reg_no, data );
> }
> 
> unsigned char ReadReg ( unsigned char reg_no )
> {
> return ( inportb ( BaseAddress + reg_no );
> }
> 
> Optimized EPP versions are a little more complicated, but I could
> write them in an hour.  The ethernet versions would require knowledge
> of NICs that I don't have, so as it stands I couldn't write them at all.
> 
> John Kasunich
> 
> 
> 
> 
> 
> 
> 



Date Index | Thread Index | Back to archive index | Back to Mailing List Page

Problems or questions? Contact