Bitstream Generation
Given packing, placement, and routing result, we can finally write the
bitstream! In cgra_pnr I adopt Steve's simple assembly language,
which his bsbuilder tool can compile into an actual bitstream. We
will call the language bsb, short for bitstream builder
format. You can see more details about bsb and bsbuilder in the
BSB-Format section.
There are several reasons to use bsb files:
- It's human-readble and editable. So it's easy to spot any error and correct the bitstream by hand.
bsbuiderhas extensive checks for routings. So it's very helpful to debug the router and the bitstream generator, especially in the early stage. Although the PnR toolchain also has some self-check, it's also a good idea to have a third-party checking your result.- The PnR toolchain does not need to worry about the underlying PE/SB/CB
encoding change as it is now
bsbuider'sjob to keep that updated.
Implementation Notes
Because of the way bsb configures switchboxes, the routing format can not be translated
to bsb directly. For instance, the routing format is out -> in, whereas
the bsb uses in -> out on the same tile. In addition, because the router
uses MST to minimize the wirelength, there will be some jumps in the
routing result. The bitstream generator is required to recognize the jump
and figure out where tile makes the jump and reconstruct in -> out format.