RAMP Retreat, UC Berkeley

Slides:



Advertisements
Similar presentations
Multiple Processor Systems
Advertisements

ECOE 560 Design Methodologies and Tools for Software/Hardware Systems Spring 2004 Serdar Taşıran.
ECE Synthesis & Verification - Lecture 2 1 ECE 667 Spring 2011 ECE 667 Spring 2011 Synthesis and Verification of Digital Circuits High-Level (Architectural)
High Level Languages: A Comparison By Joel Best. 2 Sources The Challenges of Synthesizing Hardware from C-Like Languages  by Stephen A. Edwards High-Level.
SpecC and SpecCharts Reviewed and Presented by Heemin Park and Eric Kwan EE202A - Fall 2001 Professor Mani Srivastava.
Evolution and History of Programming Languages Software/Hardware/System.
Synchron’08 Jean-François LE TALLEC INRIA SOP lab, AOSTE INRIA SOP lab, EPI AOSTE ScaleoChip Company SoC Conception Methodology.
1 Breakout thoughts (compiled with N. Carter): Where will RAMP be in 3-5 Years (What is RAMP, where is it going?) Is it still RAMP if it is mapping onto.
Partial Order Reduction for Scalable Testing of SystemC TLM Designs Sudipta Kundu, University of California, San Diego Malay Ganai, NEC Laboratories America.
RAMP Common Interface Krste Asanovic Derek Chiou Joel Emer.
Murali Vijayaraghavan MIT Computer Science and Artificial Intelligence Laboratory RAMP Retreat, UC Berkeley, January 11, 2007 A Shared.
1 RAMP Infrastructure Krste Asanovic UC Berkeley RAMP Tutorial, ISCA/FCRC, San Diego June 10, 2007.
Mahapatra-Texas A&M-Fall'001 Codesign Framework Parts of this lecture are borrowed from lectures of Johan Lilius of TUCS and ASV/LL of UC Berkeley available.
Center for Embedded Computer Systems University of California, Irvine and San Diego SPARK: A Parallelizing High-Level Synthesis.
1 Chapter 7 Design Implementation. 2 Overview 3 Main Steps of an FPGA Design ’ s Implementation Design architecture Defining the structure, interface.
Roza Ghamari Bogazici University April Outline Introduction SystemC Language Formal Verification Techniques for SystemC Design and Verification.
December 10, 2009 L29-1 The Semantics of Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute.
1 VERILOG Fundamentals Workshop סמסטר א ' תשע " ה מרצה : משה דורון הפקולטה להנדסה Workshop Objectives: Gain basic understanding of the essential concepts.
Chap. 1 Overview of Digital Design with Verilog. 2 Overview of Digital Design with Verilog HDL Evolution of computer aided digital circuit design Emergence.
CAD Techniques for IP-Based and System-On-Chip Designs Allen C.-H. Wu Department of Computer Science Tsing Hua University Hsinchu, Taiwan, R.O.C {
COMPUTER SCIENCE &ENGINEERING Compiled code acceleration on FPGAs W. Najjar, B.Buyukkurt, Z.Guo, J. Villareal, J. Cortes, A. Mitra Computer Science & Engineering.
SystemC: A Complete Digital System Modeling Language: A Case Study Reni Rambus Inc.
Design Verification An Overview. Powerful HDL Verification Solutions for the Industry’s Highest Density Devices  What is driving the FPGA Verification.
Hardware Design Environment Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Chonnam national university VLSI Lab 8.4 Block Integration for Hard Macros The process of integrating the subblocks into the macro.
Array Synthesis in SystemC Hardware Compilation Authors: J. Ditmar and S. McKeever Oxford University Computing Laboratory, UK Conference: Field Programmable.
September 3, 2009L02-1http://csg.csail.mit.edu/korea Introduction to Bluespec: A new methodology for designing Hardware Arvind Computer Science & Artificial.
Introduction to Bluespec: A new methodology for designing Hardware Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology.
Languages for HW and SW Development Ondrej Cevan.
Introduction to VLSI Design – Lec01. Chapter 1 Introduction to VLSI Design Lecture # 11 High Desecration Language- Based Design.
Lecture 12: Reconfigurable Systems II October 20, 2004 ECE 697F Reconfigurable Computing Lecture 12 Reconfigurable Systems II: Exploring Programmable Systems.
ECE-C662 Lecture 2 Prawat Nagvajara
1 Hardware/Software Co-Design Final Project Emulation on Distributed Simulation Co-Verification System 陳少傑 教授 R 黃鼎鈞 R 尤建智 R 林語亭.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Introduction to Bluespec: A new methodology for designing Hardware Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology.
3/12/07CS Visit Days1 A Sea Change in Processor Design Uniprocessor SpecInt Performance: From Hennessy and Patterson, Computer Architecture: A Quantitative.
Introduction to Bluespec: A new methodology for designing Hardware Arvind Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology.
Problem: design complexity advances in a pace that far exceeds the pace in which verification technology advances. More accurately: (verification complexity)
1 COMP427 Embedded Systems Lecture 3. Virtual Platform Prof. Taeweon Suh Computer Science Education Korea University.
EECE 320 L8: Combinational Logic design Principles 1Chehab, AUB, 2003 EECE 320 Digital Systems Design Lecture 8: Combinational Logic Design Principles.
SUBJECT : DIGITAL ELECTRONICS CLASS : SEM 3(B) TOPIC : INTRODUCTION OF VHDL.
EMT 351/4 DIGITAL IC DESIGN Week # 1 EDA & HDL.
System-on-Chip Design
Advanced Computer Systems
Adapted from Krste Asanovic
VLSI Testing Lecture 5: Logic Simulation
EEE2135 Digital Logic Design Chapter 1. Introduction
Topics Modeling with hardware description languages (HDLs).
VLSI Testing Lecture 5: Logic Simulation
Andrew Putnam University of Washington RAMP Retreat January 17, 2008
Part 3 Design What does design mean in different fields?
Vishwani D. Agrawal Department of ECE, Auburn University
Hierarchical Architecture
Design Flow System Level
Topics Modeling with hardware description languages (HDLs).
Introduction to cosynthesis Rabi Mahapatra CSCE617
Reconfigurable Computing
Figure 1 PC Emulation System Display Memory [Embedded SOC Software]
Field Programmable Gate Array
Field Programmable Gate Array
Field Programmable Gate Array
Lecture 18 X: HDL & VHDL Quick Recap
All Programmable FPGAs, SoCs, and 3D ICs
ECE-C662 Introduction to Behavioral Synthesis Knapp Text Ch
VHDL Introduction.
Win with HDL Slide 4 System Level Design
A Refinement Calculus for Promela
THE ECE 554 XILINX DESIGN PROCESS
Digital Designs – What does it take
THE ECE 554 XILINX DESIGN PROCESS
Presentation transcript:

RAMP Retreat, UC Berkeley SMASH: The C++ Layer Krste Asanovic krste@mit.edu MIT Computer Science and Artificial Intelligence Laboratory http://cag.csail.mit.edu/scale RAMP Retreat, UC Berkeley January 11, 2007

SMASH: SiMulation And SyntHesis Goal: One framework for both architectural exploration and chip design and verification Approach: High-level design discipline where design expressed as network of transactors (transactional actor) Transactors (aka units) refined down to RTL implementations Design structure preserved during refinement From my perspective, RDL & RAMP are pieces of SMASH

Transactor Anatomy Transactor Output queues Input queues Transactions Transactor unit comprises: Architectural state (registers + RAMs) Input queues and output queues connected to other units Transactions (guarded atomic actions on state and queues) Scheduler (selects next ready transaction to run) Transactions Output queues Input queues Scheduler Transactor Architectural State Advantages Handles non-deterministic inputs Allows concurrent operations on mutable state within unit Natural representation for formal verification

RAMP Design Framework Overview Target System: the machine being emulated Describe structure as transactor netlist in RAMP Description Language (RDL) Describe behavior of each leaf unit in favorite language (Verilog, VHDL, Bluespec, C/C++, Java) CPU Interconnect Network DRAM 2VP70 FPGA RDL Compiled to FPGA Emulation BEE2 Host Platform RDL Compiled to Software Simulation Workstation Host Platform Host Platforms: systems that run the emulation or simulation Can have part of target mapped to FPGA emulation and part mapped to software simulation SMASH/C++ is the way to write leaf units in C++, either for use with RDL or for standalone C++ simulation

What’s in SMASH/C++? A C++ class library plus conventions for writing transactor leaf units These should work within a RDL-generated C++-harness In addition, libraries for channels, configuration, and parameter passing code to support standalone C++ elaboration and simulation Also, can convert HDL modules into C++ units for co-simulation Verilog -> C++ using either Verilator or Tenison VTOC Bluespec -> C++ using Bluespec Csim

Why C++? I thought RAMP was FPGAs? Initial design in C++, eventually mapped into RTL Much faster to spin C++ design than to spin FPGA design Hardware verification needs golden model Some units might only ever be software Power/temperature models Disk models

SMASH/C++ Code Example – Leaf Unit struct Increment : public smash::IUnit_LeafImpl { // Parameters static const smash::Parameter<int> inc_amount; // Port functions smash::InputPort<IntMsg>& in(){return m_in;} smash::OutputPort<IntMsg>& out(){return m_out;}   void elaborate(smash::ParameterList& plist) { m_inc = plist.get(Increment::inc_amount, 1); }; bool tick() if ( xactInc() ) return true; else if ( xactBumpInc() ) return true; return false; }  private: // Ports smash::InputPort<IntMsg> m_in; smash::OutputPort<IntMsg> m_out; // Private state int m_inc; // Private transactions…

Example Leaf Unit Transactions bool xactInc() { bool xactIncFired = m_in.deqRdy() && m_out.enqRdy() && (m_in.first() != 0); if ( !xactIncFired ) return false;   m_out.enq( m_in.first() + m_inc ); m_in.deq(); return true; } bool xactBumpInc() bool xactBumpIncFired = m_in.deqRdy() && (m_in.first() == 0); if ( !xactBumpIncFired ) m_inc += 1; } 

SMASH/C++ Example: Structural Unit struct IncPipe : public smash::IUnit_StructuralImpl { // Port functions smash::InputPort<IntMsg>& in() {return m_in;} smash::OutputPort<IntMsg>& out() {return m_out;} void elaborate( smash::ParameterList& plist ) { regPort ( "in", &m_in ); regUnit ( "incA", &m_incA ); regChannel ( “inc2inc", &m_inc2inc ); regUnit ( "incB", &m_incB ); regPort ( "out", &m_out ); elaborateChildUnits(plist); // Connect child units and channels smash::connect( m_in, m_incA.in() ); smash::connect( m_incA.out(), m_channel, m_incB.in() ); smash::connect( m_incB.out(), m_out ); } private: // Ports smash::InputPort<IntMsg> m_in; smash::OutputPort<IntMsg> m_out; // Child units and channels Increment m_incA; Increment m_incB; smash::SimpleChannel<IntMsg> m_inc2inc; };  InputPort “in” IncPipe Incrementer “incA” SimpleChannel “inc2inc” Incrementer “incB” OutputPort “out”

SMASH/C++ Example: Simulation Loop int main( int argc, char* argv[] ) { // Toplevel channels and unit smash::SimpleChannel<IntMsg> iChannel("iChannel",32,3,7); smash::SimpleChannel<IntMsg> oChannel("oChannel",32,3,7); IncPipe incPipe; incPipe.setName("top"); // Set some parameters and elaborate the design smash::ParameterList plist; plist.set("top.incB",Increment::increment_amount, 2); plist.set("top.inc2inc",SimpleChannel<IntMsg>::bandwidth,32); plist.set("top.inc2inc",SimpleChannel<IntMsg>::latency,3); plist.set("top.inc2inc",SimpleChannel<IntMsg>::buffering,7); incPipe.elaborate(plist); // Connect the toplevel channels to the toplevel unit smash::connect( iChannel, incPipe.in() ); smash::connect( incPipe.out(), oChannel ); // Simulation loop int testInputs[] = { 1, 2, 0, 3, 4, 0, 1, 2, 3, 4 };  int inputIndex = 0; for ( int cycle = 0; cycle < 20; cycle++ ) {  if ( iChannel.enqRdy() && (inputIndex < 10) ) iChannel.enq( IntMsg(testInputs[inputIndex++]) ); if ( oChannel.deqRdy() ) { std::cout << oChannel.first() << std::endl; oChannel.deq(); } incPipe.tick(); // Hierarchical tick iChannel.tick(); // Always tick units before channels oChannel.tick(); “iChannel” IncPipe “top” Incrementer “incA” SimpleChannel “inc2inc” Incrementer “incB” “oChannel”

Why didn’t we just use SystemC? If you’re asking, you haven’t read the SystemC standard Ugly semantics Too many ways of doing the same thing Fundamental assumption is that host is sequential SMASH/C++ designed to support parallel hosts Even worse, simulator is a global object (can’t have two engines in one executable) In industry, architects use SystemC, hardware designers ignore it when building chips

Issues Need to figure out flexible type system and bindings from RDL into C++/Bluespec/Verilog Need to figure out common (across C++/RDL/Bluespec) interfaces/syntax for Elaboration Configuration Debugging Monitoring/Tracing