Adding Analog to programmable devices
The perennial downfall of programmable devices is, of course, analog functionality. While there are many platforms available that integrate significant analog in the form of high-speed communications interfaces, the true pain point that needs to be addressed is the low-level circuit functions that integrate traditionally off-chip components.
After all, the physical layer (PHY) implementations found in today’s FPGAs completely isolate the designer from the analog portion of their problem, presenting a standard digital interface just like any other IP block.
The real analog challenge is in implementing general-purpose functions like analog-to-digital and digital-to-analog converters, amplifiers, and voltage comparators. This is not just because analog circuits represent a tricky design problem but rather that some of the difficulties get passed onto the end user.
With a digital function, for example, it is possible to place the implementation into a design, route to the appropriate I/Os, run static timing checks, and everything works as planned.
Certainly timing plays a key role in design but timing issues are often less a property of the IP being integrated and more a function of the speed at which a device is being run, the overall complexity of the entire design, and the level of utilization of the part, all of which impact the available routing resources.
With any analog design, however, the behavior of even simple circuits is directly impacted by configuration options, on-chip routing, and the external board design, and these are tricky to get right.
Switched capacitor blocks, for example, are powerful analog components because they can be configured in many ways, such as programmable gain amplifiers (PGA), trans-impedance amplifiers (TIA), analog filters, and even frequency mixers.
However, they also create a problem for designers because their behavior is dependent upon the configuration of the block and the frequency at which the capacitors are switched. Getting that functionality into a single chip is compelling but figuring out how to make it work from a datasheet and a bunch of configuration registers is quite the reverse.
The solution to this problem is, of course, software. Getting well-behaved, high-performance analog functions into a device is one thing. But without a development tool that takes the mystery out of the configuration process, the quick route to market often entails more off-chip components than were planned for when the programmable device was first selected.
The cure for these analog woes is a software tool that offers abstraction and parameterization by supporting devices with configurable analog blocks and abstracting implementation details away from how the function is presented to the designer.
Put another way, just as a designer does not need to understand how an old-fashioned ADC chip works, nor should they have to learn an integrated device’s register names and bit-fields just to set up an on-chip ADC.
Rather than getting bogged down calculating clock rates and messing with R and C values, developers need to be able to configure an ADC based on its features and characteristics such as available resolution, maximum sample rate, voltage range, and so on.
Once the ADC is selected for a design, the next step is to tailor it to the exact needs of an application. Ideally, this process is achieved using parameters. If an ADC supports a range or fixed set of values for, say the input range (the band of voltages that will not cause the ADC to saturate), then these choices should be presented in an intuitive manner and the decision achieved through the single action of selecting the desired parameter value.
Figure 2: Tools like PSoC Creator from Cypress Semiconductor enable the design of programmable analog circuitry through the selection of the desired functionality and avoid implementation details.
An example of a tool that does this for a programmable platform is PSoC Creator from Cypress Semiconductor. PSoC Creator supports the PSoC 3 and PSoC 5 devices with a schematic capture interface that lets the user draw the design they need and configure the selected parts through user-centric parameter editors.
Pre-built analog (and digital) components are presented to the user in a catalog, where they have access to example projects and data sheets, just like an off-chip ADC. When a component is instantiated in a design, the tool generates APIs for the application to interface to it without the need to decode register sets or worry about the order and timing of the ADC setup code.