Mojo FPGA v3 from Embedded Micro

I have spent the last 3-4 weeks preparing a custom part for the Embedded Micro Mojo FPGA v3 board.

You can download the part file from my fritzing-parts GitHub page.

Not bad but there are a few problems. I’m assuming the connectors are standard .1 (2.54mm) spacing in which case all your svgs are scaled incorrectly (most important in pcb, but very desirable in breadboard as well). The pins don’t align on the .1 grid in either fritzing or Inkscape (which I use rather than illistrator) and they need to so that the board would fit on a pcb if you were to produce one. There are also problems (and extra pads on the top copper layer that shouldn’t be there) on the gerber export files. This is probably because there isn’t a copper1 group in the pcb svg file. The drill size is set to .035 rather than the .038 that is appropriate for .1 square header pins. In schematic the part is again not aligned to the .1 grid when it should be to match other parts and most of your pins look to be missing a terminal definition (the gnd pin looks correct the others connect to the middle of the pin, typically because there isn’t a terminal value set). In this case the terminals are set in the svg file but not in the fpz file. They aren’t quite correct in the svg either in that they want to center on the .1 grid position (I usually use a .01 rectangle with both x and y start coordinates offset by .05 inches such as .095 for the center of the rectangle on .1 inch). You can see the lack of the terminal definition in schematic by dragging in a .1 connector (2 pin is fine) and offsetting it slightly from the pin and connecting a line to it. On the ground on the top right corner (which has a terminal definition) it connects to the end of the pin as is desirable. the raw connection below it connects to the middle of the pin as it lacks the terminal definition in the fpz file.

Peter

Awesome feedback. I just noticed the breadboard sizing problems. I’m having trouble resizing the breadboard.

I didn’t even think that the schematic would need to be on a .1 grid, so that is why they aren’t correct. I took great pains to ensure that all of my schematic pins had terminals, but when I tried to manually generate my fpz file using a program that I wrote that converts a pin info CSV to xml, Fritzing wouldn’t import the part. No errors, just “sorry, can’t do that”. So then I took the manual approach (and two more hours).

This is my first Fritzing part, so it’s been quite an experience. It was a big one to bite off with 110 pins, but I really wanted this part.

I need to figure out how to make my SVG render the correct size. I imported the svg of a core header pin for size comparison (I even copied it and reused it to make my headers), but when it gets imported into Fritzing, it is too small.

I used a program to convert the Eagle files of the board to a format I could use, so the pin spacing is off on that, too. I think I may just use two 50 pin and one 10 pin spaced the correct distance apart and start over on the pcb board.

If this is ever going to get a shield that is double-sided, it’s going to need copper 0 and copper 1 so that people can use it’s PCB view as a template. Easy fix just put copper0 in a empty group called copper1. Could also use a black outline in the silkscreen group.

Good BB drawing though.

EDIT
There is something wrong with the copper contact pads. In Gerbv the holes are the same size as the pads, where as usually you see the smaller hole on a bigger pad.

The fzp should be reasonably easy to fix. All the pins need to look like connector0: (the added blank is to stop the forum from thinking its a forum markup command :slight_smile: )
Correct:

< schematicView>
< p svgId=“connector0pin” layer=“schematic” terminalId=“connector0terminal”/>
< /schematicView>

instead of (missing the terminalid definition)

< schematicView>
 < p svgId="connector1pin" layer="schematic"/>
< /schematicView>

the lack of the terminal definition is what is causing the middle of the pin to be used. I’m not sure whats going on with breadboard, the usual answer would be translates but I don’t see any in the svg file. I usually find it useful (if time consuming) to ungroup everything as Inkscape at least then seems to undo all the translates (most of the time anyway) and then everything is to scale and you can move things to the exact coordinates you want. At the end of the editing I do an edit select all and then group and name the resulting group breadboard. Don’t know if that will help here though. I copy / pasted a standard 8 pin .1 header over top of the connector in breadboard here with Inkscape and the new one looks to be correctly scaled (its offset from the grid because the grid is orienting on one of the pins probably connector0) so it doesn’t look like a translate problem (at least not to Inkscape).

mojo_1.fzpz (74.2 KB)

So I don’t exactly know what to suggest.

Peter

Peter, I had my Illustrator Artboard set on Pixels as the unit of measurement. That was causing it to export the SVG incorrectly. I’ve since changed all of my source files to Inches and re-exported them. I put them in Fritzing (after some resizing of the schematic - it was HUGE). The PCB is still off, I wouldn’t trust it.

Also, I figured out how to get my custom application to generate all of the pin < connectors> XML for the .fzp for me (including connecting to the terminals), so I feel a lot better about making changes now.

Honestly, I made this part so I could show the breadboard connections on blog entries and articles on the Mojo. I thought it would be inconsiderate not to at least provide a schematic. However, getting the PCB board correct may be above my level at the moment. It’s just two 50 pin headers and one 10 pin header, but the arrangement has to be perfect to line up and I don’t even know how I set the drill hole size in the first place. :slight_smile:

I’ve updated the GitHub and added an issue to fix the PCB.

Thanks for your help, it’s a big challenge and having someone to assist along the way has been marvelous.

I’m probably going to have to start from scratch on the Schematic to get the spacing correct. It’s a little better now, but the pins are still off. I’ve written scripts in Illustrator which help with pin numbering, so it’s just a matter of getting the spacing correct to match the connector0terminal, connector1terminal, etc.

Thanks for the feedback. I have written an application to parse an Excel spreadsheet containing the data about all of the pins (including subsections for labeling). The software generated all of the correct terminals and both copper layers, but I couldn’t figure out how to get my XML output to work with Fritzing. I was trying to “hand make” an .fzp file. I realized that I’d have to have something to start with and then open it up and replace the < connectors> element to get everything correct.

The first release that I did was all manually adding the connections (and data) to Fritzing using the part editor (ugh). Now, with my application, it’s easy to change the part connections. I just have to make sure that all of part layers have the same connector/terminal numbers for the pins.

Breadboard looks good now, I’ll have a poke at schematic and pcb and see if I can do something about it in Inkscapes (which hopefully may translate to Illistrator). You have done very well for a first part as part creation is a complex process. The hole size for pcb is a combination of the radius of the circle and the stroke width. In inkscape the standard stroke width is 20 (I think px) and the diameter of the circle needs to be hole size + 2*stroke-width so for a .038 hole in Inkscape with a stroke-width of 20 the diameter of the pad needs to be .078 in. On your initial part the radius was something like 1.5…(which I’ve seen before with translates being present) in which case I usually copy and paste a correct pad from another drawing in, move it to the correct group (to get the transforms to take) and then copy the radius and diameter numbers from the xml display and use that to set the other pad values. If you can’t get pcb correct it isn’t a big problem, most people are probably going to use the part as you are to document things from breadboard view.

Peter

While I don’t think its entirely correct (the board outline probably needs to be set as I have to increase the base board size in pcb to get the gerbers to work correctly), this part contains a working (but possibly misaligned because I don’t have a board to look at :slight_smile: ) pcb. I had to scap yours and start from a standard part as yours has a bunch of unused elements (that I was too lazy to delete) and the copper groups are wrong and as usual Inkscape and I don’t get along with making groups. The easy way to check alignment would be to put a piece of perf board on male .1 pins plugged in to the sockets. Assuming they line up correctly (which I would hope they do) then counting blank rows to the first pin of the various connectors will at least get the connectors correctly aligned. Also your script seems to have added a -2 to all the connector names (I removed them so pcb now works in Fritzing). Schematic is pretty close now, I can adjust it to be on .1 centers if you like.

Embedded Micro Mojo v4.fzpz (32.9 KB)

Peter

I’m only finding Eagle files, I guess you could get sizes off that.

Hey cerkit, can you paste a pic of the dimensions.

EDIT
Found some rough dims.
Max Dimensions: 63.55mm / 2.5" x 78.8mm / 3.1" x 12.82mm / 0.5"

Those were the dimensions that I ended up with in Illustrator for the breadboard view (3.1" x 2.5"). My PCB is slightly off from that, but I built it using an app that converts Eagle to SVG and added the outlines. I don’t really remember how I finally got it to work because I tried so many things just to get Eagle files into Illustrator.

We don’t have Eagle, so can’t see the dimensions. I think Peter wanted the mounting hole positions relative to the headers, and board size. Maybe if you post the Eagle PCB svg, we can get the sizes off that.

Actually I was suggesting that as long as a piece of perf board fit over the headers on the real physical board matches the layout on my pcb in Fritzing its probably fine as is (you may want to add a note to the Readme that the pcb view may not be exact to warn folks to check if they need it). I suspect relatively few people will want the pcb view, and my version keeps Fritzing happy and thus is probably close enough. Like you I usually use only breadboard and schematic views to document one of projects so don’t often do much on pcb.

Peter

Peter, I have updated the GitHub repository with the latest (working) part file. I had mistakenly named each internal pin on the header layer (not the connector layer) to be connectorXpin, so when the SVG was generated, it created all sorts of crazy names.

I renamed all of the offending paths and re-exported the svg. I can’t find any -2 on the connector names. Which file(s) had this behavior?

Mojo fzpz on GitHub

The pins of the board line up on a perfboard. That’s how I originally calculated how many pins to use as distance. I think the problem was that I was working using the Pixel UOM instead of inches, so my pins were wrong (I copied the svg from the Fritzing template of the IC).

PCB Measurements:

The board has three “sections” - SV1, SV2, and JP2.

SV1 is the bottom 2x25 header looking at the board with the power jack to the left.

SV2 is the other 2x25 header at the top.

JP2 is the 2x5 header on the left.

Pin 1 of SV2 is 21 holes above pin 1 of SV1.
Pin 1 of JP2 is 3 holes down and 1 hole left of pin 1 of SV2 (top header)

So, in “code”(I hope this is right):

  1               SV2
  .........................
  .........................
   
..1 
..
..
.. JP2
..












  1              SV1
  .........................
  .........................

I just got the Eagle files from Embedded Micro for their Proto Shield. I’ve removed all of the vias so that only the holes for the headers remain (in addition to some wires that run into the board for easier integration.

I’m trying to get the DXF export into a workable SVG file now.

Edit: the DXF approach didn’t work because I couldn’t find a reliable DXF->SVG converter.

OK, I think I finally have it nailed down.

I worked with it in Fritzing and was able to line up some ICs to the pins on the Mojo.

I think everything is where it should be. I put the mounting holes on the silkscreen layer. The drill holes should be in the SVG, but they’re not showing up in Fritzing’s PCB view.

The newest Part file is located on my fritzing-parts GitHub page.

The Embedded Micro Mojo v3 pcb svg file, but since I imported it in to Inkscape its possible that Inkscape added the -2 (if it saw duplicate connections in the original svg file). I’ll have a look at your latest version and start from there.

Peter

OK, I’ve looked at your latest pcb, the problem is that the pads in the svg are set as paths. To work they need to be circles with a set diameter and stroke-width in Inkscape .078 " diameter with 20 (I think thousandths of an inch) stroke width. Those values then get sent to a python script which generates the pad at .078 inchs and sets the drill size to .038 (by subtracting 2*stroke-width from the diameter). When I use file->export->for production->extended gerber to create the gerber files that would be sent to the fab house to make the board, most of the pads don’t appear (although some do) and none of the drill holes make it. Inkscape really doesn’t like your pcb svg, it shows the entire top row of the top 2 row connector missing and a few pads in the next row missing, only 4 out of 6 of the side connector and only 8 of the 50 pads on the bottom. As an example here is pin 50 (the top left dual connector marked raw just below the square ground) from your pcb svg file:

  <g id="connector51pin">
    <path d="M25.2,16.09A1.91,1.91,0,1,1,23.29,18a1.91,1.91,0,0,1,1.91-1.91m0-.25A2.16,2.16,0,1,0,27.36,18a2.16,2.16,0,0,0-2.16-2.16Z" transform="translate(0 0)"/>

here is pin51 from my working pcb svg posted as Embedded Micro Mojo v4.fzpz:

  <circle
     style="fill:none;stroke:#ffbf00;stroke-width:20"
     cy="821.00012"
     r="29"
     id="connector51pin"
     gorn="0.2.0.24"
     cx="2470"
     transform="matrix(0,1,-1,0,0,0)" />

(note it is desirable to get rid of the transform if you can, I usually struggle with it because I don’t understand why Inkscape does it)

From this fritzing takes the r=“29” and the stroke-width:20 and the cx and cy values and the script then generates the gerber file from those values (ending up with a .038 drill hole in a .078 diameter pad). Fritzing seems to be dealing with the paths better than Inkscape (in that pcb view is showing the correct pads but without the red connector dots, presumably because it is looking for an id attribute that doesn’t exist in your file) but can’t determine a hole size due to no radius or stroke width. If you can get a construct like my pin 51 in place of all your connector paths (in the same x y coordinates) that should work.

Peter

Thanks, I don’t think Fritzing was designed with Illustrator in mind, so I’ve downloaded Inkscape and may try to learn that (since that’s what most of the tutorials on the web use).

I have attached the svg that was generated by my Eagle script, but the script was designed for print use, as it overlays white circles on top of black circles for the pads. I tried very hard to get Illustrator to convert them to circles, I’m not sure why they’re paths. However, now that you’ve given me the measurements, I may be able to write a script in Illustrator that converts the black circles in the Eagle SVG to the correct size and stroke. Then I can have it eliminate the white ones that are above the black ones and be set.

Here is a link to the SVG output from the Eagle2SVG script that I found for Eagle:

Eagle2SVG Mojo PCB SVG