aboutsummaryrefslogtreecommitdiff
path: root/src/main/stanza/ir-parser.stanza
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/stanza/ir-parser.stanza')
-rw-r--r--src/main/stanza/ir-parser.stanza20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/main/stanza/ir-parser.stanza b/src/main/stanza/ir-parser.stanza
index fa103fe3..e1083d50 100644
--- a/src/main/stanza/ir-parser.stanza
+++ b/src/main/stanza/ir-parser.stanza
@@ -6,6 +6,7 @@ defpackage firrtl/parser :
import firrtl/lexer
import bigint2
import firrtl/ir-utils
+ import firrtl/chirrtl
;======= Convenience Types ===========
definterface MStat
@@ -75,7 +76,7 @@ OPERATORS[`eq] = EQUAL-OP
OPERATORS[`neq] = NEQUAL-OP
OPERATORS[`eqv] = EQUIV-OP
OPERATORS[`neqv] = NEQUIV-OP
-OPERATORS[`mux] = MUX-OP
+;OPERATORS[`mux] = MUX-OP
OPERATORS[`pad] = PAD-OP
OPERATORS[`neg] = NEG-OP
OPERATORS[`asUInt] = AS-UINT-OP
@@ -264,11 +265,13 @@ defsyntax firrtl :
stmt = (smem ?name:#id! #:! ?t:#vectype! ) : CDefMemory(first-info(form),name,type(t),size(t),true)
stmt = (read mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp!) :
- CDefMPort(first-info(form),name,mem,list(index,clk),MRead)
- stmt = (write mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp! ?mask:#exp!) :
- CDefMPort(first-info(form),name,mem,list(index,clk,mask),MWrite)
- stmt = (rdwr mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp! ?mask:#exp!) :
- CDefMPort(first-info(form),name,mem,list(index,clk,mask),MReadWrite)
+ CDefMPort(first-info(form),name,UnknownType(),mem,list(index,clk),MRead)
+ stmt = (write mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp!) :
+ CDefMPort(first-info(form),name,UnknownType(),mem,list(index,clk),MWrite)
+ stmt = (rdwr mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp!) :
+ CDefMPort(first-info(form),name,UnknownType(),mem,list(index,clk),MReadWrite)
+ stmt = (infer mport ?name:#id! #=! ?mem:#id! (@get ?index:#exp!) ?clk:#exp!) :
+ CDefMPort(first-info(form),name,UnknownType(),mem,list(index,clk),MInfer)
stmt = (mem ?name:#id! #:! (?ms:#mstat ...)) :
defn grab (f:MStat -> True|False) :
@@ -294,6 +297,7 @@ defsyntax firrtl :
stmt = (?x:#exp <= ?y:#exp!) : Connect(first-info(form),x, y) ;>
stmt = (?x:#exp <- ?y:#exp!) : BulkConnect(first-info(form),x, y);>
+ stmt = (?x:#exp is invalid) : IsInvalid(first-info(form),x)
;stmt = ((?s:#stmt ?rest ...)) :
; Begin(List(s, parse-stmts(rest)))
@@ -362,6 +366,10 @@ defsyntax firrtl :
val num-bits = req-num-bits(v as Int)
SIntValue(BigIntLit(v as Int,num-bits), IntWidth(num-bits))
+ expterm = (mux(?cond:#exp ?tval:#exp ?fval:#exp)) :
+ Mux(cond,tval,fval,UnknownType())
+ expterm = (validif(?cond:#exp ?value:#exp)) :
+ ValidIf(cond,value,UnknownType())
expterm = (?op:#sym(?es:#exp ... ?ints:#int ... ?rest ...)) :
if not empty?(rest) :
FPE(rest, "Illegal operands to primitive operator.")