Introducing Precursor

Precursor (pre·​cur·​sor | \ pri-ˈkər-sər):
1. one that precedes or gives rise to; a predecessor; harbinger
2. a pocketable open development board

Precursor is a mobile, open source electronics platform. Similar to how a Raspberry Pi or an Arduino can be transformed into an IoT gadget with the addition of a couple breakout boards, some solder, and a bit of code, Precursor is a framework upon which you can assemble a wide variety of DIY mobile applications.

Precursor is unique in the open source electronics space in that it’s designed from the ground-up to be carried around in your pocket. It’s not just a naked circuit board with connectors hanging off at random locations: it comes fully integrated—with a rechargeable battery, a display, and a keyboard—in a sleek, 7.2 mm (quarter-inch) aluminum case.

Precursor → Betrusted

Followers of my blog will recognize the case design from Betrusted, a secure-communication device. It’s certainly no accident that Precursor looks like Betrusted, as the latter is built upon the former. Betrusted is a great example of the kind of thing that you (and we) might want to make using Precursor. Betrusted is a huge software project, however, and it will require several years to get right.

Precursor, on the other hand, is ready today. And it has all of the features you might need to validate and test a software stack like the one that will drive Betrusted. We are also using the FPGA in Precursor to validate our SoC design, which will eventually give us the confidence we need to tape out a full-custom Betrusted ASIC, thereby lowering production costs while raising the bar on hardware security.

In the meantime, Precursor gives us a prototyping platform that we can use to work through user-experience challenges, and it gives you a way to implement projects that demand a secure, portable, trustable communications platform but that might not require the same level of hardware tamper resistance that a full-custom ASIC solution could provide.

And for developers, the best part is that Betrusted is 100% open source. As we make progress on the Betrusted software stack, we will roll those improvements back into Precursor, so you can count on a constant stream of updates and patches to the platform.

Hackable. In a Good Way.

Precursor is also unique in that you can hack many aspects of the hardware without a soldering iron. Instead of a traditional ARM or AVR “System on Chip” (SoC), Precursor is powered by the software-defined hardware of a Field Programmable Gate Array (FPGA). FPGAs are a sea of basic logic units that users can wire up using a “bitstream”. Precursor comes pre-loaded with a bitstream that makes the FPGA behave like a RISC-V CPU, but you’re free to load up (or code up) any CPU you like, be it a 6502, an lm32, an AVR, an ARM, or something else. It’s entirely up to you.

This flexibility comes with its own set of trade-offs, of course. CPU speeds are limited to around 100 MHz, and complexity is limited to single-issue, in-order microarchitectures. It’s faster than any Palm Pilot or Nintendo DS, but it’s not looking to replace your smartphone.

At Its Core

We describe bitstreams using a Python-based Fragmented Hardware Description Language (FHDL) called Migen, which powers the LiteX framework. (Migen is to LiteX as GNU is to Linux, hence we refer to the combination as Migen/LiteX.) The framework is flexible enough that we can incorporate Google’s OpenTitan SHA and AES crypto-cores (written in SystemVerilog), yet powerful enough that we can natively describe a bespoke Curve25519 crypto engine.

If you’ve ever wanted to customize your CPU’s instruction set, experiment with hardware accelerators, or make cycle-accurate simulations of retro-hardware, Precursor has you covered. And the best part is, thanks to Precursor’s highly integrated design philosophy, you can take all that hard work out of the lab and on the road.

On the Inside

And if you’re itching for a excuse to break out your soldering iron or your 3D printer, Precursor is here to give you one. While its compact form factor might seem limiting at first, we’ve observed that 80% of projects involve adding just one or two domain-specific sensors or hardware modules to a base platform. And most of those additions come on breakout boards that require only a handful of signal wires.

With eight GPIOs (configurable as three differential pairs and two single-ended lines) connected directly to the FPGA, Precursor’s battery compartment is designed to accommodate breakout boards. It also provides multiple power rails. You will find any number of third-party breakout boards with sensors ranging from barometers to cameras and radios ranging from BLE to LTE. Patch them in with a soldering iron, and you’re all set. The main trade-off is that, the more hardware you add, the less space you have left for your battery. Unless of course you build a bigger enclosure…

On the Outside

If you need even more space or custom mounting hardware, the case is designed for easy fabrication using an aluminum CNC machine or a resin printer. Naturally, our case designs are open source, and the native Solidworks CAD files we provide are constructed such that the enclosure’s length and thickness are parameterized.

Furthermore, Precursor’s bezel is a plain old FR-4 PCB, so if your application does not require a large display and a keyboard, you can simply remove them and replace the bezel with a full-sized circuit board. By way of example, removing the LCD and replacing it with a smaller OLED module would make room for a much larger battery while freeing up space for the custom hardware you might need to build, say, a portable, trustable, VPN-protected LTE hotspot.

Come Have a Look!

If you’ve ever wanted to hack on mobile hardware, Precursor was made for you. By combining an FPGA dev board, a battery, a case, a display, and a keyboard into a single thin, pocket-ready package, it makes it easier than ever to go from a concept to a road-ready piece of hardware.

Precursor will soon be crowdfunding on Crowd Supply. Learn more about its specifications on our pre-launch page, and sign up for our mailing list so that you can take advantage of early-bird pricing when the campaign goes live.

Meta

We’ve decided to do an extended pre-launch phase for the Precursor campaign to gauge interest. After all, we are in the middle of an unprecedented global pandemic, and one of the worst economic downturns in recorded history. It might seem a little crazy to try and fund the project now, but it’s also crazy to try and build trustable hardware that can hold up against state-level adversaries. We make decisions not on what is practical, but what is right.

The fact is the hardware is at a stage where we are comfortable producing more units and getting it into the hands of developers. The open question is if developers have the time, interest, and money to participate in our campaign. Initial outreach indicates there might be, but we’ll only find out for sure in the coming months. Precursor is not cheap to produce; I am prepared to accept a failed funding campaign as a possible outcome.

We’re also carefully considering alternate sources of funding, such as grants from organizations that share our values (such as NLNet) and commercial sponsors that will not attach conditions that compromise our integrity (you’ll notice the Silicon Labs banner at Crowd Supply). This will hopefully make the hardware more accessible, especially to qualified developers in need, but please keep in mind we are not a big corporation. As individual humans like you, we need to put food on the table and keep a roof over our heads. Our current plan is to offer a limited number of early bird units at a low price — so if you’re like me and worried about making ends meet next year, subscribe to our mailing list so you can hopefully take advantage of the early bird pricing. And if you’re lucky enough to be in a stable situation, please consider backing the campaign at a higher pricing tier.

Over the coming months, I’ll be mirroring some of the more relevant posts from the campaign onto my blog, sometimes with additional commentary like this. There’s over two years of effort that have gone into building Precursor, and I look forward to sharing with you the insights and knowledge gained on my journey.

26 Responses to “Introducing Precursor”

1. […] set to go up for pre-order through a Crowd Supply crowdfunding campaign soon, but Huang has published a blog post explaining the project and there are plenty of details on the Crowd Supply preview […]

2. […] Precursor (pre·cur·sor | pri-kr-sr):1. one that precedes or gives rise to; a predecessor; harbinger2. a pocketable open development board Precursor is a mobile, open source electronics platform. S… Read More […]

3. Really fantastic project. Looking forward to where it goes.

4. pelrun says:

Count me right the heck in.

I’ve been designing a replacement pcb for my venerable Sharp Zaurus so I can get my hardware keyboard pocket computer fix again with some modern ARM grunt… but this might just have derailed that project altogether. :D

5. Joe Hacker says:

I have a project that this piece of hardware might work extremely well for. The one issue is that I want the device to be able to pass data to a second device without the need for any networking or radio. So it would be USB or IRDA or something like that. So with this I am seeing USB only. I suppose I could implement the IRDA myself. Hmmm… Any other ideas?

What is the level of quality of random numbers generated by this thing?

6. Joe Hacker says:

Also, why $60 worth of FPGAs instead of a$1.50 ESP32 or something similar? We are that unsure if commercial ICs are not backdoored?

• bunnie says:

Precursor is security-first and assumes state-level adversaries. So yes, you basically answered the question.

• Joe Hacker says:

Just wondering, once you have your design completed and tape out, how do you know the design isn’t compromised at the manufacturer in some way if you have drawn enough attention by that point by state-level adversaries?

I thought of this issue a little bit myself. Using a totally integrated solution like an ESP32 is a bit of a security risk because, of course, the manufacturer could back door it where certain packets to the radio could allow them to do whatever on the CPU, including installing code.

However, if you have a two-part solution with a separate MPU IC and WiFi radio IC, how can it be backdoored, even if they try? You connect the MPU to the radio using a low-level link like SPI. Even if the radio manufacturer somehow has a back door in the radio, how could they ever know what needs to be sent over SPI, the only link to the MPU, to somehow install a backdoor into the MPU unless there is something a SPI backdoor on the MPU as well? Now you would need two hardware back doors in two places from two manufacturers who would have to collaborate to get them to work. And you could insert another circuit between the radio IC and the MCU IC to make sure only data in a certain format can be transmitted to add some resiliency to this by requiring any hack to additionally conform to your data format.

It may be overly complex, but it gets you to the point where you can use cheap commercial ICs.

What am I not seeing here?

• bunnie says:

You’ve actually described the basic architecture of Precursor. We use a WF200 wifi chip for the radio IC, and we have an embedded controller that configures/controls it and firewalls it from the secure FPGA SoC.

So the basic twist from what you’ve proposed is that the MPU IC is an FPGA, and not an off the shelf chip. We’re not so concerned about (in fact we assume) that the wifi chip has back doors; however, we do worry much more about the MPU having things like undocumented instructions that can violate security-critical assumptions. Therefore, the MPU is implemented with an FPGA where we can thoroughly inspect the implementation of the processor and confirm there is nothing out of place there.

7. […] Эндрю Хуанг, удостоенный премии EFF Pioneer Award 2012, представил открытую платформу Precursor, предназначенную для […]

8. […] “bunnie” Huang )宣布了开源移动硬件平台 Precursor，可用于组装各自 DIY […]

9. afbcom says:

Both FPGAs are highly utilized. Has there been any thought to offering a part with more fabric? Obviously this impacts battery and cost.

• afbcom says:

So the xc7s50 is the largest spartan 7 in the csga324 footprint. I understand the choice.

10. […] днях представлен проект открытой программной платформы для создания […]

11. Kele says:

How long the battery will last if it need to powerup a full ultilized S7?

• bunnie says:

The power draw of the system running full bore is around 150mA, and the battery is sized at 1100mAh, so that’s around 6 hours with safety margin. However, the system is designed to show a static image on the screen and receive wifi with a draw of less than 15mA, which gives you about 60 hours of standby with safety margin. Sleep/wake transition can happen in as little as 100ms.

Your actual battery life will depend upon how good your power management software is and what features your end application uses.

12. Dmitri says:

If you don’t mind, would like to ask a couple of questions (although I have never heard about this project before, so they may be rather stupid):

1) Regarding the ~100MHz RISC-V: AFAIK, Xilinx has its own soft core, called MicroBlaze. Wouldn’t it work faster?
Also there’s a Linux for it available.

2) You mention creating an LTE hotspot as one of the possible applications, but at the same time LTE radio is only mentioned in conjunction with a third-party board.
So am I correct to assume that by default Precursor has no built-in GSM/UMTS/LTE support?

I also didn’t notice anything like a GSM antenna in the photos, but I’m not so good in this field, as I specialize in storage devices like HDDs, SSDs, and so on.

Thanks!

• bunnie says:

1) The VexRISCV softcore we use has about the same performance as the MicroBlaze. The 100MHz speed is a reflection in part of using the low-leakage/low-power speed grade of the Xilinx FPGA for better battery life.

2) The LTE mention was a suggestion for a thing you could mod it do, but we don’t do it for you. The system only comes with wifi integrated to the mainboard.

13. GNUtoo says:

Hi,

I’ve a couple of questions:
– What is the maximum amount of external RAM that this FPGA / HDL combinaison could support?
– Would it be feasible or easy to add an MMU (to run standard GNU/Linux)?
– In the future ASIC version, would it have an MMU and what would be the maximum amount of external RAM that could be added to it?
– Does the Silicon Labs WF200C requires a nonfree firmware? If so, where is it located? On a dedicated flash chip?
– Is there a plan to have ASIC versions made to be the main SOC for other computers formfactors (desktops, laptops, etc), with hardware blocks for more controllers like display controllers, storage devices controllers, etc. In that case what kind of speed would be expected from the (ASIC) CPU?

Denis.

• GNUtoo says:

The crowdsupply page has the following:
> 100 MHz customized VexRISC-V RV32IMAC + MMU core with 4k caches

So I assume that it has an MMU and that it will most probably keep it in the ASIC version.

Denis.

• bunnie says:

“Maximum amount of RAM that could be supported” — that’s a hard one to answer. If you’re asking in terms of an address space limitation you can pretty much make it as large as you want. The FPGA has a PHY for DDR memory chips, but it sucks a huge amount of power, which is why we use low-power SRAMs.