I purchased a Xess XuLA2 FPGA kit a while ago. As preparation for a test with its VGA module , I'm trying out one of the utilities to automatically create pin mappings.
You can plug XuLA modules into several connectors. Based on your choice, you have to route your signals to the FPGA balls that are connected to the pins of that connector. And: Mapping FPGA pins to connector locations can be a dog.
I found out yesterday that there is a utility to perform this much dreaded task: the Pin Assignment Generator. |
Manual Pin Mapping
In an FPGA project, you define* the mapping between I/O signals and FPGA balls in a constraint file.
If you are writing for a project with a fixed layout, that's a one-off task.
With flexible kits (like the XuLA and its motherboard, where you can plug modules in different ports) things are different.
You'd have to look up the mapping between the connector you use and the FPGA I/Os. Then adapt the constraint file with the appropriate links.
The documentation has all info that's needed. But it's a tedious job.
Mapping Utility
Tedious work calls for automation. And there's good news.
There's a mapping utility xsconnect available for the XuLA family.
It's a Python script that does the whole cross-ref. It knows all XuLA products and their pinouts.
Based on your combination (what is plugged where in which motherboard for what FPGA board), it generates a ready-to-go mapping list.
In my case, I'm using a VGA module, plugged in connectors 2 and 3 of a motherboard version 4, running on an FPGA board version 2 .
I throw that combination to the utility, and it kindly creates the entries:
xsconn -p "StickIt! VGA V2" -m "StickIt! V4" -n pm2+pm3 -d "XuLA2"
output:
######################################################################## # StickIt! VGA V2 ==[pm2+pm3]==> StickIt! V4 ==> XuLA2 net b2 loc = c1; net b3 loc = j4; net b4 loc = k3; net g1 loc = b2; net g2 loc = e1; net g3 loc = h1; net g4 loc = r1; net hsync_n loc = r2; net r2 loc = f1; net r3 loc = m1; net r4 loc = m2; net vsync_n loc = t4; ########################################################################
You can then paste that in your constraint file and adapt the signal names to your design.
If your design uses the same signal names as the ones in the utility, you can just cut and paste.
Here's the relevant snippet of a constraint file I adapted for the above combination:
# Horizontal & vertical syncs. net hSync_bo loc = r2; net vSync_bo loc = t4; # Red, green, blue color components to VGA DACs. net red_o<1> FLOAT; net red_o<2> loc = f1; net red_o<3> loc = m1; net red_o<4> loc = m2; net green_o<0> FLOAT; net green_o<1> loc = b2; net green_o<2> loc = e1; net green_o<3> loc = h1; net green_o<4> loc = r1; net blue_o<0> FLOAT; net blue_o<1> FLOAT; net blue_o<2> loc = c1; net blue_o<3> loc = j4; net blue_o<4> loc = k3;
Where Next?
To get the utility, execute this command from your Python enabled computer:
easy_install xsconnect
It's open source. The version created by Xess supports all their FPGA boards, motherboards and plug-ins.
But it's extendable if you want. You can add your own designs, or use it in a completely different context where flexible FPGA pin mapping is needed.
* generalisation. There are other options
Top Comments