2024-12-09 01:37:10 +00:00
|
|
|
# General and Planning
|
|
|
|
- [ ] might need many validation phases
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] it's conceivable that one could construct a Yosys memory Cell
|
|
|
|
with invalid parameters
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] detect mismatched sizes in assignments
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] need canonical form making it easy to run all these validation
|
|
|
|
passes
|
|
|
|
- [ ] are recursive slices inclusive?
|
|
|
|
- [ ] what are the semantics of connection `<conn-stmt>`? Where is
|
|
|
|
`<conn-stmt>` employed?
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] Validate that `123456789[0:9][0:8]` is valid RTLIL
|
|
|
|
- [ ] add validation section to README
|
|
|
|
- [ ] just support Cell memV2
|
|
|
|
- [ ] for value, what happens if we have 0 binary digits
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] modify parser to ignore comments... - should probably wait until
|
|
|
|
parser is finished before asking
|
|
|
|
- [ ] modify AST to support src tracking - needed to allow for human
|
|
|
|
readable and correctable validation errors
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] when writing simulator, must specify directions on cell ports
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] in the <process>, why are we allowed to have <assign-stmt> before
|
2024-12-09 05:03:46 +00:00
|
|
|
and after the optional <switch> stmt? If the ordering here is
|
|
|
|
semantically significant, then modify AST to only have single
|
|
|
|
`[AssignStmt]` field and update parser behavior accordingly.
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] inspect Chris's mini-RTLIL
|
|
|
|
- [ ] add RST grammar file to repo
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] name parsers so that that we know where failures occured
|
|
|
|
- [ ] may want to also derive equality statements
|
|
|
|
- [x] replace both `pEol *> pMaybeWs` and `pEol <* pMaybeWs`
|
|
|
|
with `pEolAndAdvanceToNextNonWs`
|
2024-12-09 05:03:46 +00:00
|
|
|
- [x] Check inline sequencing of whitespace parsers in do blocks.
|
2024-12-09 04:42:03 +00:00
|
|
|
Terminating instances of `pWs` should be preceeded by `<*`
|
2024-12-09 07:34:11 +00:00
|
|
|
- [ ] Verify no backtracking needed when sequencing `many` parsers.
|
|
|
|
Basically, we want to make sure that the argument of the `many`
|
|
|
|
parser doesn't conflict(exhibit a partial early match) with
|
|
|
|
the argument of the parser after the argument of the `many` parser.
|
2024-12-09 04:00:00 +00:00
|
|
|
|
|
|
|
# Parser Development
|
2024-12-09 05:03:46 +00:00
|
|
|
- [x] Sync
|
|
|
|
- [ ] Process
|
2024-12-09 07:34:11 +00:00
|
|
|
- [x] Finish `pCell` with `pCellEndStmt`
|
2024-12-09 05:03:46 +00:00
|
|
|
- [ ] Rewrite `pWireStmt` and `pMemoryStmt` using do-notation...
|
2024-12-09 07:34:11 +00:00
|
|
|
- [x] Remove all instances of `_ <-`
|
2024-12-09 05:03:46 +00:00
|
|
|
- [ ] Module
|
2024-12-09 07:34:11 +00:00
|
|
|
- [ ] Remove weird GHC imports
|
2024-12-09 16:34:26 +00:00
|
|
|
- [x] Are the `try` statements in `pWireOption` correctly constructed?
|
2024-12-09 07:34:11 +00:00
|
|
|
- [ ] Consider the very weird case where the process body has nothing,
|
|
|
|
thus, `pEolAndAdvanceToNextNonWs` may never get invoked in any of
|
|
|
|
the sub-parsers encapsulated in `pProcessBody`. Do we need to
|
|
|
|
advance whitespaces so we can hit `<proc-end-stmt>`?
|
|
|
|
- [ ] What are the implications for other parsers?
|
|
|
|
|
|
|
|
I think that in this case we're OK as `<proc-stmt>` necessarily
|
|
|
|
precedes `<process-body>` and `<proc-stmt>` terminates in an EOL
|
|
|
|
parser that advances to the next non-whitespace.
|
|
|
|
|
|
|
|
I still need to verify how other parsers behave. For example, what
|
|
|
|
happens if we have a cell with no `<cell-body-stmt>`
|
2024-12-09 04:00:00 +00:00
|
|
|
|
|
|
|
# Parser Verification
|
|
|
|
- [ ] I think only EOL terminated parsers should be responsible
|
2024-12-09 07:34:11 +00:00
|
|
|
for advancing the Parsec scanner to the next non-space...
|
2024-12-09 04:00:00 +00:00
|
|
|
- [ ] lift grammar into prover and show that all EOL terminated parsers
|
|
|
|
are either followed by EOF or a keyword such "module", "autoidx",
|
|
|
|
etc
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] first, manually inspect switch parser and try and see if it
|
2024-12-09 04:00:00 +00:00
|
|
|
can infinitely recurse... Then empirically validate against
|
|
|
|
corpus
|
|
|
|
|
|
|
|
# Simulation Behavior
|
|
|
|
- [ ] Figure out the computational semantics of what it means to
|
|
|
|
sync on `high`. I already understand the computational
|
|
|
|
semantics around synchronizing on `posedge` for example...
|
2024-12-09 01:37:10 +00:00
|
|
|
|
2024-12-09 04:00:00 +00:00
|
|
|
# Simulation
|
2024-12-09 01:37:10 +00:00
|
|
|
- [ ] dump to VCD
|
|
|
|
- [ ] Write dynamically typed executor in Haskell
|
|
|
|
- [ ] Subsequent IR passes may emerge natrually
|
|
|
|
|
|
|
|
# Optimizations
|
|
|
|
- [ ] squeeze out recursive slices
|