Skip to content

Instantly share code, notes, and snippets.

@ikwzm
Last active August 31, 2016 06:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikwzm/6ebf63e2b6e1a835928bb437b512c545 to your computer and use it in GitHub Desktop.
Save ikwzm/6ebf63e2b6e1a835928bb437b512c545 to your computer and use it in GitHub Desktop.
design := params? (channel | module)*
channel := "(" "CHANNEL" channel-id:number value-type reader-ep:channel-ep writer-ep:channel-ep ")"
channel-ep := "(" module-id:number table-id:number resource-id:number ")"
module := "(" "MODULE" module-id:number module-name:label params parent-module table* ")"
parent-module := "(" "PARENT" module-id:number ")"
table := "(" "TABLE" table-id:number registers resources inital-state? state* ")"
inital-state := "(" "INITIAL" state-id:number ")"
registers := "(" "REGISTERS" register* ")"
register := "(" "REGISTER" reg-id:number reg-name:label register-class reg-type:value-type initial-value? ")"
register-class := "REG" | "CONST" | "WIRE"
initial-value := number
resources := "(" "RESOURCES" resource* ")"
resource := "(" "RESOURCE" res-id:number res-class:resource-class input-types:value-types output-types:value-types params? resource-option? ")"
resource-class := "tr" | "set" | "print" | "phi" | "select" | "assert" | "mapped" |
"channel-write" | "channel-read" |
"sibling-task" | "sibling-task-call" | "sub-module-task" | "sub-module-task-call" |
"ext-input" | "ext-output" |
"array" | "embedded" | "foreign-reg" |
"add" | "sub" | "mul" |
"bit-and" | "bit-or" | "bit-xor" | "bit-inv" |
"bit-sel" | "bit-concat" |
"gt" | "gte" | "eq" | "shift"
resource-option := array-desc | foreign-reg-desc | callee-task-desc
array-desc := "(" "ARRAY" addr-width:number data-type:value-type array-ownership array-mem-type ")"
array-ownership := "EXTERNAL" | "INTERNAL"
array-mem-type := "RAM" | "ROM"
callee-task-desc:= "(" "CALLEE-TABLE" module-id:number table-id:number ")"
foreign-reg-desc:= "(" "FOREIGN-REG" module-id:number table-id:number reg-id:number ")"
value-types := "(" value-type* ")"
value-type := "(" "INT" width:number ")" |
"(" "UINT" width:number ")"
state := "(" "STATE" state-id:number instruction* ")"
instruction := "(" "INSN" insn-id:number res-class:resource-class res-id:number operand:number-list target-state-ids:number-list input-reg-ids:number-list output-reg-ids:number-list ")"
params := "(" "PARAMS" param* ")"
param := "(" param-key param-value ")"
param-key := label
param-value := label | number
number-list := "(" number* ")"
number := [0-9]+
label := [a-zA-Z_]+[a-zA-Z0-9_-]*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment