SYF(1)

πŸ“¦ version 5.1.1-unstable-2025-02, in nixos 26.05, nixpkgs unstable

πŸ’… SYF(1) β€” the Finite State Machine synthesizer

okay so this is SYF(1), straight out of the CAO-VLSI Reference Manual bestie, and it's literally the glow-up station for your finite state machines ✨


🌸 NAME 🌸

SYF β€” Finite State Machine synthesizer. that's it, that's the whole vibe πŸŽ€


πŸ¦‹ ORIGIN πŸ¦‹

so this software belongs to the ALLIANCE CAD SYSTEM, developed by the ASIM team at the LIP6 laboratory of UniversitΓ© Pierre et Marie CURIE, in Paris, France πŸ—Ό (yes the accented characters are giving trΓ¨s chic, we keep them).

like, they built this whole thing in Paris. main character energy honestly πŸ‘‘


⭐ SYNOPSIS ⭐

syf -a|j|m|u|o|r [-CDEOPRSTV] input_name [output_name]

πŸ’– DESCRIPTION πŸ’–

okay so syf is a Finite State Machine synthesizer. and not to be dramatic but it's fast β€” it generates a VHDL Data Flow description (peep vbe(5)) from a VHDL Finite State Machine description (peep fsm(5)) and it does NOT waste your time πŸ’…

the input FSM spec can use an internal STACK (yes, a whole stack, iconic). both MOORE and MEALEY FSMs can be synthesized, with output registers if you want them. and for a MOORE FSM specifically, there's this timing-optimized implementation that emulates a ROM with a microsequencer β€” we love an overachiever ✨ a scan-path for the state registers can also be implemented. no cap, it does a lot.


🧚 ENVIRONMENT VARIABLES 🧚

  • MBK_WORK_LIB(1) β€” tells you the path to the read/write directory for the session. that's where the files live, bestie 🏠

✨ OPTIONS ✨

πŸŽ€ the encoding girlies (pick one, fr)

  • -a β€” uses "Asp" as the encoding algorithm.
  • -j β€” uses "Jedi" as the encoding algorithm.
  • -m β€” uses "Mustang" as the encoding algorithm.
  • -u β€” uses an encoding given by you, the user, through the <input_name>.enc file πŸ’… in this file, a line started by a # character is a comment. a valid line contains one state name followed by its hexadecimal code. yes, hex. we're fancy.
  • -o β€” uses the one hot encoding algorithm. classic, beloved, slays.
  • -r β€” uses distinct random numbers for state encoding. chaos. love that for you 🎲

πŸ¦‹ the behaviour tweaks

  • -C β€” checks the transition's consistency. like a vibe check but for transitions.
  • -D β€” with this option syf doesn't optimize unused codes, i.e. Don't Care codes. so they just sit there. existing. unbothered. 😌
  • -E β€” saves the encoding result in the <output_name>.enc. this file has the same syntax as the <input_name>.enc file which is used by the -u option. round trip, we love a round trip 🫢
  • -O β€” with this option syf places registers on the outputs.
  • -P β€” implements a scan-path for the state registers, stack registers and possibly output registers πŸ” the scan-path mechanism is directely included in the states decoder (their spelling, not mine, keeping it πŸ’€). users should use scapin(5) for a correct insertion of a scan-path in a netlist. please check fsm(5) for information about scan-path descriptions.
  • -R β€” this option is only available for MOORE FSM πŸ‘‘ with this option, syf emulates a ROM with micro-sequencer implementation: there is no combinatorial logic between the state registers and the FSM outputs. like, none. this can be mandatory for external timing constraints ⏰ see fsm(5) and grog(1) for more on ROM descriptions.
  • -S β€” with this option syf doesn't take into account the cost of the transitions to compute an encoding. it's just not thinking about cost bestie. living in the moment.
  • -V β€” Verbose mode on πŸ”₯ each step of the FSM synthesis is displayed on the standard output, along with some statistics. numbers! graphs! lore!
⚠️ quick note: -P doesn't magically insert your scan-path into a netlist β€” that's scapin(5)'s job. don't skip that step or it's giving chaos 😭

🌈 EXAMPLE 🌈

environment variables first, obviously:

setenv MBK_WORK_LIB /alliance/tutorials/dlxm

then syf is called as follow (the dlx_ctrl.fsm is already created in /alliance/tutorials/dlxm):

syf -sE dlx_ctrl

two files will be generated, a states encoding file dlx_ctrls.enc and a VHDL data flow file /alliance/tutorials/dlxm/dlx_ctrls.vbe πŸŽ‰ two files! for free! well, for the cost of one command.


πŸ‘‘ SEE ALSO πŸ‘‘

fsm(5), vbe(5), vhdl(5), boom(1), boog(1), loon(1), scapin(1), asimut(1), proof(1), MBK_WORK_LIB(1).

(the whole friend group honestly, go say hi 🫢)


πŸ“ BUG REPORT πŸ“

this tool is under development at the ASIM department of the LIP6 laboratory.

we need your feedback to improve documentation and tools πŸ™ like genuinely, tell them. they're asking. it's giving collaborative.


and that's the page bestie πŸ’œ β€” brought to you by ASIM/LIP6, dated October 1, 1997 (a vintage, an icon, a legend πŸ•°οΈβœ¨). now go synthesize something gorgeous.

πŸ“¦ where this page comes from