1 / 29

RTL design in python: porting the mMIPS

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

iram
Download Presentation

RTL design in python: porting the mMIPS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. What is Python?

  3. What is Python? • A general purpose programming language • Growing in popularity • Interpretedlanguage (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

  4. What is MyHDL? • A Python package which enables hardware description • Open-source project • Batteries included (more on this later)

  5. MyHDL Extends Python • MyHDL is Python • Using Python constructs to extend • Object Oriented • Signal, intbv • Generators • Micro-thread like, enables concurrency behavior • Resumablefunctions that maintain state • Decorators • Meta-programming • “Macro” mechanism • Modifies a function / generator • @always_seqand @always_comb

  6. 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

  7. 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

  8. 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) • MyHDLextends Python for hardware description

  9. 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

  10. 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

  11. Python generator: Fibonacci • # generator version • deffibon(n): • a = b = 1 • result = [] • foriinxrange(n): • yield a • a, b = b, a + b • forx infibon(8): • print x, • 1 1 2 3 5 8 13 21 • # function version • deffibon(n): • a = b = 1 • result = [] • foriinxrange(n): • result.append(a) • a, b = b, a + b • return result • fibon(8) • [1, 1, 2, 3, 5, 8, 13, 21]

  12. MyHDL Decorators • MyHDL Decorators “creates ready-to-simulate generators from local function definitions” • @instance • @always(sensitivity list) • @always_seq(clock,reset) • @always_comb

  13. Python decorator • @mydecorator • defmyfunc(): • return • # is equivalent to • defmyfunc(): • return • myfunc = mydecorator(myfunc) • defverbose(origfunc): • # make new func • defnewfunc(*args, **kwargs): • print “entering”, origfunc.__name__ • origfunc(*args, **kwargs) • print “exiting”, origfunc.__name__ • returnnewfunc • @verbose • defmyfunc(s): • print s • myfunc(‘hoi’) • entering myfunc • hoi • exiting 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

  14. MyHDL Flow

  15. MyHDL Conversion • MyHDL has a convertible subset • Convert to Verilog • Convert to VHDL • Pragmatic • Standard FPGA / ASIC flow after conversion

  16. Anatomy of a MyHDL Module

  17. Simple adder in myhdl

  18. A register

  19. ALU waveform, using gtkwave

  20. Verilog co-simulation • Icarus Verilog • Cadence ncsim • Cadence ncsim, CMOS90 netlist Select icarus/verilog implementation:

  21. mMIPS in MyHDL Single cycle mini-mini MIPS Multi cycle mini MIPS ……

  22. Ecosystem import pylab import matplotlib

  23. Digital Filter

  24. IIR Type I Digital Filter 1defm_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) 5 6 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 here 9 ysop = Signal(intbv(0, min=dmin, max=dmax)) 10 11 @always_seq(clock.posedge, reset=reset) 12 defhdl(): 13 ifts: 14 ffd[1].next = ffd[0] 15 ffd[0].next = x 16 17 fbd[1].next = fbd[0] 18 fbd[0].next = ysop//Am # truncate (>>) 19 20 # extra pipeline on the output at clock 21 ysop.next = (b0*x) + (b1*ffd[0]) + (b2*ffd[1]) - \ 22 (a1*fbd[0]) - (a2*fbd[1]) 23 24 # truncateto the output word format 25 y.next = ysop//Am # truncate (>>) 26 27 returnhdl

  25. Simulation

  26. 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

  27. 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 ASIC http://www.jandecaluwe.com/hdldesign/digmac.html

  28. Acknowledgement • You guys • for hosting and providing the mMips • Christopher Felton • Several slides came from him!

  29. Resources • http://www.myhdl.org • http://www.fpgarelated.com/blogs-1/nf/Christopher_Felton.php • And an invitation to join (still) password protected: https://huisken@bitbucket.org/huisken/mmips ?? Any Further Questions ??

More Related