rtl design in python: porting the mmips
DESCRIPTION
RTL design in python: porting the mMIPS. Jos Huisken June 25 th , 2013. What is Python?. What is Python?. A general purpose programming language Growing in popularity Interpreted language ( bytecode -interpretive) Multi -paradigm Clean object-oriented - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/1.jpg)
RTL design in python:
porting the mMIPS
Jos HuiskenJune 25th, 2013
![Page 2: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/2.jpg)
What is Python?
![Page 3: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/14.jpg)
MyHDL Flow
![Page 15: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/16.jpg)
Anatomy of a MyHDL Module
![Page 17: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/17.jpg)
Simple adder in myhdl
![Page 18: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/18.jpg)
A register
![Page 19: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/19.jpg)
ALU waveform, using gtkwave
![Page 20: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/20.jpg)
Verilog co-simulation• Icarus Verilog• Cadence ncsim• Cadence ncsim, CMOS90 netlist
Select icarus/verilog implementation:
![Page 21: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/21.jpg)
Single cycle mini-mini MIPS Multi cycle mini MIPS
mMIPS in MyHDL
……
![Page 22: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/22.jpg)
Ecosystem
import pylabimport matplotlib
![Page 23: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/23.jpg)
Digital Filter
![Page 24: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/24.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/25.jpg)
Simulation
![Page 26: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/26.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/27.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/28.jpg)
Acknowledgement• You guys• for hosting and providing the mMips
• Christopher Felton• Several slides came from him!
![Page 29: RTL design in python: porting the mMIPS](https://reader036.vdocument.in/reader036/viewer/2022062302/56816379550346895dd45588/html5/thumbnails/29.jpg)
Resources
• http://www.myhdl.org
• http://www.fpgarelated.com/blogs-1/nf/Christopher_Felton.php
• And an invitation to join (still) password protected: https://[email protected]/huisken/mmips
?? Any Further Questions ??