Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name State Machine
- @inputs StateMachineClk
- @outputs Ports:table
- @trigger StateMachineClk
- function popData() {
- Ports = Ports:merge(Ports["StateMachineDataTable", table][Ports["StateMachineDataIndex", number], table])
- Ports["StateMachineDataIndex", number] = Ports["StateMachineDataIndex", number] + 1
- }
- #[
- Ports:
- Any Ports...
- StateMachineState
- StateMachineDataIndex
- StateMachineDataRoll
- StateMachineDataTable
- ]#
- function state_init() {
- local STATE_FREE = 0
- local STATE_BUSY = 1
- if (first()) {
- Ports:clear()
- Ports["StateMachineState", number] = STATE_FREE
- Ports["StateMachineDataIndex", number] = 1
- Ports["StateMachineDataRoll", table] = table()
- Ports["StateMachineDataTable", table] = table()
- }
- if (clk(clkName()) & Ports["StateMachineState", number] == STATE_BUSY) {
- if (clk("resetState")) { reset() }
- else { clkName()() }
- }
- if (StateMachineClk & !Ports["StateMachineState", number]) {
- Ports["StateMachineState", number] = STATE_BUSY
- "main_sequence"()
- local CurTime = 10
- for (I = 1, Ports["StateMachineDataRoll", table]:count()) {
- local Data = Ports["StateMachineDataRoll", table][I, table]
- timer(Data[1, string], CurTime+Data[2, number])
- Ports["StateMachineDataTable", table]:pushTable(Data[3, table])
- CurTime += Data[2, number]
- }
- timer("resetState", CurTime+1)
- }
- }
- state_init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement