rtl design in python: porting the mmips jos huisken june 25 th, 2013

29
RTL design in python: porting the mMIPS Jos Huisken June 25 th , 2013

Upload: dayton-gobert

Post on 14-Jan-2016

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

RTL design in python:

porting the mMIPS

Jos HuiskenJune 25th, 2013

Page 2: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

What is Python?

Page 3: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

What is Python?

• A general purpose programming language • Growing in popularity• Interpreted language (bytecode-interpretive)• Multi-paradigm

• Clean object-oriented• Functional – in the LISP tradition• Structural (procedural-imperative)

• Extremely readable syntax• Very high-level

• Lists• Dictionaries (associative arrays)

• Extensive documentation

Page 4: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

What is MyHDL?

• A Python package which enables hardware description • Open-source project• Batteries included (more on this later)

Page 5: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Extends Python

• MyHDL is Python• Using Python constructs to extend• Object Oriented

• Signal, intbv• Generators

• Micro-thread like, enables concurrency behavior• Resumable functions that maintain state

• Decorators• Meta-programming• “Macro” mechanism• Modifies a function / generator• @always_seq and @always_comb

Page 6: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Why use MyHDL

• Manage Complex Designs• New to Digital Hardware Design• Scripting Languages Intensively Used• Modern Software Development Techniques for Hardware

Design• Algorithm Development and HDL Design in a Single

Environment• Require Both Verilog and VHDL• VHDL Too Verbose• SystemVerilog Too Complicated• You Been TCL’d too much

Page 7: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

What MyHDL is NOT

• Not arbitrary Python to silicon• Not a radically new approach• Not a synthesis tool• Not an IP block library• Not only for implementation• Not well suited for accurate time simulation

Page 8: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Register Transfer

• Register Transfer Level (RTL) abstraction• This is the commonly excepted description of

mainstream HDLs: Verilog and VHDL• Describes the operations between registers

• MyHDL operates at the Register Transfer Level (RTL)

• MyHDL extends Python for hardware description

Page 9: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Types

• intbv• Bit vector type, an integer with bit vector properties

• Signal• Deterministic communication, see it as a VHDL signal

• Convertible types• intbv• bool• int • tuple of int• list of bool and list of intbv

Page 10: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Generators

• A Python generator is a resumable function

• Generators are the core of MyHDL• Provide the similar functionality as a VHDL process or

Verilog always block• yield in a generator

Page 11: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Python generator: Fibonacci

7 # function version

8 def fibon(n):

9 a = b = 1

10 result = []

11 for i in xrange(n):

12 result.append(a)

13 a, b = b, a + b

14 return result

15fibon(8)

16[1, 1, 2, 3, 5, 8, 13, 21]

7 # generator version

8 def fibon(n):

9 a = b = 1

10 result = []

11 for i in xrange(n):

12 yield a

13 a, b = b, a + b

14for x in fibon(8):

15 print x,

161 1 2 3 5 8 13 21

Page 12: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Decorators

• MyHDL Decorators“creates ready-to-simulate generators from local function definitions”

• @instance• @always(sensitivity list)• @always_seq(clock,reset)• @always_comb

Page 13: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Python decorator7 @mydecorator

8 def myfunc():

9 return

10# is equivalent to

11def myfunc():

12 return

13myfunc = mydecorator(myfunc)

7 def verbose(origfunc):

8 # make new func

9 def newfunc(*args, **kwargs):

10 print “entering”, origfunc.__name__

11 origfunc(*args, **kwargs)

12 print “exiting”, origfunc.__name__

13 return newfunc

14@verbose

15def myfunc(s):

16 print s

17myfunc(‘hoi’)

18entering myfunc

19hoi

20exiting myfunc

A decorator is a function (mydecorator) that takes a function object as an argument, and returns a function object as a return value.

@mydecorator: just syntactic sugar

Page 14: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Flow

Page 15: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

MyHDL Conversion

• MyHDL has a convertible subset• Convert to Verilog• Convert to VHDL

• Pragmatic

• Standard FPGA / ASIC flow after conversion

Page 16: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Anatomy of a MyHDL Module

Page 17: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Simple adder in myhdl

Page 18: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

A register

Page 19: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

ALU waveform, using gtkwave

Page 20: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Verilog co-simulation

• Icarus Verilog• Cadence ncsim• Cadence ncsim, CMOS90 netlist

Select icarus/verilog implementation:

Page 21: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Single cycle mini-mini MIPS Multi cycle mini MIPS

mMIPS in MyHDL

……

Page 22: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Ecosystem

import pylabimport matplotlib

Page 23: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Digital Filter

Page 24: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

IIR Type I Digital Filter1 def m_iir_type1(clock,reset,x,y,ts,B=None,A=None):2 # make sure B and A are ints and make it a ROM (tuple of ints)3 b0,b1,b2 = map(int,B)4 a0,a1,a2 = map(int,A)56 ffd = [Signal(intbv(0, min=x.min, max=x.max)) for ii in (0,0)]7 fbd = [Signal(intbv(0, min=x.min, max=x.max)) for ii in (0,0)]8 # intermidiate result, resize from here9 ysop = Signal(intbv(0, min=dmin, max=dmax))1011 @always_seq(clock.posedge, reset=reset)12 def hdl():13 if ts:14 ffd[1].next = ffd[0]15 ffd[0].next = x1617 fbd[1].next = fbd[0]18 fbd[0].next = ysop//Am # truncate (>>)1920 # extra pipeline on the output at clock21 ysop.next = (b0*x) + (b1*ffd[0]) + (b2*ffd[1]) - \22 (a1*fbd[0]) - (a2*fbd[1])23 24 # truncate to the output word format25 y.next = ysop//Am # truncate (>>)2627 return hdl

Page 25: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Simulation

Page 26: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Conclusion

• Python • Easy to learn• Batteries included

• MyHDL• Hardware description in Python• Powerful environment, ecosystem• Verification simplified and fun

• mMIPS• Ported from SystemC• Simulated and Co-Simulated, not fully verified• Synthesized: ISE (untested) and Cadence rc (co-simulated)

• Python: allows (…) matlab style interaction

Page 27: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Short MyHDL History

• Jan Decaluwe• Creator of MyHDL• Founder & Board Member

Easic• Created MyHDL between

2002-2003

• First Release on SourceForge Sep 30, 2003

www.programmableplanet.com

MyHDL ASIChttp://www.jandecaluwe.com/hdldesign/digmac.html

Page 28: RTL design in python: porting the mMIPS Jos Huisken June 25 th, 2013

Acknowledgement

• You guys• for hosting and providing the mMips

• Christopher Felton• Several slides came from him!