gcd: a simple example to introduce bluespec arvind computer science & artificial intelligence...

32
February 15, 2008 L05-1 http:// csg.csail.mit.edu/6.375 GCD: A simple example to introduce Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February 15, 2008

Upload: irene-dalton

Post on 30-Dec-2015

35 views

Category:

Documents


3 download

DESCRIPTION

GCD: A simple example to introduce Bluespec Arvind Computer Science & Artificial Intelligence Lab Massachusetts Institute of Technology February 15, 2008. module. interface. Bluespec: State and Rules organized into modules. All state (e.g., Registers, FIFOs, RAMs, ...) is explicit. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-1http://csg.csail.mit.edu/6.375

GCD: A simple example to introduce Bluespec

Arvind Computer Science & Artificial Intelligence LabMassachusetts Institute of Technology

February 15, 2008

Page 2: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-2http://csg.csail.mit.edu/6.375

Bluespec: State and Rules organized into modules

All state (e.g., Registers, FIFOs, RAMs, ...) is explicit.Behavior is expressed in terms of atomic actions on the state:

Rule: guard action Rules can manipulate state in other modules only via their interfaces.

interface

module

Page 3: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-3http://csg.csail.mit.edu/6.375

Programming withrules: A simple example

Euclid’s algorithm for computing the Greatest Common Divisor (GCD):

15 6 9 6 subtract

3 6 subtract

6 3 swap

3 3 subtract

0 3 subtractanswer:

Page 4: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-4http://csg.csail.mit.edu/6.375

module mkGCD (I_GCD); Reg#(int) x <- mkRegU; Reg#(int) y <- mkReg(0);

rule swap ((x > y) && (y != 0)); x <= y; y <= x; endrule rule subtract ((x <= y) && (y != 0)); y <= y – x; endrule

method Action start(int a, int b) if (y==0);x <= a; y <= b;

endmethod method int result() if (y==0); return x; endmethodendmodule

Internalbehavior

GCD in BSV

Externalinterface

State

typedef int Int#(32)

Assume a/=0

x y

swap sub

If (a==0) then 0 else b

Page 5: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-5http://csg.csail.mit.edu/6.375

rdyenab

int

intrdy

star

tre

sult

GC

Dm

odule

int

y == 0

y == 0

implicit conditions

interface I_GCD; method Action start (int a, int b); method int result();endinterface

GCD Hardware Modulet

#(type t)

t

t

t tt

In a GCD call t could beInt#(32),UInt#(16),Int#(13), ...

The module can easily be made polymorphic

Many different implementations can provide the same interface: module mkGCD (I_GCD)

Page 6: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-6http://csg.csail.mit.edu/6.375

module mkGCD (I_GCD); Reg#(int) x <- mkRegU; Reg#(int) y <- mkReg(0);

rule swapANDsub ((x > y) && (y != 0)); x <= y; y <= x - y; endrule rule subtract ((x<=y) && (y!=0)); y <= y – x; endrule

method Action start(int a, int b) if (y==0);x <= a; y <= b;

endmethod method int result() if (y==0); return x; endmethodendmodule

GCD: Another implementation

Combine swap and subtract rule

Does it compute faster ?

Page 7: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-7http://csg.csail.mit.edu/6.375

Bluespec Tool flowBluespec SystemVerilog source

Verilog 95 RTL

Verilog sim

VCD output

DebussyVisualization

Bluespec Compiler

files

Bluespec tools

3rd party tools

Legend

RTL synthesis

gates

C

Bluesim CycleAccurate

Blueview

Page 8: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-8http://csg.csail.mit.edu/6.375

Generated Verilog RTL: GCDmodule mkGCD(CLK,RST_N,start_a,start_b,EN_start,RDY_start,

result,RDY_result); input CLK; input RST_N;// action method start input [31 : 0] start_a; input [31 : 0] start_b; input EN_start; output RDY_start;// value method result output [31 : 0] result; output RDY_result;// register x and y reg [31 : 0] x; wire [31 : 0] x$D_IN; wire x$EN; reg [31 : 0] y; wire [31 : 0] y$D_IN; wire y$EN;...// rule RL_subtract assign WILL_FIRE_RL_subtract = x_SLE_y___d3 && !y_EQ_0___d10 ;// rule RL_swap assign WILL_FIRE_RL_swap = !x_SLE_y___d3 && !y_EQ_0___d10 ;...

Page 9: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-9http://csg.csail.mit.edu/6.375

Generated Hardware

next state values

predicates

x_en y_en

x_en = y_en =

x y

> !(=0)

swap? subtract?

sub

xy

enrdy

xrdy

start

resu

lt

swap?swap? OR subtract?

Page 10: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-10http://csg.csail.mit.edu/6.375

Generated Hardware Module

x_en y_en

x_en = swap?y_en = swap? OR subtract?

x y

> !(=0)

swap? subtract?

sub

xy

enrdy

xrdy

start

resu

lt

rdy =

start_en start_en

OR start_en

(y==0)

OR start_en

Page 11: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-11http://csg.csail.mit.edu/6.375

GCD: A Simple Test Benchmodule mkTest (); Reg#(int) state <- mkReg(0); I_GCD gcd <- mkGCD();

rule go (state == 0);

gcd.start (423, 142); state <= 1; endrule

rule finish (state == 1); $display (“GCD of 423 & 142 =%d”,gcd.result()); state <= 2; endruleendmodule

Why do we need the state variable?

Page 12: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-12http://csg.csail.mit.edu/6.375

GCD: Test Benchmodule mkTest (); Reg#(int) state <- mkReg(0); Reg#(Int#(4)) c1 <- mkReg(1); Reg#(Int#(7)) c2 <- mkReg(1); I_GCD gcd <- mkGCD();

rule req (state==0); gcd.start(signExtend(c1), signExtend(c2)); state <= 1; endrule

rule resp (state==1); $display (“GCD of %d & %d =%d”, c1, c2, gcd.result()); if (c1==7) begin c1 <= 1; c2 <= c2+1; end else c1 <= c1+1; if (c1==7 && c2==63) state <= 2 else state <= 0; endruleendmodule

Feeds all pairs (c1,c2) 1 < c1 < 71 < c2 < 63

to GCD

Page 13: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-13http://csg.csail.mit.edu/6.375

GCD: Synthesis results

Original (16 bits) Clock Period: 1.6 ns Area: 4240 m2

Unrolled (16 bits) Clock Period: 1.65ns Area: 5944 m2

Unrolled takes 31% fewer cycles on the testbench

Page 14: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-14http://csg.csail.mit.edu/6.375

Rule scheduling and the synthesis of a scheduler

Page 15: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-15http://csg.csail.mit.edu/6.375

GAA Execution model

Repeatedly:Select a rule to execute Compute the state updates Make the state updates

Highly non-deterministic

Implementation concern: Schedule multiple rules concurrently without violating one-rule-at-a-time semantics

User annotations can help in rule selection

Page 16: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-16http://csg.csail.mit.edu/6.375

Rule: As a State TransformerA rule may be decomposed into two parts (s) and (s) such that

snext = if (s) then (s) else s

(s) is the condition (predicate) of the rule,a.k.a. the “CAN_FIRE” signal of the rule. (conjunction of explicit and implicit conditions)

(s) is the “state transformation” function, i.e., computes the next-state value in terms of the current state values.

Page 17: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-17http://csg.csail.mit.edu/6.375

Compiling a Rule

f

x

currentstate

nextstate values

enable

f

x

rule r (f.first() > 0) ; x <= x + 1 ; f.deq ();endrule

= enabling condition = action signals & values

rdy signalsread methods

enable signalsaction parameters

Page 18: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-18http://csg.csail.mit.edu/6.375

Combining State Updates: strawman

next statevalue

latch enable

R

OR

1

n

1,R

n,R

OR

’s from the rulesthat update R

’s from the rulesthat update R

What if more than one rule is enabled?

Page 19: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-19http://csg.csail.mit.edu/6.375

Combining State Updates

next statevalue

latch enable

R

Scheduler:PriorityEncoder

OR

1

n

1

n

1,R

n,R

OR’s from the rules

that update R

Scheduler ensures that at most one i is true

’s from all the rules

Page 20: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-20http://csg.csail.mit.edu/6.375

One-rule-at-a-time Scheduler

Scheduler:Priority

Encoder

12

n

12

n

1i i

21 2 .... n 1 2 .... n

3. One rewrite at a time i.e. at most one i is true

Very conservative

way of guaranteeing

correctness

Page 21: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-21http://csg.csail.mit.edu/6.375

Executing Multiple Rules Per Cycle: Conflict-free rules

Parallel execution behaves like ra < rb = rb < ra

rule ra (z > 10); x <= x + 1;

endrule

rule rb (z > 20); y <= y + 2;

endrule

rule ra_rb((z>10)&&(z>20)); x <= x+1; y <= y+2;

endrule

Parallel Execution can also be understood in terms of a composite

rule

Rulea and Ruleb are conflict-free if

s . a(s) b(s) 1. a(b(s)) b(a(s))

2. a(b(s)) == b(a(s))

Page 22: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-22http://csg.csail.mit.edu/6.375

Executing Multiple Rules Per Cycle: Sequentially Composable rulesrule ra (z > 10);

x <= y + 1; endrule

rule rb (z > 20); y <= y + 2;

endrule

Parallel execution behaves like ra < rb

rule ra_rb((z>10)&&(z>20)); x <= y+1; y <= y+2;

endrule

Parallel Execution can also be

understood in terms of a

composite rule

Rulea and Ruleb are sequentially composable if

s . a(s) b(s) b(a(s))

Page 23: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-23http://csg.csail.mit.edu/6.375

Multiple-Rules-per-Cycle Scheduler

1.i i

2.1 2 .... n 1 2 .... n

3.Multiple operations such thati j Ri and Rj are conflict-free or

sequentially composable

Scheduler12

n

12

n

Scheduler

Scheduler

Divide the rules into smallest conflicting groups; provide a scheduler for each group

Page 24: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-24http://csg.csail.mit.edu/6.375

Muxing structureMuxing logic requires determining for each register (action method) the rules that update it and under what conditions

1 ~2

Conflict Free/Mutually Exclusive)

and

and

or1122

Sequentially Composable

and

and

or11 and ~2

22

CF rules either do not update the same element or are ME

Page 25: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-25http://csg.csail.mit.edu/6.375

Scheduling and control logicModules

(Current state)Rules

Scheduler

1

n

1

n

Muxing

1

nn

n

Modules(Next state)

cond

action

“CAN_FIRE” “WILL_FIRE”

Page 26: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-26http://csg.csail.mit.edu/6.375

Extra’s

Page 27: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-27http://csg.csail.mit.edu/6.375

Sequentially Composable rules ...

Parallel execution can behave either like ra < rb or rb < ra but the two behaviors are not the same

Composite rules

rule ra (z > 10); x <= 1;

endrule

rule rb (z > 20); x <= 2;

endrule

rule ra_rb(z>10 && z>20); x <= 2;

endruleBehavior ra < rb

rule rb_ra(z>10 && z>20); x <= 1;

endruleBehavior rb < ra

Page 28: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-28http://csg.csail.mit.edu/6.375

Mutually Exclusive RulesRulea and Ruleb are mutually exclusive if they can never be enabled simultaneously

s . a(s) ~ b(s)

Mutually-exclusive rules are Conflict-free even if they write the same state

Mutual-exclusive analysis brings down the cost of conflict-free analysis

Page 29: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-29http://csg.csail.mit.edu/6.375

Compiler determines if two rules can be executed in parallel

Rulea and Ruleb are sequentially composable if

s . a(s) b(s) b(a(s))

Rulea and Ruleb are conflict-free if

s . a(s) b(s) 1. a(b(s)) b(a(s))

2. a(b(s)) == b(a(s))

These properties can be determined by examining the domains and ranges of the rules in a pairwise manner.

These conditions are sufficient but not necessary.Parallel execution of CF and SC rules does not increase the critical path delay

D(Ra) R(Rb) = D(Rb) R(Ra) = R(Ra) R(Rb) =

D(b) R(Ra) =

Page 30: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-30http://csg.csail.mit.edu/6.375

Homework problem

Binary Multiplication

Page 31: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-31http://csg.csail.mit.edu/6.375

Exercise: Binary MultiplierSimple binary multiplication:

100101011001

0000 1001 0000 0101101

// d = 4’d9// r = 4’d5// d << 0 (since r[0] == 1)// 0 << 1 (since r[1] == 0)// d << 2 (since r[2] == 1)// 0 << 3 (since r[3] == 0)// product (sum of above) = 45

x

What does it look like in Bluespec?

d r product

One step of multiplicationOne step of multiplication

Page 32: GCD: A simple example to introduce Bluespec Arvind  Computer Science & Artificial Intelligence Lab

February 15, 2008 L05-32http://csg.csail.mit.edu/6.375

module mkMult (I_mult); Reg#(Int#(32)) product <- mkReg(0); Reg#(Int#(32)) d <- mkReg(0); Reg#(Int#(16)) r <- mkReg(0);

rule cycle

endrule

method Action start

endmethod

method Int#(32) result ()

endmethodendmodule

Multiplier in Bluespec

What is the interface I_mult ?

rule cycle (r != 0); if (r[0] == 1) product <= product + d; d <= d << 1; r <= r >> 1;endrule

method Action start (Int#(16)x,Int#(16)y) if (r == 0); d <= signExtend(x); r <= y;endmethod

method Int#(32) result () if (r == 0); return product;endmethod

Arvind
Fix the code