1 9/25/2009. wsnyder. Verilog-Mode. Still Reducing the Veri-Tedium. http://www.veripool.org/papers. /*AUTOAUTHOR*/ Wilson Snyder. wsnyder@wsnyder.



Similar documents
ECE 451 Verilog Exercises. Sept 14, James Barnes

Eventia Log Parsing Editor 1.0 Administration Guide

SystemVerilog Is Getting Even Better!

Life Cycle of a Memory Request. Ring Example: 2 requests for lock 17

The C Programming Language course syllabus associate level

SVA4T: SystemVerilog Assertions - Techniques, Tips, Tricks, and Traps

Using SystemVerilog Assertions for Creating Property-Based Checkers

A New Paradigm for Synchronous State Machine Design in Verilog

Chapter 13 - The Preprocessor

Hypercosm. Studio.

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

CLC Server Command Line Tools USER MANUAL

A QUICK OVERVIEW OF THE OMNeT++ IDE

Registers & Counters

10 STEPS TO YOUR FIRST QNX PROGRAM. QUICKSTART GUIDE Second Edition

ECE232: Hardware Organization and Design. Part 3: Verilog Tutorial. Basic Verilog

More Verilog. 8-bit Register with Synchronous Reset. Shift Register Example. N-bit Register with Asynchronous Reset.

A Verilog HDL Test Bench Primer Application Note

Getting off the ground when creating an RVM test-bench

Lab #5: Design Example: Keypad Scanner and Encoder - Part 1 (120 pts)

Lecture 10: Multiple Clock Domains

Cadence Verilog Tutorial Windows Vista with Cygwin X Emulation

Multiplexers Two Types + Verilog

MAX II ISP Update with I/O Control & Register Data Retention

Chapter 7: Advanced Modeling Techniques

Design of Digital Circuits (SS16)

University of Toronto Faculty of Applied Science and Engineering

Introduction to Python

Modeling Sequential Elements with Verilog. Prof. Chien-Nan Liu TEL: ext: Sequential Circuit

CSE467: Project Phase 1 - Building the Framebuffer, Z-buffer, and Display Interfaces

E158 Intro to CMOS VLSI Design. Alarm Clock

Introduction. What is an Operating System?

Digital Circuit Design Using Xilinx ISE Tools

Professional. SlickEdif. John Hurst IC..T...L. i 1 8 О 7» \ WILEY \ Wiley Publishing, Inc.

Magit-Popup User Manual

VIP Quick Reference Card

EasyC. Programming Tips

EPIC - User s Guide i. EPIC - User s Guide

LabVIEW Day 6: Saving Files and Making Sub vis

How To Design A Chip Layout

Creating trouble-free numbering in Microsoft Word

Teamstudio USER GUIDE

Lecture 5: Java Fundamentals III

ModelSim-Altera Software Simulation User Guide

Debugging Multi-threaded Applications in Windows

Basics Series Basics Version 9.0

Week 2 Practical Objects and Turtles

The programming language C. sws1 1

An Introduction to MPLAB Integrated Development Environment

A low-cost, connection aware, load-balancing solution for distributing Gigabit Ethernet traffic between two intrusion detection systems

CSC 120: Computer Science for the Sciences (R section)

Altera Error Message Register Unloader IP Core User Guide

by NetMedia, Inc. All rights reserved. Basic Express, BasicX, BX-01, BX-24 and BX-35 are trademarks of NetMedia, Inc. 2.

Understand for FORTRAN

Lab 1: Introduction to Xilinx ISE Tutorial

High-Level Programming Languages. Nell Dale & John Lewis (adaptation by Michael Goldwasser)

DATA VALIDATION and CONDITIONAL FORMATTING

ECE 3401 Lecture 7. Concurrent Statements & Sequential Statements (Process)

Athena Knowledge Base

Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)

Introduction to the Altera Qsys System Integration Tool. 1 Introduction. For Quartus II 12.0

INTRODUCTION TO OBJECTIVE-C CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 12 09/29/2011

How To Use Query Console

CS 103 Lab Linux and Virtual Machines

Database Design Standards. U.S. Small Business Administration Office of the Chief Information Officer Office of Information Systems Support

VFComb 1.3 the program which simplifies the virtual font management

VHDL Test Bench Tutorial

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

How To Write Portable Programs In C

WA Manager Alarming System Management Software Windows 98, NT, XP, 2000 User Guide

OpenFlow 1.4. (Changes compared to 1.3 OpenDaylight Perspec>ve) - Abhijit Kumbhare

Computer Organization and Components

Q N X S O F T W A R E D E V E L O P M E N T P L A T F O R M v Steps to Developing a QNX Program Quickstart Guide

Django Assess Managed Nicely Documentation

BECKHOFF. Application Notes. BC9000: Getting Started Guide. For additional documentation, please visit.

3. VERILOG HARDWARE DESCRIPTION LANGUAGE

Project 2 Database Design and ETL

About ZPanel. About the framework. The purpose of this guide. Page 1. Author: Bobby Allen Version: 1.1

Visual Studio.NET Database Projects

University of Hull Department of Computer Science. Wrestling with Python Week 01 Playing with Python

Vending Machine using Verilog

Lizy Kurian John Electrical and Computer Engineering Department, The University of Texas as Austin

WebBIOS Configuration Utility Guide

CS 1133, LAB 2: FUNCTIONS AND TESTING

Parsing Technology and its role in Legacy Modernization. A Metaware White Paper

Dove User Guide Copyright Virgil Trasca

How to Avoid Learning Expect or Automating Automating Interactive Programs

Programming Languages CIS 443

Chapter 3 ADDRESS BOOK, CONTACTS, AND DISTRIBUTION LISTS

Chapter 7. Registers & Register Transfers. J.J. Shann. J. J. Shann

Introduction to the course, Eclipse and Python

Best practices for efficient HPC performance with large models

Qsys and IP Core Integration

The continuing story of Vim

UML for C# Modeling Basics

Basic C Shell. helpdesk@stat.rice.edu. 11th August 2003

Programming in Access VBA

How to read this guide

Transcription:

1 Verilog-Mode Still Reducing the Veri-Tedium http://www.veripool.org/papers /*AUTOAUTHOR*/ Wilson Snyder @.org Last updated Sep, 2009

Agenda 2 The Tedium of Verilog What do I mean by Tedium? Why bother to reduce it? How do we reduce it? Verilog-mode Features Wires, Regs, Null Modules, etc Instantiations Help and Support

Module Tedium? (1995) 3 module tedium (i1,i2,o1,o2); input i1,i2; output o1,o2; reg o1; wire o2; wire inter1; always @(i1 or i2 or inter1) o1 = i1 i2 inter1; sub s1 (.i (i1),.o (o1),.inter1 (inter1)); sub s2 (.i (i2),.o (o2),.inter1 (inter1)); endmodule Regs needed for outputs. Argument list is same as input/output statements. Wires needed for interconnections. Sensitivity lists. Named based instantiations mostly replicate input/outputs from the sub module.

Module Tedium? (2009) 4 module tedium ( input i1, i2, output o1, o2); reg o1; wire o2; wire inter1; always @* o1 = i1 i2 inter1; sub s1 (.i (i1),.o (o2),.*); sub s2 (.i (i1),.o (o2),.*); endmodule Regs still needed for outputs. ( output reg somewhat better) Wires still needed for interconnections. @* - Proposed based on Verilog-Mode!.* - Saves lots of typing, But can t see what s being connected! When connections aren t simple, you still need to make connections by hand

Why eliminate redundancy? 5 Reduce spins on fixing lint or compiler warnings Reduce sensitivity problems - If you forget (or don t have) a linter, these are horrible to debug! Make it easier to name signals consistently through the hierarchy - Reduce cut & paste errors on multiple instantiations. - Make it more obvious what a signal does. Reducing the number of lines is goodness alone. - Less code to "look" at. - Less time typing.

What would we like in a fix? 6 Don t want a new language - All tools would need a upgrade! - (SystemVerilog unfortunately faces this hurdle.) Don t want a preprocessor - Yet another tool to add to the flow! - Would need all users to have the preprocessor! Would like code to be completely "valid" Verilog. - Want non-tool users to remain happy. - Can always edit code without the program. Want it trivial to learn basic functions - Let the user s pick up new features as they need them. Net result: NO disadvantage to using it - Well adopted, including AMCC, ARM, Agere, Altera, AMD, Analog, Cavium, Cisco, Cray, Cypress, Freescale, HP, Infineon, Intel, LSI, MIPS, Maxtor, Micron, NXP, TI, Vitesse,

Idea Use comments! 7 /*AUTOINST*/ is a metacomment. sub s1 (/*AUTOINST*/); The program replaces the text after the comment with the sensitivity list. sub s1 (/*AUTOINST*/.i (i),.o (o)); {edit ports of sub} sub s1 (/*AUTOINST*/.i (i),.o (o)); sub s1 (/*AUTOINST*/.i (i),.new(new),.o (o)); If you then edit it, just rerun.

Verilog-Mode for Emacs 8 This expansion is best if in the editor You can see the expansion and edit as needed Verilog package for Emacs Co-Author Michael McNamara <mac@verilog.com> Auto highlighting of keywords Standardized indentation Reads & expand /*AUTOs*/ Magic key sequence for inject/expand/deexpand

C-c C-z: Inject AUTOs 9 With this key sequence, Verilog-Mode adds /*AUTOs*/ to old designs! always @(en or a) z = a & ena; submod s (.out (out),.uniq (u),.in (in)); C-c C-z (or use menu) always @(/*AS*/a or ena) z = a & ena; submod s (.uniq (u), /*AUTOINST*/ // Outputs.out (out), // Inputs.in (in));

C-c C-a and C-c C-d 10 With this key sequence, Verilog-Mode parses the verilog code, and expands the text after any /*AUTO*/ comments. /*AUTOWIRE*/ wire o; sub s1 (/*AUTOINST*/); C-c C-a (or use menu) /*AUTOWIRE*/ wire o; sub s1 (/*AUTOINST*/.i (i),.o (o)); C-c C-d (or use menu)

But the vi users revolt! 11 Call Emacs as part of your flow/other editor emacs f verilog-batch-auto {filename.v} Likewise verilog-batch-delete-auto, verilog-batch-inject-auto, verilog-batch-indent Alternatively, the code is always valid! Anyone can simply edit the code and not care about Verilog-Mode. - Of course, they need to manually update what would have been done automatically.

Agenda 12 The Tedium of Verilog What do I mean by Tedium? Why bother to reduce it? How do we reduce it? Verilog-mode Features Wires, Regs, Null Modules, etc Instantiations Help and Support

Sensitivity Lists 13 Alternatively, /*AS*/ is short for /*AUTOSENSE*/ Note q is a output, so doesn t end up in the list. always @ (/*AS*/) begin if (x) q = a; else if (y) q = b; else q = c; end always @ (/*AS*/ a or b or c or x or y) begin if (x) q = a; else if (y) q = b; else q = c; end Verilog-2001 took this idea from Verilog-Mode and created always @* I d suggest using @* and only use /*AS*/ when you want to see what a large block is sensitive to.

Argument Lists 14 /*AUTOARG*/ parses the input/output/inout statements. Or, Verilog-2001 allows ANSI format. Make a team decision which to adopt. module m (/*AUTOARG*/) input a; input b; output [31:0] q; module m (/*AUTOARG*/ // Inputs a, b // Outputs q) input a; input b; output [31:0] q;

Automatic Wires 15 /*AUTOWIRE*/ takes the outputs of sub modules and declares wires for them (if needed -- you can declare them yourself). /*AUTOWIRE*/ /*AUTOREG*/ a a (// Outputs.bus (bus[0]),.z (z)); b b (// Outputs.bus (bus[1]),.y (y)); /*AUTOWIRE*/ // Beginning of autos wire [1:0] bus; // From a,b wire y; // From b wire z; // From a // End of automatics /*AUTOREG*/ a a ( // Outputs.bus (bus[0]),.z (z)); b b ( // Outputs.bus (bus[1]),.y (y));

Automatic Registers 16 output [1:0] from_a_reg; output not_a_reg; /*AUTOWIRE*/ /*AUTOREG*/ wire not_a_reg = 1 b1; /*AUTOREG*/ saves having to duplicate reg statements for nets declared as outputs. (If it s declared as a wire, it will be ignored, of course.) output [1:0] from_a_reg; output not_a_reg; /*AUTOWIRE*/ /*AUTOREG*/ // Beginning of autos reg [1:0] from_a_reg; // End of automatics wire not_a_reg = 1 b1; always from_a_reg = 2 b00;

Resetting Signals 17 /*AUTORESET*/ will read signals in the always that don t have a reset, and reset them. Also works in always @* it will use = instead of <=. reg [1:0] a; always @(posedge clk) if (reset) begin fsm <= ST_RESET; /*AUTORESET*/ end else begin a <= b; fsm <= ST_OTHER; end end reg [1:0] a; always @(posedge clk) if (reset) begin fsm <= ST_RESET; /*AUTORESET*/ a <= 2 b0; end else begin a <= b; fsm <= ST_OTHER; end end

State Machines 18 parameter [2:0] // synopsys enum mysm SM_IDLE = 3 b000, SM_ACT = 3 b100; reg [2:0] // synopsys state_vector mysm state_r, state_e1; /*AUTOASCIIENUM( state_r, _stateascii_r, sm_ )*/ Sized for longest text. /*AUTOASCIIENUM( state_r, _stateascii_r, sm_ )*/ reg [31:0] _stateascii_r; always @(state_r) casez ({state_r}) SM_IDLE: _stateascii_r = idle ; SM_ACT: _stateascii_r = act ; default: _stateascii_r = %Err ; endcase Prefix to remove from ASCII states.

Null/Stub Modules, Tieoffs 19 AUTOINOUTMODULE will copy I/O from another module. AUTOTIEOFF will terminate undriven outputs, and AUTOUNUSED will terminate unused inputs. module ModStub ( /*AUTOINOUTMODULE ( Mod")*/ ); /*AUTOWIRE*/ /*AUTOREG*/ /*AUTOTIEOFF*/ wire _unused_ok = &{ /*AUTOUNUSED*/ 1'b0}; endmodule module ModStub ( /*AUTOINOUTMODULE ( Mod")*/ input mod_in, output [2:0] mod_out ); /*AUTOWIRE*/ /*AUTOREG*/ /*AUTOTIEOFF*/ wire [2:0] mod_out = 3 b0; wire _unused_ok = &{ /*AUTOUNUSED*/ mod_in, 1'b0}; endmodule

Script Insertions 20 Insert Lisp result. Insert shell result. /*AUTOINSERTLISP(insert "//hello")*/ /*AUTOINSERTLISP(insert (shell-command-to-string "echo //hello"))*/ /*AUTOINSERTLISP(insert "//hello")*/ //hello /*AUTOINSERTLISP(insert (shell-command-to-string "echo //hello"))*/ //hello

`ifdefs 21 We manually put in the ifdef, as we would have if not using Verilog-mode. module m ( `ifdef c_input c, `endif /*AUTOARG*/) input a; input b; `ifdef c_input input c; `endif Verilog-mode a signal referenced before the AUTOARG, leaves that text alone, and omits that signal in its output. module m ( `ifdef c_input c, `endif /*AUTOARG*/ // Inputs a, b) input a; input b; `ifdef c_input input c; `endif Why not automatic? Obviously, the `ifdefs would have to be put into the output text (for it to work for both the defined & undefined cases.) One ifdef would work, but consider multiple nested ifdefs each on overlapping signals. The algorithm gets horribly complex for the other commands (AUTOWIRE).

Agenda 22 The Tedium of Verilog What do I mean by Tedium? Why bother to reduce it? How do we reduce it? Verilog-mode Features Wires, Regs, Null Modules, etc Instantiations Help and Support

Simple Instantiations 23 /*AUTOINST*/ Look for the submod.v file, read its in/outputs. submod s (/*AUTOINST*/); submod s (/*AUTOINST*/ // Outputs.out (out), // Inputs.in (in)); module submod; output out; input in; endmodule Keep signal names consistent! Note the simplest and most obvious case is to have the signal name on the upper level of hierarchy match the name on the lower level. Try to do this when possible. Occasionally two designers will interconnect designs with different names. Rather then just connecting them up, it s a 30 second job to use vrename from my Verilog-Perl suite to make them consistent.

Instantiation Example 24 module pci_mas (/*AUTOARG*/); trdy); input trdy; module pci_tgt (/*AUTOARG*/); irdy); input irdy; module pci (/*AUTOARG*/); irdy, trdy); input irdy; input trdy; /*AUTOWIRE*/ // Beginning of autos // End of automatics pci_mas mas (/*AUTOINST*/); // Inputs.trdy (trdy)); pci_tgt tgt (/*AUTOINST*/); // Inputs.irdy (irdy));

Instantiation Example 25 module pci_mas (/*AUTOARG*/ trdy, trdy); mas_busy); input trdy; output mas_busy; module pci_tgt (/*AUTOARG*/ irdy); irdy, mas_busy); input irdy; input mas_busy; module pci (/*AUTOARG*/ irdy, trdy); input irdy; input trdy; /*AUTOWIRE*/ // Beginning of autos wire // End mas_busy; of automatics // From mas.v // End of automatics pci_mas mas (/*AUTOINST*/ // Outputs Inputs.mas_busy.trdy (mas_busy), (trdy)); // Inputs.trdy (trdy)); pci_tgt tgt (/*AUTOINST*/ // Inputs.irdy (irdy), (irdy));.mas_busy (mas_busy));

Exceptions to Instantiations 26 Method 1: AUTO_TEMPLATE lists exceptions for submod. The ports need not exist. (This is better if submod occurs many times.) /* submod AUTO_TEMPLATE (.z (otherz), ); */ submod s (// Inputs.a (except1), /*AUTOINST*/); Method 2: List the signal before the AUTOINST. First put a // Input or // Output comment for AUTOWIRE. /* submod AUTO_TEMPLATE (.z (otherz), ); */ submod s (// Inputs.a (except1), /*AUTOINST*/.z (otherz),.b (b)); Initial Technique First time you re instantiating a module, let AUTOINST expand everything. Then cut the lines it inserted out, and edit them to become the template or exceptions. Signals not mentioned otherwise are direct connects.

Multiple Instantiations 27 @ in the template takes the leading digits from the reference. (Or next slide.) [] takes the bit range for the bus from the referenced module. Generally, always just add []. /* submod AUTO_TEMPLATE (.z (out[@]),.a (invec@[])); */ submod i0 (/*AUTOINST*/); submod i1 (/*AUTOINST*/); submod i2 (/*AUTOINST*/); /* submod AUTO_TEMPLATE (.z (out[@]),.a (invec@[])); */ submod i0 (/*AUTOINST*/.z (out[0]),.a (invec0[31:0])); submod i1 (/*AUTOINST*/.z (out[1]),.a (invec1[31:0]));

Overriding @ 28 A regexp after AUTO_TEMPLATE specifies what to use for @ instead of last digits in cell name. Below, @ will get name of module. /* submod AUTO_TEMPLATE \(.*\) (.z (out_@[])); */ submod i0 (/*AUTOINST*/); submod i1 (/*AUTOINST*/); /* submod AUTO_TEMPLATE ( \(.*\) (.z (out_@[])); */ submod i0 (/*AUTOINST*/.z (out_i0)); submod i1 (/*AUTOINST*/.z (out_i1));

Instantiations using LISP 29 @ {lisp_expression} Decodes in this case to: in[31-{the_instant_number}] /* buffer AUTO_TEMPLATE (.z (out[@]),.a (in[@ (- 31 @) ])); */ buffer i0 (/*AUTOINST*/); buffer i1 (/*AUTOINST*/); buffer i2 (/*AUTOINST*/); Predefined Variables See the documentation for variables that are useful in Lisp templates: vl-cell-type, vl-cell-name, vl-modport, vl-name, vl-width, vl-dir. /* buffer AUTO_TEMPLATE (.z (out[@]),.a (in[@ (- 31 @) ])); */ buffer i0 (/*AUTOINST*/.z (out[0]),.a (in[31])); buffer i1 (/*AUTOINST*/.z (out[1]),.a (in[30]));

Instantiations using RegExps 30.\(\) indicates a Emacs regular expression. @ indicates match-a-number Shorthand for \([0-9]+\) /* submod AUTO_TEMPLATE (.\(.*[^0-9]\)@ (\1[\2]), );*/ submod i (/*AUTOINST*/); /* submod AUTO_TEMPLATE (.\(.*[^0-9]\)@ (\1[\2]), );*/ submod i (/*AUTOINST*/.vec2 ( vec[ 2 ]),.vec1 ( vec[ 1]),.vec0 ( vec[ 0]),.scalar (scalar)); Signal name is first \( \) match, substituted for \1. Bit number is second \( \) match (part of @), substituted for \2.

Instantiations with Parameters 31 AUTOINSTPARAM is just like AUTOINST, but connects parameters. submod #(/*AUTOINSTPARAM*/) i (/*AUTOINST*/); submod #(/*AUTOINSTPARAM*/.WIDTH(WIDTH)) i (/*AUTOINST*/.out (out));

Parameter Values 32 Often, you want parameters to be constant in the parent module. verilog-auto-inst-param-value controls this. submod #(.WIDTH(8)) i (/*AUTOINST*/); or submod #(.WIDTH(8)) i (/*AUTOINST*/.out(out[WIDTH-1:0])); // Local Variables: // verilog-auto-inst-param-value:nil // End: submod #(.WIDTH(8)) i (/*AUTOINST*/.out(out[7:0])); // Local Variables: // verilog-auto-inst-param-value:t // End:

Exclude AUTOOUTPUT 33 Techniques to exclude signals from AUTOOUTPUT (or AUTOINPUT etc). 1. Declare fake output `ifdef NEVER output out; `endif submod i (// Output.out(out)); 2. Use inclusive regexp // Regexp to include /*AUTOOUTPUT( in )*/ submod i (// Output.out(out)); 3. Set the output ignore regexp /*AUTO_LISP (setq verilog-auto -output-ignore-regexp (verilog-regexp-words `( out )))*/ submod i (// Output.out(out)); 4. Use concats to indicate exclusion submod i (// Output.out({out})); // Local Variables: // verilog-auto-ignore-concat:t // End:

SystemVerilog.* 34 SystemVerilog.* expands just like AUTOINST. submod i (.*); C-c C-a (autos) submod i (.*.out (out)); BUT, on save reverts to.* (unless verilog-auto-save-star set) submod i (.*); See Cliff Cumming s Paper http://www.sunburst-design.com/papers/ CummingsSNUG2007Boston_DotStarPorts.pdf

Where to Find Modules 35 1. Old Scheme // Local Variables: // verilog-library-directories:("." "dir1" "dir2"...) // End: 2. Better // Local Variables: // verilog-auto-library-flags:( y dir1 y dir2 ) // End: 3. Best // Local Variables: // verilog-auto-library-flags:( f../../input.vc ) // End: Best, as input.vc can (should) be the same file you feed your lint/synth/simulator. Jumping: C-c C-d C-c C-d jumps to the definition of the entered module // input.vc -y dir1 -y dir2

Agenda 36 The Tedium of Verilog What do I mean by Tedium? Why bother to reduce it? How do we reduce it? Verilog-mode Features Wires, Regs, Null Modules, etc Instantiations Help and Support

Verilog Menu Help 37 Buffers Files Verilog Help Compile AUTO, Save, Compile Next Compile Error Recompute AUTOs Kill AUTOs FAQ... AUTO Help... AUTO General AUTOARG AUTOINST AUTOINOUTMODULE AUTOINPUT AUTOOUTPUT AUTOOUTPUTEVERY AUTOWIRE AUTOREG AUTOREGINPUT AUTOSENSE AUTOASCIIENUM

FAQ on Indentations, etc 38 Have TAB insert vs. indent: (setq verilog-auto-newline nil) (setq verilog-tab-always-indent nil) Lineup signals around = : See verilog-auto-lineup Don t add end // block-name comments: (setq verilog-auto-endcomments nil)

SystemVerilog Support 39 Keyword Highlighting Full support Indentation Most everything we ve seen AUTOs Getting there - Logic, bit - Typedefs (setq verilog-typedef-regexp _t$ ) - Multidimensional ports - Interfaces as ports -.*,.name Please let us know what s missing

Homework Assignment 40 Homework Due Next week: - Install Verilog-Mode - Try Inject-Autos - Use AUTOINST in one module Grow from there!

Open Source The open source design tools are available at http://www.veripool.org These slides + paper at http://www.veripool.org/papers/ Bug Reporting there (Please!) Additional Tools Schedule::Load Load Balancing (ala LSF) SystemPerl /*AUTOs*/ for SystemC Verilog-Mode for Emacs /*AUTO */ Expansion Verilog-Perl Toolkit with Preprocessing, Renaming, etc Verilator Compile SystemVerilog into SystemC Vregs Extract register and class declarations from documentation