File: clash-prelude.cabal

package info (click to toggle)
haskell-clash-prelude 1.8.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,432 kB
  • sloc: haskell: 23,509; makefile: 6
file content (491 lines) | stat: -rw-r--r-- 17,583 bytes parent folder | download
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
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
Cabal-version:        2.2
Name:                 clash-prelude
Version:              1.8.1
Synopsis:             Clash: a functional hardware description language - Prelude library
Description:
  Clash is a functional hardware description language that borrows both its
  syntax and semantics from the functional programming language Haskell. The
  Clash compiler transforms these high-level descriptions to low-level
  synthesizable VHDL, Verilog, or SystemVerilog.
  .
  Features of Clash:
  .
  * Strongly typed, but with a very high degree of type inference, enabling both
    safe and fast prototyping using concise descriptions.
  .
  * Interactive REPL: load your designs in an interpreter and easily test all
    your component without needing to setup a test bench.
  .
  * Higher-order functions, with type inference, result in designs that are
    fully parametric by default.
  .
  * Synchronous sequential circuit design based on streams of values, called
    @Signal@s, lead to natural descriptions of feedback loops.
  .
  * Support for multiple clock domains, with type safe clock domain crossing.
  .
  .
  This package provides:
  .
  * Prelude library containing datatypes and functions for circuit design
  .
  To use the library:
  .
  * Import "Clash.Prelude"
  .
  * Alternatively, if you want to explicitly route clock and reset ports,
    for more straightforward multi-clock designs, you can import the
    "Clash.Explicit.Prelude" module. Note that you should not import
    "Clash.Prelude" and "Clash.Explicit.Prelude" at the same time as they
    have overlapping definitions.
  .
  A preliminary version of a tutorial can be found in "Clash.Tutorial", for a
  general overview of the library you should however check out "Clash.Prelude".
  Some circuit examples can be found in "Clash.Examples".
Homepage:             https://clash-lang.org/
bug-reports:          https://github.com/clash-lang/clash-compiler/issues
License:              BSD-2-Clause
License-file:         LICENSE
Author:               The Clash Authors
Maintainer:           QBayLogic B.V. <devops@qbaylogic.com>
Copyright:            Copyright © 2013-2016, University of Twente,
                                  2016-2017, Myrtle Software Ltd,
                                  2017-2019, QBayLogic B.V., Google Inc.,
                                  2021-2023, QBayLogic B.V.
Category:             Hardware
Build-type:           Simple

Extra-source-files:   README.md
                      CHANGELOG.md
                      AUTHORS.md

extra-doc-files:      doc/*.svg

source-repository head
  type: git
  location: https://github.com/clash-lang/clash-compiler.git
  subdir: clash-prelude

flag large-tuples
  description:
    Generate instances for classes such as `NFDataX` and `BitPack` for tuples
    up to and including 62 elements - the GHC imposed maximum. Note that this
    greatly increases compile times for `clash-prelude`.
  default: False
  manual: True

flag super-strict
  description:
    Use `deepseqX` (instead of `seqX`) in register-like constructs. This can
    help to eliminate space leaks when using lazy data structures in
    registers-like constructs. This potentially slows down Clash hardware
    simulation.
  default: False
  manual: True

flag strict-mapSignal
  description:
    Use `seqX` in 'mapSignal#'. This can help to eliminate space leaks in long
    running simulations.
  default: False
  manual: True

flag multiple-hidden
  description:
    Allow multiple hidden clocks, resets, and enables to be used. This is an
    experimental feature, possibly triggering confusing error messages. By
    default, it is enabled on development versions of Clash and disabled on
    releases.
  default: False
  manual: True

flag doctests
  description:
    You can disable testing with doctests using `-f-doctests`.
  default: False
  manual: True

flag unittests
  description:
    You can disable testing with unittests using `-f-unittests`.
  default: True
  manual: True

flag benchmarks
  description:
    You can disable testing with benchmarks using `-f-benchmarks`.
  default: True
  manual: True

flag workaround-ghc-mmap-crash
  description:
    Only use this flag when hit by GHC bug #19421. See clash-compiler PR #2444.
  default: False
  manual: True

common common-options
  default-language:   Haskell2010
  default-extensions: BangPatterns
                      BinaryLiterals
                      DataKinds
                      DefaultSignatures
                      DeriveDataTypeable
                      DeriveFoldable
                      DeriveFunctor
                      DeriveGeneric
                      DeriveLift
                      DeriveTraversable
                      DerivingStrategies
                      InstanceSigs
                      KindSignatures
                      MagicHash
                      NoStarIsType
                      PostfixOperators
                      ScopedTypeVariables
                      StandaloneDeriving
                      TupleSections
                      TypeApplications
                      TypeOperators
                      ViewPatterns

Library
  import:             common-options
  HS-Source-Dirs:     src

  ghc-options:        -Wall -Wcompat -fexpose-all-unfoldings -fno-worker-wrapper
  CPP-Options:        -DCABAL

  -- See https://github.com/clash-lang/clash-compiler/pull/2511
  if impl(ghc >= 9.4)
    CPP-Options: -DCLASH_OPAQUE=OPAQUE
  else
    CPP-Options: -DCLASH_OPAQUE=NOINLINE

  if flag(large-tuples)
    CPP-Options: -DLARGE_TUPLES

  if flag(super-strict)
    CPP-Options: -DCLASH_SUPER_STRICT

  if flag(strict-mapSignal)
    CPP-Options: -DCLASH_STRICT_MAPSIGNAL

  if flag(multiple-hidden)
    CPP-Options: -DCLASH_MULTIPLE_HIDDEN

  if flag(multiple-hidden)
    Exposed-modules:  Clash.Prelude.Synchronizer

  Autogen-Modules:    Paths_clash_prelude

  Exposed-modules:    Clash.Annotations.TopEntity
                      Clash.Annotations.Primitive
                      Clash.Annotations.BitRepresentation
                      Clash.Annotations.BitRepresentation.Deriving
                      Clash.Annotations.BitRepresentation.Internal
                      Clash.Annotations.BitRepresentation.Util
                      Clash.Annotations.SynthesisAttributes
                      Clash.Annotations.TH

                      Clash.Class.AutoReg
                      Clash.Class.AutoReg.Internal
                      Clash.Class.BitPack
                      Clash.Class.BitPack.BitIndex
                      Clash.Class.BitPack.BitReduction
                      Clash.Class.BitPack.Internal
                      Clash.Class.BitPack.Internal.TH
                      Clash.Class.Counter
                      Clash.Class.Counter.Internal
                      Clash.Class.Counter.TH
                      Clash.Class.Exp
                      Clash.Class.HasDomain
                      Clash.Class.HasDomain.HasSingleDomain
                      Clash.Class.HasDomain.HasSpecificDomain
                      Clash.Class.HasDomain.CodeGen
                      Clash.Class.HasDomain.Common
                      Clash.Class.Num
                      Clash.Class.Parity
                      Clash.Class.Resize

                      Clash.Clocks

                      Clash.Explicit.BlockRam
                      Clash.Explicit.BlockRam.Blob
                      Clash.Explicit.BlockRam.File
                      Clash.Explicit.BlockRam.Internal
                      Clash.Explicit.BlockRam.Model
                      Clash.Explicit.DDR
                      Clash.Explicit.Mealy
                      Clash.Explicit.Moore
                      Clash.Explicit.RAM
                      Clash.Explicit.ROM
                      Clash.Explicit.ROM.Blob
                      Clash.Explicit.ROM.File
                      Clash.Explicit.Prelude
                      Clash.Explicit.Prelude.Safe
                      Clash.Explicit.Reset
                      Clash.Explicit.SimIO
                      Clash.Explicit.Signal
                      Clash.Explicit.Signal.Delayed
                      Clash.Explicit.Synchronizer
                      Clash.Explicit.Testbench
                      Clash.Explicit.Verification

                      Clash.HaskellPrelude

                      Clash.Hidden

                      Clash.Intel.ClockGen
                      Clash.Intel.DDR

                      Clash.Magic

                      Clash.Num.Erroring
                      Clash.Num.Overflowing
                      Clash.Num.Saturating
                      Clash.Num.Wrapping
                      Clash.Num.Zeroing

                      Clash.NamedTypes

                      Clash.Prelude
                      Clash.Prelude.BlockRam
                      Clash.Prelude.BlockRam.Blob
                      Clash.Prelude.BlockRam.File
                      Clash.Prelude.DataFlow
                      Clash.Prelude.Mealy
                      Clash.Prelude.Moore
                      Clash.Prelude.RAM
                      Clash.Prelude.ROM
                      Clash.Prelude.ROM.Blob
                      Clash.Prelude.ROM.File
                      Clash.Prelude.Safe
                      Clash.Prelude.Testbench

                      Clash.Promoted.Nat
                      Clash.Promoted.Nat.Literals
                      Clash.Promoted.Nat.TH
                      Clash.Promoted.Nat.Unsafe
                      Clash.Promoted.Symbol

                      Clash.Signal
                      Clash.Signal.Bundle
                      Clash.Signal.BiSignal
                      Clash.Signal.Delayed
                      Clash.Signal.Delayed.Internal
                      Clash.Signal.Delayed.Bundle
                      Clash.Signal.Internal
                      Clash.Signal.Internal.Ambiguous
                      Clash.Signal.Trace

                      Clash.Sized.BitVector
                      Clash.Sized.Fixed
                      Clash.Sized.Index
                      Clash.Sized.RTree
                      Clash.Sized.Signed
                      Clash.Sized.Unsigned
                      Clash.Sized.Vector

                      Clash.Sized.Internal.BitVector
                      Clash.Sized.Internal.Index
                      Clash.Sized.Internal.Mod
                      Clash.Sized.Internal.Signed
                      Clash.Sized.Internal.Unsigned

                      Clash.Verification
                      Clash.Verification.DSL
                      Clash.Verification.Internal

                      Clash.XException
                      Clash.XException.Internal
                      Clash.XException.MaybeX
                      Clash.XException.TH

                      Clash.Xilinx.ClockGen
                      Clash.Xilinx.DDR

                      Clash.Tutorial
                      Clash.Examples
                      Clash.Examples.Internal

  other-modules:
                      Clash.Class.AutoReg.Instances
                      Clash.Clocks.Internal
                      Clash.CPP
                      Clash.Signal.Bundle.Internal
                      Language.Haskell.TH.Compat
                      Paths_clash_prelude

  other-extensions:   CPP
                      ConstraintKinds
                      FlexibleContexts
                      FlexibleInstances
                      GADTs
                      GeneralizedNewtypeDeriving
                      MultiParamTypeClasses
                      PatternSynonyms
                      RankNTypes
                      TemplateHaskell
                      TypeFamilies
                      UndecidableInstances

  Build-depends:      array                     >= 0.5.1.0 && < 0.6,
                      arrows                    >= 0.4     && < 0.5,
                      base                      >= 4.11    && < 5,
                      binary                    >= 0.8.5   && < 0.11,
                      bytestring                >= 0.10.8  && < 0.13,
                      constraints               >= 0.9     && < 1.0,
                      containers                >= 0.4.0   && < 0.7,
                      data-binary-ieee754       >= 0.4.4   && < 0.6,
                      data-default-class        >= 0.1.2   && < 0.2,
                      deepseq                   >= 1.4.1.0 && < 1.6,
                      extra                     >= 1.6.17  && < 1.8,
                      ghc-prim                  >= 0.5.1.0 && < 0.12,
                      ghc-typelits-extra        >= 0.4     && < 0.5,
                      ghc-typelits-knownnat     >= 0.7.2   && < 0.8,
                      ghc-typelits-natnormalise >= 0.7.2   && < 0.8,
                      hashable                  >= 1.2.1.0  && < 1.5,
                      half                      >= 0.2.2.3 && < 1.0,
                      infinite-list           ^>= 0.1,
                      lens                      >= 4.10    && < 5.3,
                      QuickCheck                >= 2.7     && < 2.15,
                      recursion-schemes         >= 5.1     && < 5.3,
                      reflection                >= 2       && < 2.2,
                      singletons                >= 2.0     && < 3.1,
                      string-interpolate        ^>= 0.3,
                      template-haskell          >= 2.12.0.0 && < 2.22,
                      th-abstraction            >= 0.2.10 && < 0.7.0,
                      th-lift                   >= 0.7.0    && < 0.9,
                      th-orphans                >= 0.13.1   && < 1.0,
                      text                      >= 0.11.3.1 && < 2.2,
                      time                      >= 1.8     && < 1.14,
                      transformers              >= 0.5.2.0 && < 0.7,
                      type-errors               >= 0.2.0.0 && < 0.3,
                      uniplate                  >= 1.6.12  && < 1.7,
                      vector                    >= 0.11    && < 1.0,
                      mtl                       >= 2.0     && < 3.0

  if impl(ghc >= 9.0.0)
    Build-Depends:    ghc-bignum                >= 1.0      && < 1.4
  else
    Build-Depends:    integer-gmp               >= 1.0.1.0  && < 2.0
  if flag(large-tuples)
    Build-Depends:    ghc

test-suite doctests
  type:             exitcode-stdio-1.0
  default-language: Haskell2010
  main-is:          doctests.hs
  ghc-options:      -Wall -Wcompat -threaded
  hs-source-dirs:   tests

  if !flag(doctests)
    buildable: False
  else
    build-depends:
      base,
      clash-prelude,
      doctest-parallel >= 0.2 && < 0.4,
      filepath

  if flag(workaround-ghc-mmap-crash)
    ghc-options:    -with-rtsopts=-xm20000000


test-suite unittests
  import:           common-options
  type:             exitcode-stdio-1.0
  main-is:          unittests.hs
  ghc-options:      -Wall -Wcompat -threaded
  -- Note that multiple -with-rtsopts are not cumulative
  if flag(workaround-ghc-mmap-crash)
    ghc-options:    "-with-rtsopts=-N -xm20000000"

  hs-source-dirs:   tests

  if !flag(unittests)
    buildable: False
  else
    build-depends:
      clash-prelude,

      ghc-typelits-knownnat,
      ghc-typelits-natnormalise,
      ghc-typelits-extra,

      base,
      bytestring,
      deepseq,
      hedgehog      >= 1.0.3    && < 1.5,
      hint          >= 0.7      && < 0.10,
      quickcheck-classes-base >= 0.6 && < 1.0,
      tasty         >= 1.2      && < 1.6,
      tasty-hedgehog >= 1.2.0,
      tasty-hunit,
      tasty-th,
      tasty-quickcheck,
      template-haskell

  Other-Modules:
                 Clash.Tests.AsyncFIFOSynchronizer
                 Clash.Tests.AutoReg
                 Clash.Tests.BitPack
                 Clash.Tests.BitVector
                 Clash.Tests.BlockRam
                 Clash.Tests.BlockRam.Blob
                 Clash.Tests.Clocks
                 Clash.Tests.Counter
                 Clash.Tests.DerivingDataRepr
                 Clash.Tests.DerivingDataReprTypes
                 Clash.Tests.Fixed
                 Clash.Tests.FixedExhaustive
                 Clash.Tests.MaybeX
                 Clash.Tests.NFDataX
                 Clash.Tests.NumNewtypes
                 Clash.Tests.Ram
                 Clash.Tests.Reset
                 Clash.Tests.Resize
                 Clash.Tests.Signal
                 Clash.Tests.Signed
                 Clash.Tests.SizedNum
                 Clash.Tests.TopEntityGeneration
                 Clash.Tests.Unsigned
                 Clash.Tests.Vector
                 Clash.Tests.XException

                 Clash.Tests.Laws.Enum
                 Clash.Tests.Laws.SaturatingNum

                 Hedgehog.Extra

                 Test.Tasty.HUnit.Extra
                 Test.Tasty.Hedgehog.Extra
                 Test.QuickCheck.Extra

benchmark benchmark-clash-prelude
  type:             exitcode-stdio-1.0
  default-language: Haskell2010
  main-is:          benchmark-main.hs
  ghc-options:      -O2 -Wall
  hs-source-dirs:   benchmarks

  ghc-options:      -with-rtsopts=-T

  if !flag(benchmarks)
    buildable: False
  else
    build-depends:
      base,
      clash-prelude,
      criterion         >= 1.3.0.0 && < 1.7,
      directory,
      deepseq,
      template-haskell

  Other-Modules:    BenchBitVector
                    BenchCommon
                    BenchFixed
                    BenchRAM
                    BenchSigned
                    BenchUnsigned
                    BenchVector