























Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
ASIC and FPGA cheat sheet ... Virgil is an object-oriented language developed at UCLA ... targeted to programming small devices, e.g., sensor nodes.
Typology: Schemes and Mind Maps
1 / 31
This page cannot be seen from the preview
Don't miss anything!
UCLA Computer Science Department
UCLA Computer Science Department
University of California, Los Angeles
University of California, Los Angeles
Our tool: from OO to FPGA;
Our tool: from OO to FPGA; big energy savings
big energy savings
OO = object oriented language
OO = object oriented language
FPGA = field programmable gate array
FPGA = field programmable gate array
ASIC and FPGA cheat sheet
Finished ASIC designs: 3,408 in 2006; 3,275 in 2007; then
fell 9.5% in 2008 and fell again about 22% in 2009
Now: 30x more design starts in FPGA over ASIC
Projected market for FPGAs in 2016: $9.6 billion
Feature sizes: 2002 Virtex-2 90 nm
2008 Virtex-5 65 nm
2009 Virtex-6 40 nm
2010 Virtex-7 28 nm
The Challenge
Compile a bare object-oriented program to an FPGA with
significant energy savings compared to a CPU, while still
maintaining acceptable performance and space usage.
How some people program FPGAs nowadays
Program in a small subset of C
Compile to VHDL or Verilog with a high-level synthesis tool
AutoESL: AutoPilot ( based on xPilot [Cong et al., UCLA] )
Synopsys: Synphony C Compiler
Mentor Graphics: Catapult
Ponder whether writing directly in VHDL is better
Fine-tune speed?
Fine-tune energy use?
Fine-tune area
Really?
From OO to FPGA: a JVM on an FPGA
Schoeberl [2004]: execute bytecodes on a FPGA
No comparisons with a CPU
From OO to FPGA: state of the art
Liquid Metal (Auerbach, Bacon, Cheng, Rabbah, IBM)
Goal: one language for all platforms
Approach: careful language design
Key papers: ECOOP 2008 (DES)
OOPSLA 2010 (DES + JPEG decoder)
Our goals:
A match made in heaven?
A match made in heaven?
Virgil is an object-oriented language developed at UCLA
Virgil is an object-oriented language developed at UCLA
Titzer
Titzer , OOPSLA 2006;
Titzer
Titzer & P., CASES 2007],
targeted to programming small devices, e.g., sensor nodes
targeted to programming small devices, e.g., sensor nodes
The Virgil compiler translates to C
The Virgil compiler translates to C
AutoPilot
AutoPilot is a C to FPGA synthesizer
is a C to FPGA synthesizer
Can we doCan we do
Virgil
Virgil C
?? AutoPilot
The AutoPilot subset of C
Places severe limitations on many C constructs
Pointers
Struct casting
Contents of structs
Rules out the traditional way of compiling OO languages
Cannot represent objects with method tables
Cannot use structs
Our technique
OO to FPGA = type case for method dispatch +
grouped arrays +
hybrid object layout
Key features of OO
Classes, extends, fields, constructors, methods
class Point {
int x,y;
Point(int a, int b) {
x=a; y=b;
void move(int d) {
x=x+d; y=y+d;
class ColorPoint extends Point {
int color;
ColorPoint(int a, int b, int c) {
super(a,b); color=c;
void bump(int c) {
color=c;
this.move(1);
Key features of OO
Classes, extends, fields, constructors, methods
class Point {
int x,y;
Point(int a, int b) {
x=a; y=b;
void move(int d) {
x=x+d; y=y+d;
class ColorPoint extends Point {
int color;
ColorPoint(int a, int b, int c) {
super(a,b); color=c;
void bump(int c) {
color=c;
this.move(1);
Key features of OO
Classes, extends, fields, constructors, methods
class Point {
int x,y;
Point(int a, int b) {
x=a; y=b;
void move(int d) {
x=x+d; y=y+d;
class ColorPoint extends Point {
int color;
ColorPoint(int a, int b, int c) {
super(a,b); color=c;
void bump(int c) {
color=c;
this.move(1);
Key features of OO
Classes, extends, fields, constructors, methods
class Point {
int x,y;
Point(int a, int b) {
x=a; y=b;
void move(int d) {
x=x+d; y=y+d;
class ColorPoint extends Point {
int color;
ColorPoint(int a, int b, int c) {
super(a,b); color=c;
void bump(int c) {
color=c;
this.move(1);