Embedded IP Core

Welcome to your journey into the world of Embedded Linux development, where you will explore the integration of cutting-edge technologies and innovative methodologies. This guide will take you from the basics to mastering IP core development with the KRIA KR260 kit, covering C/C++, Python, Rust, VHDL, Verilg and more.


Hazem Khaled
August 2024

Foreword

Welcome to this comprehensive guide dedicated to exploring the world of Embedded Linux development using the KRIA KR260 kit. This document is not just another technical manual; it is a journey through the integration of various programming languages and hardware architectures, focusing on mastering the art of IP core development for Xilinx's MPSOC Ultrascale platform.

Why This Guide?

In the rapidly evolving landscape of embedded systems, staying updated with the latest tools and technologies is crucial. The KRIA KR260 kit provides a robust platform for developers to explore and implement advanced embedded solutions, especially in applications requiring high performance and flexibility.

This guide is crafted to help you, whether you're just starting or are already familiar with embedded systems, to grasp the intricacies of working with Embedded Linux, C/C++, Python, and Rust. We will also dive into the development and integration of IP cores using Vivado, as well as explore the powerful RISC-V processor architecture.

What to Expect

Throughout this guide, you will:

  • Start Simple: Begin with the basics of setting up your KRIA KR260 kit and the necessary development environment.
  • Explore Languages: Learn how to leverage C/C++, Python, and Rust for different aspects of your project.
  • Master IP Core Development: Delve into IP core development using Vivado, with a focus on the MPSOC Ultrascale platform.
  • Integrate and Innovate: Understand how to bring all these components together to create innovative solutions that push the boundaries of what's possible in embedded systems.

Who Is This For?

This guide is for developers, engineers, and enthusiasts who are passionate about embedded systems and looking to deepen their knowledge. Whether you're aiming to develop commercial solutions or simply explore the capabilities of the KRIA KR260 kit, this guide will serve as your roadmap to success.

Let's Begin

I hope this guide will be as rewarding for you to follow as it has been for me to create. Let's embark on this journey together and unlock the full potential of the KRIA KR260 kit.

Happy coding and innovating!

Introduction

This book is a comprehensive guide to embedded Linux development using the KRIA KR260 kit. It covers a wide range of topics, from the basics of embedded development to advanced concepts like IP core creation, RISC-V architecture implementation, and running multiple operating systems. The book aims to equip readers with the knowledge and skills to develop high-performance embedded systems using the KRIA platform.

Introduction to the Book Parts

Part A: Fundamental Technologies

This section will lay the groundwork by exploring the essential technologies you'll need to master in order to work effectively with the KRIA KR260 kit. We will cover programming languages like RUST, Python, and C/C++, which are vital for software development. Additionally, you’ll be introduced to VHDL and Verilog, the hardware description languages crucial for FPGA design and development.

Part B: KRIA Hardware and Board Bring-Up

In this part, we dive into the specifics of the KRIA hardware. You'll learn how to bring up the board, customize the Linux image, and ensure that your environment is ready for development. This section is crucial for setting the stage for subsequent development tasks.

Part C: IP Core Development for Ultrascale FPGA Family

This section focuses on the development of IP cores specifically for the Ultrascale FPGA family. We'll explore the powerful tools in Vivado, guide you through creating your own IPs, and introduce you to ready-to-use IPs within the Vivado ecosystem.

Part D: Integrating IP with Custom Linux Core

Here, we will merge software and hardware worlds by integrating the IP cores developed in Part C with a custom Linux core. This part is pivotal as it covers the interaction between hardware design and software control, ensuring a seamless workflow.

Part E: RISC-V Architecture Implementation

In this part, we'll take a deep dive into implementing the RISC-V architecture. You'll learn how to customize it using Vivado, understanding the flexibility and power of RISC-V in the context of embedded systems.

Part F: Running Dual OS Kernels on KRIA SOM Processors

The final part of the book will introduce advanced concepts, including running two OS kernels on the KRIA SOM processors. This section will provide you with the knowledge to leverage the full capabilities of the KRIA platform in complex, multi-OS environments.

Part A - Getting Started

Chapter 1 - RUST

1.1 Installing rustup on Linux or macOS

If you’re using Linux or WSL, open a terminal and enter the following command:

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

Linux users should generally install GCC or Clang, according to their distribution’s documentation. For example, if you use Ubuntu, you can install the build-essential package.

To check whether you have Rust installed correctly, open a shell and enter this line:

$ rustc --version

You should see the version number, commit hash, and commit date for the latest stable version that has been released, in the following format:

rustc x.y.z (abcabcabc yyyy-mm-dd)

If you see this information, you have installed Rust successfully! If you don’t see this information, check that Rust is in your %PATH% system variable as follows.

$ echo $PATH

If that’s all correct and Rust still isn’t working, there are a number of places you can get help. Find out how to get in touch with other community members on [the community page][community].

Once Rust is installed via rustup, updating to a newly released version is easy. From your shell, run the following update script:

$ rustup update

To uninstall Rust and rustup, run the following uninstall script from your shell:

$ rustup self uninstall

1.2 Running Hello world example

create main.rs file with this rust code

fn main() {
    println!("Hello, world!");
}
  • build and run using rustc
 rustc main.rs
$ ./main
Hello, world!

Chapter 2 - Python

Chapter 3 - C_C++

Chapter 4 - VHDL

Chapter 5 - Verilog

Part B - Hardware

Part C - IP Core Development

Part D - Integrating IP with Custom Linux Image

Part E - RISC-V Architecture

Part F - Running Dual OS Kernels