Giter VIP home page Giter VIP logo

pp4fpgas's Introduction

pp4fpgas

Parallel Programming for FPGAs

GitHub Actions Status: CI GitHub view download

Ryan Kastner, Janarbek Matai, and Stephen Neuendorffer

An open-source high-level synthesis book

http://hls.ucsd.edu/

Background

Parallel Programming for FPGAs is an open-source book aimed at teaching hardware and software developers how to efficiently program FPGAs using high-level synthesis (HLS). The authors developed the book as we noticed a lack of material aimed at teaching people to effectively use HLS tools.

The book was developed over many years to serve as a primary reference for UCSD 237C — a hardware design class targeting first-year graduate students and advanced undergraduate students. We hope that you find it useful for learning more about HLS, FPGAs, and system-on-chip design.

The book is licensed under the Creative Commons Attribution 4.0 International License. We encourage you to make edits, add material, and fix errors. Thanks to those who have made pull requests over the years. Please keep them coming!

Feel free to grab the source at our github repo https://github.com/KastnerRG/pp4fpgas or for quicker access, here is the pre-built pdf.

Some fine people have translated this book into Mandarin - pp4fpgas-ch

If you want to cite this book, please use the arxiv submission:

@ARTICLE{2018arXiv180503648K,
author = {{Kastner}, R. and {Matai}, J. and {Neuendorffer}, S.},
title = "{Parallel Programming for FPGAs}",
journal = {ArXiv e-prints},
archivePrefix = "arXiv",
eprint = {1805.03648},
keywords = {Computer Science - Hardware Architecture},
year = 2018,
month = may
}

pp4fpgas's People

Contributors

anderspitman avatar arkhodamoradi avatar codspalaniappan95 avatar davidmetz avatar jcrisologo avatar jiafulow avatar jmduarte avatar level2fast avatar linnaikae avatar mithro avatar mustafa3296 avatar nn708 avatar omasanori avatar qkgautier avatar rck289 avatar stephenneuendorffer avatar sthornington avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pp4fpgas's Issues

The .tex files

Could you please give us a guide to use .tex files to create latest pdf file ?I have no idea about how to use them. Thank you 

.dat files

There is no XXX.gold.8.dat files which will be used in C Simulation !!!

Clean up ZIP files?

This repository contains Vivado_HLS_Tutorial_2019.zip and Vivado_HLS_Tutorial.zip and they seem copies of the UG871 official tutorial. They probably are better to be removed from the repository. Other ZIP files in labs/ may also be removed since some of them are already extracted in the same directory.

You can use BFG Repo-Cleaner to remove files from the entire history of a repository.

The missing files in the examples folder

Hi Kastner,
Recently, I'm working with the FFT Project using the baseline code in the book ,but I couldn't find the exact "fft_stage_one", "fft_stage_two" and "fft_stage_three" function files mentioned in the "fft_stages.cpp" file in the examples folder.
My partner is working with the CORDIC Project. There is a top file included in the "cordic.c" file called "cordic.h" which is not included in the examples folder also.
Would you please help us with this issue?
Thank you so much.

typo error on Figure 8.8 code?

Is RAW correct
in #pragma HLS DEPENDENCE variable=hist inter RAW distance=2 ?
I think the following is WAR(write after read)
hist[val] = hist[val] + 1;
Could you explain why it is not WAR but RAW?
Is it because of his[val] read at i+1(right-hand side of the equal) after hist[val] write at i(left-hand side of the equal) ?

Mergesort achieves II=2 for DTYPE=float

Hi there,

I just noticed that the book points out that the restructured code for merge sort can achieve II=1 while the current settings in merge_sort.h which define DTYPE as float limit the achievable II to 2.
It might be better to set the default DTYPE to int, so the code would achieve II=1 without any modifications.

Figure 3.2 notation error

In Figure 3.2, we are rotating vector from 1) to 5) with each step rotation from the previous output.
So

  1. 0°+45°=45°
  2. 45°+26.565°=71.565°
  3. 71.565°-14.036°=57.529°
  4. 57.529°+7.125°=64.654°
  5. 64.64°-3.576°=61.078°

However,
5) didn't start with the previous output from 4) 64.654. But the result 61.078 is calculated from 64.654
So it should change 64.64 to 64.654

cordic chapter: rounding requires corrections

I believe there is misleading or even factually incorrect info in "3.5.3 Overflow, Underflow, and Rounding". I think most of that is because in the examples only one bit is dropped and then half of the cases are ties.

In particular: the behaviour of round() and lrint() (for lrint we have to assume FE_TONEAREST mode is set, more info here) are actually rounding to the nearest integer and they only differ in the case of ties.

All the variants are well explained in: https://en.wikipedia.org/wiki/Rounding#Rounding_to_integer

Index out of range possible in merge program

The merge sort program here:

pp4fpgas/examples/merge_sort.cpp

has the following test statement that can fail:

if((f1 < i2 && in[f1] <= in[f2]) || f2 == i3)

When f2 == i3, the in[f2] test fails for array index out of range. The code appears to work if the in[f2] test is separated and not performed when the values are equal.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.