Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Offshoot ideas #160

Open
rachitnigam opened this issue Mar 27, 2019 · 9 comments
Open

Offshoot ideas #160

rachitnigam opened this issue Mar 27, 2019 · 9 comments
Labels
Tracker Tracker for several smaller issues

Comments

@rachitnigam
Copy link
Member

Random, potentially malformed ideas for add-ons.

@rachitnigam rachitnigam added the Tracker Tracker for several smaller issues label Mar 27, 2019
@rachitnigam
Copy link
Member Author

--explain flag for errors

When a type error occurs, use the (currently non-existent) machinery to draw out an abstract design and show why the circuit diagram is invalid.

CC @sgpthomas

@rachitnigam
Copy link
Member Author

C2Fuse

Write a compiler that converts a random C/C++ program into a Fuse program. Having feature parity with Vivado HLS (i.e. C2Fuse fails iff HLS fails) would be really cool.

@sampsyo
Copy link
Contributor

sampsyo commented Mar 27, 2019

""Debug Symbols"" for EDA Failure Diagnosis

We'd like to be able to diagnose failures that happen later in the EDA toolchain—i.e., synthesis, technology mapping, and place-and-route—by exposing them in the source code. For example, if your design fails because the target FPGA doesn't have enough LUTs, we want to "blame" the consumption on some source-level construct in our language. This would require embedding (into the generated RTL) the analog of debug symbols in CPU object code to perform the reverse mapping to our source code.

@sampsyo
Copy link
Contributor

sampsyo commented Mar 27, 2019

Hardware Externs

Take hardware modules, either written directly in Verilog or in some other "generator" language like Chisel, and expose them as extern-like functions to Fuse programs. Seen this way, Fuse is a composition language for hand-coded RTL components. In the limit, we would replace built-in primitives like + with externs.

@rachitnigam
Copy link
Member Author

rachitnigam commented Apr 24, 2019

Fully serializable IR/AST

Tools like Jason’s automatic loop optimiser might want to use fuse instead of vivado HLS to write transformations and verify that they don’t violate the safety guarantees that Fuse provides. Having a common representation that be used by external tools and can be easily parsed back for typechecking would be useful for quickly integrating them with Fuse.

@rachitnigam
Copy link
Member Author

rachitnigam commented May 6, 2019

Demonstrate common SW compiler optimizations don’t make sense for HW

Most HLS tool from the past decade rely on LLVM/GCC toolchain to get SW optimizations “for free”. However some optimizations like loop order changes directly affect constructs like unrolled loops, pipelines and reduction trees.

This would involve implementing SW optimization passes and systematically showing that they generate bad hardware.

@rachitnigam
Copy link
Member Author

HLS for Digital Signal Processing

According to this overview doc by texas instruments, DSPs have similar restrictions to FPGA programs (statically known loop bounds/estimates for instruction pipelining etc.)

Might be worth targeting DSPs in the future.

@rachitnigam
Copy link
Member Author

Bindings in other languages

From talking to people in Oculus it seems having a whole new language is a non starter for any kind of adoption. One way to sidestep is problem in having bindings in C++ and Python that generate a Fuse AST and pass it onto the compiler.

This seems to be the strategy taken by Halide (by extension, TVM), TACO, etc.

@sampsyo
Copy link
Contributor

sampsyo commented Jul 20, 2019

^^ It occurs to me that "c2fuse" (#160 (comment)) could be construed as a different solution to the same problem of basic language familiarity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Tracker Tracker for several smaller issues
Projects
None yet
Development

No branches or pull requests

2 participants