class RubyRTL::DSLPrinter

Public Instance Methods

print(circuit) click to toggle source
visitAssign(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 91
def visitAssign node,args=nil
  lhs=node.lhs.accept(self)
  rhs=node.rhs.accept(self)
  "assign(#{lhs} <= #{rhs})"
end
visitBinary(node,args=nil) click to toggle source

expr ===

# File lib/ruby_rtl/dsl_printer.rb, line 166
def visitBinary node,args=nil
  lhs=node.lhs.accept(self)
  op=node.op
  rhs=node.rhs.accept(self)
  "(#{lhs} #{op} #{rhs})"
end
visitBitLit(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 195
def visitBitLit node,args=nil
  node.super.accept(self)
end
visitBitType(node,args=nil) click to toggle source

types ===

# File lib/ruby_rtl/dsl_printer.rb, line 216
def visitBitType node,args=nil
  "bit"
end
visitBitVectorType(bvt,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 220
def visitBitVectorType bvt,args=nil
  "bv#{bvt.bitwidth}"
end
visitBody(body,args=nil) click to toggle source

statements

# File lib/ruby_rtl/dsl_printer.rb, line 85
def visitBody body,args=nil
  code=Code.new
  body.each{|stmt| code << stmt.accept(self,args)}
  code
end
visitCase(case_,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 257
def visitCase case_,args=nil
  code=Code.new
  code << "Case(){"
  code.indent=2
  code << case_.body.accept(self)
  code.indent=0
  code << "}"
  code
end
visitCombinatorial(comb,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 62
def visitCombinatorial comb,args=nil
  body=comb.body.accept(self)
  code=Code.new
  code << "combinatorial(#{comb.label}){"
  code.indent=2
  code << body
  code.indent=0
  code << "}"
  code
end
visitComment(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 20
def visitComment node,args=nil
end
visitCompDecl(decl,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 58
def visitCompDecl decl,args=nil
  "component #{decl.name} => #{decl.comp}"
end
visitElse(else_,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 117
def visitElse else_,args=nil
  body=else_.body.accept(self)
  code=Code.new
  code << "else {"
  code.indent=2
  code << body
  code.indent=0
  code << "}"
  code
end
visitElsif(elsif_,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 128
def visitElsif elsif_,args=nil
  cond=elsif_.cond.accept(self)
  body=elsif_.body.accept(self)
  code=Code.new
  code << "elsif #{cond}{"
  code.indent=2
  code << body
  code.indent=0
  code << "}"
  code
end
visitEnumType(enum_type,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 248
def visitEnumType enum_type,args=nil
  "Enum(#{enum_type.items.join(",")})"
end
visitFsm(fsm,args=nil) click to toggle source

fsm

# File lib/ruby_rtl/dsl_printer.rb, line 141
def visitFsm fsm,args=nil
  code=Code.new
  code << "fsm(#{fsm.name}){"
  code.indent=2
  code << fsm.body.accept(self)
  code.indent=0
  code << "}"
  code
end
visitFuncCall(func,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 178
def visitFuncCall func,args=nil
  name=func.name
  argus=func.args.collect{|arg| arg.accept(self)}.join(',')
  "#{name}(#{argus})"
end
visitIf(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 97
def visitIf node,args=nil
  cond=node.cond.accept(self)
  body=node.body.accept(self)
  elsifs_=Code.new
  node.elsifs.collect{|elsif_| elsifs_ << elsif_.accept(self)}
  else_=node.else.accept(self) if node.else
  code=Code.new
  code << "if #{cond}{"
  code.indent=2
  code << body
  code.indent=0
  if elsifs_.size>0 or node.else
    code << "}"
  end
  code << elsifs_
  code << else_ if node.else
  code << "}" unless node.else or elsifs_.size>0
  code
end
visitIndexed(indexed,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 184
def visitIndexed indexed,args=nil
  lhs=indexed.lhs.accept(self)
  rhs=indexed.rhs.accept(self)
  "#{lhs}[#{rhs}]"
end
visitInput(input,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 27
def visitInput input,args=nil
  input.name
end
visitIntLit(lit,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 199
def visitIntLit lit,args=nil
  lit.val
end
visitIntType(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 224
def visitIntType node,args=nil
  "int#{node.bitwidth}"
end
visitLiteral(node,args=nil) click to toggle source

literals ===

# File lib/ruby_rtl/dsl_printer.rb, line 191
def visitLiteral node,args=nil
  node.val
end
visitMemoryType(mem_type,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 252
def visitMemoryType mem_type,args=nil
  typename=mem_type.type
  "Memory(#{mem_type.size},#{typename})"
end
visitNext(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 161
def visitNext node,args=nil
  "next_state #{node.name}"
end
visitOutput(output,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 31
def visitOutput output,args=nil
  output.name
end
visitRIntLit(lit,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 207
def visitRIntLit lit,args=nil
  lit.val
end
visitRIntType(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 228
def visitRIntType node,args=nil
  "rint#{node.bitwidth}"
end
visitRUIntLit(lit,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 211
def visitRUIntLit lit,args=nil
  lit.val
end
visitRUintType(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 232
def visitRUintType node,args=nil
  "ruint#{node.bitwidth}"
end
visitRecordType(rec_type,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 240
def visitRecordType rec_type,args=nil
  items=[]
  rec_type.hash.each{|item,type|
    items << "#{item} => #{type}"
  }
  "Record(#{items.join(",")})"
end
visitSequential(seq,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 73
def visitSequential seq,args=nil
  body=seq.body.accept(self)
  code=Code.new
  code << "sequential(#{seq.label}){"
  code.indent=2
  code << body
  code.indent=0
  code << "}"
  code
end
visitSig(sig,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 23
def visitSig sig,args=nil
  sig.name
end
visitSigDecl(decl,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 40
def visitSigDecl decl,args=nil
  name=(sig=decl.sig).accept(self)
  type=sig.type.accept(self)
  if (values=$typedefs.values).include?(sig.type)
    idx=values.index(sig.type)
    type=$typedefs.keys[idx]
  end
  case sig
  when Input
    kind="input "
  when Output
    kind="output"
  when Sig
    kind="wire"
  end
  "#{kind} #{name} => #{type}"
end
visitState(state,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 151
def visitState state,args=nil
  code=Code.new
  code << "state(#{state.name}){"
  code.indent=2
  code << state.body.accept(self)
  code.indent=0
  code << "}"
  code
end
visitTypeDecl(decl,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 35
def visitTypeDecl decl,args=nil
  definition=decl.definition.accept(self)
  return "typedef #{decl.name} => #{definition}"
end
visitUIntLit(lit,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 203
def visitUIntLit lit,args=nil
  lit.val
end
visitUIntType(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 236
def visitUIntType node,args=nil
  "uint#{node.bitwidth}"
end
visitUnary(node,args=nil) click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 173
def visitUnary node,args=nil
  expr=node.expr.accept(self)
  "(#{node.op} #{expr})"
end