class RubyRTL::DSLPrinter
Public Instance Methods
print(circuit)
click to toggle source
# File lib/ruby_rtl/dsl_printer.rb, line 8 def print circuit code=Code.new code << "# code generated by DSL printer" if root=circuit.ast code << "circuit #{circuit.name}" #root.ios.each{|io| code << io.accept(self)} root.decls.each{|decl| code << decl.accept(self)} code << root.body.accept(self) puts code.finalize end end
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
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
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
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
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
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