Lattice diamond / MachXO2

I've recently discovered that Lattice MachXO2 is quite a nice family of low-end FPGAs. I like especially the built-in oscillator (but +/- 5.5% is not good enough for async serial- +/- 1% would be better) and the built-in

1.2V core linear regulator which allows operation of the chip with 3.3V only (next generation they should work on an integrated switching regulator). I can also wish for more analog peripherals (ADC, comparators, anything I can find on PIC microcontrollers...).

Anyway, they certainly make the system cost lower when compared with Altera or Xilinx.

Also nice is the MachXO2 breakout board. The feature I like is that the built-in USB programmer chip from FTDI is a dual-function device. It has both the JTAG programmer, but also has a USB-to-RS-232 converter which shows up as a separate USB device in Windows. I can have a console serial connection with PuTTY and at the same time have the Lattice Programmer. Very nice.

It's been an interesting experience using Lattice Diamond. I think just a few minor tweeks would make it a lot more usable:

Dump the whole multiple-implementation within one design concept. Most projects are only going to have single implementaton, and I think it's reasonable to create a new project for a new implementaion (the new project could use the same source files an existing one to get the same effect as multiple implementations). Anyway, this would reduce clutter.

I got confused when trying to change the PULLMODE using the spreadsheet view. The problem is that spreadsheet view does not consider the .lpf file as changed until you actually move off of the cell you just modified. I think this is a straight bug.

There is a run-manager which lets you select an implementation and has its own button for "Run". When you run this way, the Export Files (like JEDEC or bitstream files) process is not automatically run.

But then there is the "Process" pulldown on the main menu bar. This also has "Run" and "Run All", but they are disabled unless you select something from the Process pane. "Run All" does actually run the Export Files process.

Anyway, it's pointless that there are multiple ways to run. Again, dump the multi-implementation stuff and have a single run-all button.

I tried the Reveal logic analyzer, but no luck first time. After insertion I can no longer place and route the design with the only error shown as "Done: error 1". Even after disabling Reveal (also not obvious how this is done), the error remains.

--
/*  jhallen@world.std.com AB1GO */                        /* Joseph H. Allen */ 
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) 
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p158?-79:0,q?!a[p+q*2 
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Reply to
Joseph H Allen
Loading thread data ...

While Diamond is not perfect you should remember that it is intended to support the whole range of Lattice FPGAs which includes devices much bigger devices than the XO2. The multiple ways of running get useful when it takes a significant amount of time to complete the whole process and you just want to run a bit of it. I haven't had much joy with Reveal. Don't hold your breath for ADCs - the XO3 (just announced and not available for some time) doesn't have any.

Michael Kellett

Reply to
MK

I've used a much worse built-in oscillator (from Spartan 6) for async serial communication. It turns out that most of the tolerance is due to process, which won't change for any given device. So in my application I made an auto-baud detect FSM and required the host side to send a capital "U" character with minimum 10 ms gap before and after it. This sets (or changes) the baud rate simply due to the sequence of 1's and 0's. I've found that even after significant warm up the link still operates within tolerance. Requiring the protocol to occasionally update the baud rate would allow for changes in temperature if necessary.

--
Gabor
Reply to
Gabor

I'm spoiled by Quartus-II: it has "revisions", but the feature is completely hidden unless you select Project=>Revisions. I use a source code control system, so having this feature in the FPGA is less necessary for me.

I'll keep trying it :-)

The field is wide open for these features. Logic is logic, so this could be something new to compete over.

--
/*  jhallen@world.std.com AB1GO */                        /* Joseph H. Allen */ 
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) 
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p158?-79:0,q?!a[p+q*2 
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Reply to
Joseph H Allen

Are you using CFGMCLK? Interesting.. +/- 55%! This seems to be available starting Virtex-4.

Well I guess you get auto baud rate detection as a side benefit.

--
/*  jhallen@world.std.com AB1GO */                        /* Joseph H. Allen */ 
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) 
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p158?-79:0,q?!a[p+q*2 
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Reply to
Joseph H Allen

ADCs are not quite Logic. Harder to get right, and more costly to test. However what they could include, which is just logic, is support for the isolated/separate Sigma-Delta ADC front ends from ADi / Maxim etc.

Reply to
jg

Exactly. I was pleasantly surprised at the low temperature drift in the Spartan 6, especially given the huge range over PVT. As I said it appears that Process gives the lion's share of the 55%.

In my case this came by necessity. I was using an external SiLabs clock generator that needed to be programmed via I2C in order to get any clocks to the FPGA. Once that is up and running, I've got some very precise clocks to use. Unfortunately the settings for the SiLabs chip get uploaded from a COM port, so I needed to have some way to bootstrap the system. The internal clock, bad as it is, saved me the expense of an additional clock oscillator. It also gives me a way to operate I2C, even when I already have the settings uploaded. The SiLabs chip stops outputting clocks while it is re-preogrammed. Of course an I2C master does not need a precise clock.

--
Gabor
Reply to
GaborSzakacs

Couldn't you have just used some default settings for the clock chip which would give you a workable baud rate, then update the settings from the com port?

--

Rick
Reply to
rickman

I did get it to work. One gotcha is that your clock (the sample clock for reveal) must be faster than the JTAG clock. I'm not really sure what frequency the JTAG clock is, but faster than 7 MHz but slower than 66.5 MHz.

Second is the error return mystery from par. Par completed, but GUI said it had an error. Even with the error return the GUI proceded with bitgen if I asked it to. The GUI is definitely rough.. I also experienced some more glitches with the spreadsheet view.

--
/*  jhallen@world.std.com AB1GO */                        /* Joseph H. Allen */ 
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) 
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p158?-79:0,q?!a[p+q*2 
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Reply to
Joseph H Allen

I could, but the settings for this particular chip would eat up a block RAM if I stored them internal to the FPGA. So I placed them in the attached SPI flash along with other general device settings. I could also pre-program the SPI flash but it's generally easier for manufactufing to upload everything starting from blank parts. Once the unit has settings uploaded, it can come up running on the next power cycle. I still keep the communication port working from the internal oscillator because it's easier than switching clocks, though. I do have code that calibrates the baud divisor when the external clocks are running. Still it wasn't too much of a hardship to require the auto-baud startup in the protocol from the PC host.

At one time I was generating MCS files for the device that contained both the FPGA bitstream and the settings, but it turns out that Impact is very slow and stupid about programming the SPI flash when there are big gaps between individual files, so the self-programming with upload from a 115,200 baud COM port was actually faster. Now we only use JTAG for the initial FPGA bitstream, and all subsequent updates are done via the COM port, including FPGA bitstream updates.

--
Gabor
Reply to
GaborSzakacs

MachXO2 fans may be interested in this stuff:

The pif board is an XO2 FPGA that plugs onto a Raspberry Pi.

formatting link

The tif board is an XO2 FPGA on a HID USB connection. HID is used so there is no need for software drivers.

formatting link

Both boards include all the software you need to download Lattice Diamond JEDEC to the board, plus example designs and an example of web control of a design inside the FPGA.

Tim

Reply to
Tim

So when does the XO3 version come out?

--

Rick
Reply to
rickman

As far as I can tell the XO3 will slot in above the XO2 and include stuff such as SERDES. Eventually something will replace the XO2 (only a couple of years old) but the XO3 parts that are being hinted at are not the ones.

I could very easily be completely wrong.

Reply to
Tim

I dunno. A few weeks ago I sent an email asking about the new line in the Flash series and I was asked how I knew it existed... I guess they are trying to keep a tight lid on it. Now they have some info they will share, but I guess you need approval from someone. I sent in a request and haven't heard anything back yet.

--

Rick
Reply to
rickman

Hi All I am athar kaludi (skype lailajamil) I NEED to Download LATTICE Semi Conductors Software for training fpga and other iCE stick - the link on page to download are all broken - I sent email to LATTICE no reply yet - PLEASE SOME HELP ME how to download software for lattice products . my Skype lailajamil regards snipped-for-privacy@gmail.com

Reply to
athar.kaludi

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.