1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
|
Bluespec Compiler (BSC) Release Notes
=====================================
:website: https://github.com/B-Lang-org/bsc
:last-update-label!:
:nofooter:
2023.01 Release
---------------
Changes since release 2022.01:
Documentation
~~~~~~~~~~~~~
* Addition of the BSV Language Reference Guide with updates
* Addition of the BH (Bluespec Haskell/Classic) Reference Guide with
updates
* Fixes in the Libraries Reference Guide, for the `Cntrs`, `Clocks`,
and `BRAMCore` libraries
Compiler
~~~~~~~~
* Fix to the pretty-printing of BH syntax for `letrec` and `letseq`
* Removed use of `-fpermissive` when compiling C/C++ files, which
eliminates warnings when compiling with foreign imports
* For macOS 12 (XCode 14) and later, disabled chained fixups in the
C++ compiler when generating shared objects, which resolves a
warning about chained fixups not working with dynamic lookup
* Miscellaneous small optimizations
Libraries
~~~~~~~~~
* Fixes to the interface schedule for `mkSizedBypassFIFOF`
(in `SpecialFIFOs`)
* Cleanup to `mkBRAMAdapter` (in `BRAM`)
* Addition of `getEvalPosition` to `Prelude`, which can be used
similarly to `getStringPosition` to add position information to
function error messages when a `String` argument is not available
Verilog
~~~~~~~
* Improved portability of Verilator linking by removing `bash`-isms
from the shell script
Internal
~~~~~~~~
* Improvements to CI (continuous integration)
* Releases now built with GHC 9.0.2 (previously 9.0.1)
For Developers
~~~~~~~~~~~~~~
* Added support for using Haskell Language Server (HLS) on the BSC
source code, via files provided in the `util` directory
'''
2022.01 Release
---------------
This release supports building and running on more systems, such as
CentOS 7.9, FreeBSD, Arm-based Macs, systems with Tcl 8.5, and macOS
when Tcl-Tk is installed via Homebrew.
This release also includes initial support for DPI instead of VPI (for
imported C functions) and support for automatic linking with Verilator
(using `-vsim verilator`). Feedback on both of these features is
welcome!
Changes since release 2021.07:
General
~~~~~~~
* Update the install instructions
** Show how to use Bluetcl to programmatically retrieve the BSC version
** Show how to use Cabal `v2-install`
** Show how to build a release without Asciidoctor
* Support building and running on more systems
Documentation
~~~~~~~~~~~~~
* Fix typos in the `MIMO` library documentation
* Document new `-use-dpi` flag
* Document Verilator as a new option for `-vsim`
Compiler
~~~~~~~~
* Support optional use of DPI instead of VPI, for imported C functions (BDPI)
** This is draft support; feedback welcome!
** Size-polymorphic import-BDPI functions are not yet supported
** A new flag, `-use-dpi`, must be provided when compiling and linking
* Checkout the Yices submodule at an official tagged version, 2.6.4
* Udpate the source to compile with GHC 9.2
** Note that BSC triggers a bug in GHC 9.2.1 (#20639),
which has been fixed in 9.2.2
Libraries
~~~~~~~~~
* Fix the modules in the `Divide` library
** Fix bug when iterations-per-cycle is greater than one
** Fix scheduling issues at the interface
** Improve the provisos
* Fix divide and square root modules in the `FloatingPoint` library,
to not require `-aggressive-conditions` flag for correct behavior
* Fix `Prelude` function `hexDigitToInteger`
Bluesim
~~~~~~~
* Eliminate error on exit when running on systems with Tcl 8.5
Verilog
~~~~~~~
* Support automatic linking with Verilog, using `-vsim verilator`
** This is draft support; feedback welcome!
** The `-use-dpi` flag is needed for designs with imported C,
since Verilator does not support our VPI implementation
** Designs with generated clocks may not link; ultimately, BSC may
need a Verilator backend (separate from Verilog and Bluesim) to
support arbitrary designs
'''
2021.07 Release
---------------
Welcome to the first release of open BSC!
Thank you and congratulations to everyone involved!
We have decided on the convention YYYY.MM for naming releases.
And we have decided on a release schedule of twice a year,
in January and July. Therefore, this first release is 2021.07
and users can expect a next release, 2022.01, in six months.
Patch releases, if needed, will be named 2021.07.1, etc.
This release has some incompatibilities with prior proprietary
releases, but for the most part remains the same. Hopefully
all projects using prior releases should find it accessible to
migrate to this open release. But users should expect that
more incompatible changes may be coming in future releases.
Examples of changes to expect include:
* Renaming and reorganizing of directories in the release
* Renaming of Verilog primitives
(for example, to start with a unique prefix such as `__BSC_`)
* Renaming of preprocessor macros
(for example, changing the prefix `BSV_` to `BSC_`)
* New preprocessor macros
(for example, rather than having Vivado-specific versions
of Verilog primitives in a separate directory, they may
coexist in one file and users may need to define a macro
such as `VIVADO`, to select for the target tool)
* Use of newer Verilog features
(rather than restricting primitives and generated Verilog to
the Verilog95 standard as much as possible)
The changes in this release are highlighted below.
In addition, it is worth acknowledging the logistical and community
changes. Most communication around open BSC happens on GitHub;
however, we also now have mailing lists, hosted at Groups.io.
* To receive announcements about BSC and related projects,
subscribe to
https://groups.io/g/b-lang-announce[b-lang-announce]
* For questions and discussion about BSC source,
subscribe to the developers' mailing list
https://groups.io/g/bsc-dev[bsc-dev]
* For any questions or discussion about Bluespec HDLs, using BSC,
or related projects, subscribe to
https://groups.io/g/b-lang-discuss[b-lang-discuss]
Only the core BSC tools have been included in the open BSC project
(compiler, standard libraries, Bluesim, and Bluetcl). Some libraries
have been released in a separate GitHub repository,
https://github.com/B-Lang-org/bsc-contrib[`bsc-contrib`].
And BDW, the Bluespec Development Workstation GUI, has been released
as its own GitHub project,
https://github.com/B-Lang-org/bdw[`bdw`].
Other features from the proprietary release (such as BlueNoC, SCE-MI,
and other emulation tools and transactor libraries) have not been
released.
Highlights since proprietary release 2019.05:
Licensing
~~~~~~~~~
* FlexLM licensing has been removed from BSC and Bluesim, along with
related flags
* Source is provided under the BSD-3-Clause license, except for some
components where specified (under other open/copyleft licenses)
Documentation
~~~~~~~~~~~~~
* The documentation for standard libraries, that was previously found
in the BSV Language Manual, has been collected into a stand-alone
document, now residing in the `bsc` repo so that it can be updated
as the libraries are updated
* BDW documentation has been removed from the User Guide and placed in
its own document in the `bdw` repo; the remainder of the User Guide
resides in the `bsc` repo where hopefully it can be updated
as features are updated
General
~~~~~~~
* Users no longer need to set `BLUESPECDIR` -- the executables will
expect the directory to sit at a known location relative to the
executables
* The locations for C++ libraries (SAT, VPI, Bluesim) are no longer
under a CXXFAMILY directory (for example, `g++4_64`)
* Version information no longer includes a date, just a build number
(usually a git hash) and a version name (now reported as a single
string instead of three separate fields)
Compiler
~~~~~~~~
* Removed unnecessary library requirements (X11, Tcl/Tk)
** Previously, the BSC executable required dynamic linking
with Tcl, Tk, and X11 libraries -- which were legitimately
needed for Bluetcl and Bluewish, but not for BSC
* Removed `Prelude` directory and consolidated all the libraries into
the `Libraries` directory
* Flags and special support for BlueNoC/SCE-MI have been removed
* New flags `-show-timestamps` and `-show-version`
* New flag `-quiet` and its short form `-q`
* Yices is now the default SMT solver and the library is now included
** Support is updated to the latest version (2.6.2)
** Bugs have been fixed in BSC's use of Yices
* Support for CUDD solver removed, along with associated flags for
scheduler effort and BDD cache size
* Better code generation for tagged unions and for enums that are
non-consecutive or non-zero-based
** Pack-unpack of types results in pure wires in more cases
** More optimized code should occur in other situations, with fewer
unnecessary case-statements
* Improved the handling of struct/union fields (in patterns,
selection, and value construction)
** The BSV parser now accepts a pattern syntax for matching structs
** BSV syntax for struct vs tagged union can no longer be used
interchangeably (users may need to add or remove the `tagged`
keyword in existing code); this also means that clash between
namespaces is no longer a problem
** BH/Classic still uses the same syntax for both structs and
constructors with named fields, so the type checker still
uses heuristics to decide which is intended -- this process
has been improved
** Parsing/type-checking is now more strict about when named
vs unnamed fields can be used
** Empty braces (without any listed fields) are disallowed in
BSV syntax in situations where this does not make sense
* Record updates are now allowed on interfaces
* In BH/Classic, `prefix` is no longer a reserved keyword, and is now
supported as an alternate to `prefixs` port renaming pragma
* Type-level strings are now supported, as a new string kind
(alongside numeric and star kinds)
** The pseudo-function `stringOf` exists for converting a string
type to a string value (along the lines of `valueOf` for
numeric types)
* Fixed some `combsched` internal errors in scheduling
* Fixed an internal error on mutually recursive type class instances
* Fixed an issue where parallel calls to BSC would conflict if they
used the C preprocessor, because it created a temporary file with a
hard-coded name (fixed to use a unique name now)
* Fixed a bug in static evaluation of SLE/SLT on 0-width values
* Other efficiency improvements, error message improvements, and bug fixes
** Releases are also built with newer GHC versions, which ought to
improve performance
Libraries
~~~~~~~~~
* Experimental support in the Prelude for datatype-generic functions,
based on GHC's Generics:
https://hackage.haskell.org/package/base/docs/GHC-Generics.html
* New `CShow` library (implemented with Generics), which provides a
`CShow` typeclass that acts similar to `FShow` but prints values in
BH/Classic syntax
* An instance of `FShow` is derived for `Either`
* The `DefaultValue` typeclass is now in `Prelude`, so it is
automatically available and does not require importing a separate
package
* The `guarded` parameter on FIFO primitives was fixed to be of type
`Bool` rather than `Integer`
* Fix to `SquareRoot` library
Bluetcl
~~~~~~~
* The executable links with the locally installed Tcl/Tk and Itlk/Itk
(rather than being compiled with source snapshots for specific
versions) which also means that any locally installed Tcl libraries
are available for use in Bluetcl
* The separate `bluewish` executable has been removed -- now that
local libraries are used, Bluetcl users can `require` the local Tk
package, to pull in Tk/X11 support
* Removed unnecessary library requirements (X11, Tk)
** Bluetcl can be run on systems where Tk/X11 is not available,
as long as the Bluetcl commands don't request it
* `TCLLIBPATH` and `BLUETCLLIBPATH` environment variables are
supported, for listing directories to add to the search path for
packages
Bluesim
~~~~~~~
* Fixed code generation for conditionally called ActionValue
methods/tasks
* Improved a scaling issue in Bluesim linking
* Handles `SIGPIPE` the same as Ctrl-C
Verilog
~~~~~~~
* Fixed typos in the Quartus versions of the Verilog primitives for
BRAMs
* Fixed BSC linking for Icarus Verilog, so that the Verilog search
path is also used for finding preprocessor include files
* BSC linking now supported for Questa (using `-vsim questa`)
* BSC linking for ModelSim updated to remove deprecated flag
'''
|