Common Vivado Issues on Windows for ARM Developers

Developing applications for ARM-based systems using Xilinx’s Vivado Design Suite on Windows can be challenging at times. Vivado provides a comprehensive integrated development environment (IDE) for synthesizing, implementing and debugging hardware designs, along with SDK for creating embedded software applications. However, users may encounter various issues when trying to get started with Vivado on Windows,…

Using ST-Link debugger with Cortex-M1 FPGA design

The ST-Link debugger is an extremely useful tool for debugging and programming Cortex-M microcontroller designs implemented in an FPGA. By connecting the ST-Link to the SWD (Serial Wire Debug) header on the FPGA board, users can leverage the full debug and programming capabilities offered by ST-Link to develop and test their Cortex-M1 FPGA design. Overview…

Using De Bruijn sequences for faster count leading zeros (CLZ)

The count leading zeros (CLZ) operation is an important function in many computing applications, especially on microcontrollers and other resource-constrained devices. CLZ counts the number of leading zero bits before the first 1 bit in a word. An efficient CLZ implementation allows faster bit scanning and manipulation operations. On ARM Cortex-M microcontrollers, CLZ is provided…

Optimizing 32×32 bit Multiplication on Cortex-M0/M0+/M1

Performing fast 32-bit multiplications is crucial for many embedded and IoT applications using Cortex-M0/M0+/M1 chips. This article provides an in-depth guide on optimizing 32×32 bit multiplications on these microcontrollers. The Basics of 32-bit Multiplication Conceptually, multiplying two 32-bit numbers requires multiplying each bit of one operand with each bit of the other operand. This generates…

Merging FPGA bitstream with Cortex-M1 application hex file

When working with certain ARM Cortex-M1 microcontrollers that have an integrated FPGA fabric, it is necessary to merge the FPGA bitstream file with the Cortex-M1 application hex file into a single binary that can be flashed onto the device. This allows the FPGA fabric to be programmed with custom logic while also loading the Cortex-M1…

Running Cortex-M1 on Artix-7 without debugger

Getting Cortex-M1 running on an Artix-7 FPGA without a debugger can be challenging, but is certainly achievable with some effort. This article will walk through the key steps and considerations for accomplishing this goal. Overview of Cortex-M1 and Artix-7 The Cortex-M1 processor is a 32-bit ARM processor intended for microcontroller applications. It has a simplified…

Tips on Implementing Cortex-M1 Bootloader

Implementing a bootloader for Cortex-M1 chips allows greater control and customization of the startup process. A properly implemented bootloader can enable features like firmware updates, encryption, and debugging. This guide provides key tips and considerations when developing a Cortex-M1 bootloader. 1. Understand the Cortex-M1 Boot Process The first step is understanding the default boot sequence…

Modifying Stack Pointer (SP) and Program Counter (PC) in Cortex-M1

The stack pointer (SP) and program counter (PC) are important registers in the Cortex-M1 processor that control program execution flow. Directly modifying these registers allows developers fine-grained control over the stack and program flow. However, care must be taken as incorrect modifications can lead to crashes or undefined behavior. Stack Pointer (SP) The stack pointer…