Why is FAT Slow on SD Card?

This article discusses the performance limitations of the FAT file system with a focus on SD Card. After a brief refresher on FAT fundamentals, we show how FAT predictably achieves high access performances in the absence of fragmentation, but how fragmentation can build up until performances suddenly collapse. We conclude with a few important recommendations about the use of the FAT file system on embedded flash memory.

Zynq-7000 Bare-Metal Benchmarks

Picture of a Zynq-7000 SoC.

In this article we’ll look at some well-known CPU benchmarks, namely CoreMARK, Dhrystone, Whetstone and Linpack. Following that, we’ll look at the memory bandwidth and latency of the external DDR memory, On-Chip RAM and block RAM (BRAM) in the FPGA. Finally, we’ll round up with numbers on interrupt latency.

MicroBlaze Benchmarks Part 2 – Memory Bandwidth & Latency

Plot of a MicroBlaze system memory access latency and memory bandwidth versus the working set size.

Following the last article on core performance this article looks at the MicroBlaze memory bandwidth and access latency. Within the article benchmarks results are presented and discussed for various configuration of the MicroBlaze memory sub system such as local memory, AXI blobk RAM and external SDRAM memory.

MicroBlaze Benchmarks Part 1 – CoreMark Performance

Digilent ARTY7-35 development board with USB and Ethernet cables connected.

Following the success of the MicroBlaze configuration guide this article looks at core performance benchmarks of the Xilinx MicroBlaze using the EEMBC CoreMark benchmark. Like the previous article series, this article looks at various memory hierarchy configurations including local and external DDR memory and their impact on core performance.

MicroBlaze Configuration for an RTOS Part 3 – Cache Configuration

Close up view of a MicroBlaze system within the Xilinx Vivado IP Integrator.

This article will look into details the cache configuration for the MicroBlaze that was skipped in part 2. Configuring the cache correctly is critical to the overall performance of a MicroBlaze system and can also take a considerable amount of FPGA resource, especially block RAM. When configuring the cache, the goal is to use the minimum cache size required to meet the application’s performance but no larger.

MicroBlaze Configuration for an RTOS Part 2 – Configuration Parameters

Close up of the MicroBlaze IP block within the Xilinx Vivado IP Integrator.

This article aims at helping developers and designers who must configure a MicroBlaze system. Especially early on in the development process where the final firmware is not available for benchmarking and tweaking. At these early steps it is often necessary to select a good approximation of the final configuration to have a good idea of the resource usage of the MicroBlaze.

Introduction to On-Chip RAM

Block diagrams of three types of on-chip RAM (OCRAM) topology.

On chip ram or internal RAM, often abbreviated OCRAM or OCM has been around since the earliest System on Chips(SoCs). This articles goes over general purpose On-Chip RAM as well as more specialized forms such as Tightly Coupled Memory (TCM) and DMA buffers. We discuss major features and design considerations that could impact an embedded … Read more

BASEplatform Bring-Up on the Toradex Colibri iMX7

Close-up view of Toradex Colibri iMX7 in evaluation board.

This article will go over some aspects of the early bring-up experience using the BASEplatform™ on the Toradex Colibri iMX7 System on Module (SoM). It will also cover features and advantages of the Colibri SoM for embedded developers interested in using an RTOS or a bare-metal environment on the NXP i.MX7 SoC. The BASEplatform is … Read more

Estimating Worst Case Interrupt Latency at Runtime

Histogram of interrupt latency distribution with pase fail sections for demonstration.

This article shows a simple way of estimating worst case interrupt latency at runtime which can be implemented on most MCUs and RTOSes or even bare-metal. All that is needed is a hardware timer that can generate an interrupt after an arbitrary time delay. The technique is also rather non-intrusive, making it usable all the way to production without significantly affecting the application’s performance.