|
| 1 | +<div class="title-block" style="text-align: center;" align="center"> |
| 2 | + |
| 3 | +# Bluespec Compiler - Information for developers |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +</div> |
| 8 | + |
| 9 | +Here you can find documentation on the internal architecture of [BSC](./README.md) |
| 10 | +and other helpful information for people who want to contribute to the source code. |
| 11 | + |
| 12 | +Feel free to ask questions on GitHub (in an Issue or a Discussion) |
| 13 | +or on the [`bsc-dev`](https://groups.io/g/bsc-dev) mailing list. |
| 14 | +The `bsc-dev` list is for questions that are only relevant to developers, |
| 15 | +to keep traffic on the [`b-lang-discuss`](https://groups.io/g/b-lang-discuss) |
| 16 | +mailing list light for people who are just users. |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +At the moment there is no formal documentation. |
| 21 | +However, there are written responses to questions on GitHub and the mailing lists, |
| 22 | +that can someday be collected and turned into a document. |
| 23 | +The following is a running list of those writings. |
| 24 | + |
| 25 | +* [BSC is a series of stages](https://groups.io/g/bsc-dev/message/14) |
| 26 | + * This write-up includes a link to the following (incomplete) |
| 27 | + [diagrams of the BSC stages](https://docs.google.com/document/d/1130fyOsPtS6gMppB6BaO-qVXxzO5b_ha7sXwLdd8Dtg/edit?usp=sharing) |
| 28 | + * See also [this brief breakdown of BSC](https://groups.io/g/b-lang-discuss/message/358) |
| 29 | + by its three internal representations (CSyntax, ISyntax, ASyntax) |
| 30 | + * Briefly on [printing and dumping from BSC and intermediate files](https://groups.io/g/b-lang-discuss/message/356) |
| 31 | +* [The meaning of `.bo` and `.ba` files and compiler flow](https://github.com/B-Lang-org/bsc/discussions/575) |
| 32 | +* [Understanding scheduling](https://github.com/B-Lang-org/bsc/discussions/622#discussioncomment-7203579) |
| 33 | +* [How to add a new evaluator primitive to BSC](https://groups.io/g/b-lang-discuss/message/526) |
| 34 | + * specifically how to add a function to get the current module name |
| 35 | +* [How the Bluesim C API is imported into Bluetcl](https://groups.io/g/b-lang-discuss/message/554) |
| 36 | +* [Support for reflection in BSC](https://groups.io/g/b-lang-discuss/message/513) |
| 37 | + * specifically, Bluetcl (outside the language) and Generics (inside the language) |
| 38 | +* [The ways that SMT solvers are used in BSC](https://groups.io/g/b-lang-discuss/message/370) |
| 39 | +* [Keyword parsing in BH/Classic](https://github.com/B-Lang-org/language-bh/issues/5#issuecomment-1856814271) |
| 40 | +* [Naming conventions in the generated Verilog](https://groups.io/g/b-lang-discuss/topic/106903347) |
| 41 | +* [How Bluesim provides implementations for import-BVI](https://groups.io/g/b-lang-discuss/topic/106520424) |
| 42 | +* [BSC's deduction of portprops](https://groups.io/g/b-lang-discuss/topic/106516831) |
| 43 | +* [How to use the different Verilog directories (for different synth tools)](https://groups.io/g/b-lang-discuss/topic/106402322) |
| 44 | +* [SAT solver usage and dumping](https://github.com/B-Lang-org/bsc/discussions/693#discussioncomment-9148985) |
| 45 | +* [How Bluesim works (mostly the VCD dumping)](https://github.com/B-Lang-org/bsc/issues/519#issuecomment-1873853532) |
| 46 | +* [Verilog/Bluesim "main" and the naming of clock and reset ports](https://groups.io/g/b-lang-discuss/message/606) |
| 47 | +* [Clock/reset inference](https://github.com/B-Lang-org/bsc/discussions/661) |
| 48 | + * BSC implements certain design decisions for clocks and resets -- |
| 49 | + for example, the choice to implement reset inside of state elements (to ignore the `EN` input) |
| 50 | + instead of outside (as part of the `RDY` logic) -- |
| 51 | + and there may be some documentation (perhaps internal to BS Inc) on those decisions |
| 52 | + * There was a paper at MEMOCODE 2006, |
| 53 | + ["Reliable Design with Multiple Clock Domains"](https://www.researchgate.net/publication/224648422_Reliable_design_with_multiple_clock_domains) |
| 54 | + * An earlier version of this paper was submitted to DCC'06 (Designing Correct Circuits) |
| 55 | + * There is a BS Inc document from 16 Dec 2004 (`mcd.pdf`) that discusses some options, but only clocks, not yet reset |
| 56 | + * There is a BS Inc document from 28 Oct 2004 (`resets.txt`) that purports to be "a proposal on reset handling" |
| 57 | + but is very prelimary about the problem, not yet the solution |
| 58 | + * There is a BS Inc file `bsc-doc/doc/MCD-extensions.txt` that describes |
| 59 | + the new things in BSC to support MCD, both user visible attributes and |
| 60 | + the BSC source code changes |
| 61 | + * The BS Inc training slides include a |
| 62 | + [lecture on MCD](https://github.com/BSVLang/Main/blob/master/Tutorials/BSV_Training/Reference/Lec12_Multiple_Clock_Domains.pdf) |
0 commit comments