We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

Showing results for 
Search instead for 
Did you mean: 

Zynq-based open-source programmable RF transceiver project illustrates good register-based I/O design

Xilinx Employee
Xilinx Employee
0 1 94K

My daily Google search for “Zynq” turned up this new and incredibly interesting open-source project to develop a Zynq-based driver for the Lime Microsystems LMS7002M second-generation field programmable RF (FPRF) transceiver IC. Myriad-RF was founded by Lime Microsystems, a supplier of flexible transceiver ICs. The project, labeled as being in the incubation stage, is located on the Myriad RF Web site and the project leader is Josh Blum. The Lime Microsystems LMS7002M has a dual-transceiver architecture with on-chip digital signal processing functions that support 2×2 MIMO. The LMS7002M can run any mobile communications and wireless standard including 2G, 3G, and 4G variants and WiFi–licensed and unlicensed. Development is taking place using a Zynq-based Avnet MicroZed board with a Lime Microsystems EVB7 LMS7002M eval board plugged into the MicroZed board’s FMC connector. If you’re into RF design, you’ll want to take a look at this project. However, even if you’re not into RF, you’re going to want to look at this project. Here’s why.


Blum writes: “The LMS7002M is a dual transceiver containing just about everything you would want in a radio. Programmable clocking and synthesizers, built-in ADCs and DACs, highly configurable signal processing chains with interpolation and decimation. Capturing this into a higher-level user driver means taking on an intimate understand of this extremely flexible and highly complex part. So how does one get started?”


“…the LMS7002M is organized into separate sections with well-defined boundaries. And the diagrams for each section clearly point out which registers are responsible for control for the components within the section at hand. The driver development basically mirrors these sections. So, starting with one section at a time, I began working with the external data IO interfaces, clock generation, and gradually pushing my way into the direction of the RF sections. Now, the new C driver may not initially cover all of the LMS7002M capabilities, but because the driver is organized into well-defined sections, there is a very structured way for anyone to come along and to add new functionality to the driver.”


Blum makes the LMS7002 IC sound a lot like any other complex chip you might want to connect to a processor and his next paragraph illustrates an admirable approach to dealing with this complexity—one that you might want to consider emulating:


“There are 1000s of registers spread across a 16 bit address field, many of which are actually shadow registers, duplicated for the dual channels A and B. To avoid careless mistakes involving bit shifts and masks, this part of the code is completely generated. So, I went through the painful task of manually transcribing the register map into a JSON format which I used to generate a data structure for all registers, and utility functions to pack and unpack these registers into the 16 bit formatting used inside the LMS7002M. This makes the code a great deal cleaner and easier to spot errors. I only wished that lime had provided some sort of register spreadsheet (or PDF that could be copied with table order intact) to simplify this transcribing step. I have had my share of adventures discovering typos in the data sheets and magic registers, and I am sure there are more to come.”





Tags (2)
1 Comment