Emily Schmidt
8f77494263
silence some warnings
2024-08-21 11:04:11 +01:00
Emily Schmidt
fbee31080e
add optional header and hashlib implementation for optional
2024-08-21 11:04:11 +01:00
Emily Schmidt
850b3a6c29
convert class FunctionalIR to a namespace Functional, rename functionalir.h to functional.h, rename functional.h to compute_graph.h
2024-08-21 11:04:08 +01:00
Emily Schmidt
8c0f625c3a
functional backend: topological sort starts with the output and next states nodes, other nodes get deleted
2024-08-21 11:03:29 +01:00
Emily Schmidt
7ac0e92d35
functional backend: rename get_input and get_current_state to input and current_state (more consistent with other methods)
2024-08-21 11:03:29 +01:00
Emily Schmidt
99effb6789
add support for initializing registers and memories to the functional backend
2024-08-21 11:03:29 +01:00
Emily Schmidt
12a31a4418
add MemContents class to mem.h
2024-08-21 11:03:29 +01:00
Emily Schmidt
6d329e142d
functional backend: error out if multiply driven or undriven signals are seen, dont bother putting them in functionalir
2024-08-21 11:03:29 +01:00
Emily Schmidt
145af6f10d
fix memory handling in functional backend, add more error messages and comments for memory edgecases
2024-08-21 11:03:29 +01:00
Emily Schmidt
4722f13a5d
functional backend: reduce $lcu to $alu
2024-08-21 11:03:29 +01:00
Emily Schmidt
3cd5f4ed83
add support for RTLIL cells with multiple outputs to the functional backend, implement $fa,$lcu,$alu
2024-08-21 11:03:29 +01:00
Emily Schmidt
13bacc5c8f
eliminate pmux in functional backend
2024-08-21 11:03:29 +01:00
Emily Schmidt
c0c90c2c31
functional backend: require shift width == clog2(operand width)
2024-08-21 11:03:29 +01:00
Emily Schmidt
7f8f21b980
remove widths parameters from FunctionalIR factory methods and from functionalir.cc
2024-08-21 11:03:29 +01:00
Emily Schmidt
55c2c17853
document functionalir.h and change visitors to derive from AbstractVisitor. remove extraneous widths arguments from visitors.
2024-08-21 11:03:29 +01:00
Emily Schmidt
6922633b0b
fix a few bugs in the functional backend and refactor the testing
2024-08-21 11:03:29 +01:00
Emily Schmidt
9ad859fc0a
add bwmux, bweqx, bmux, demux cells
2024-08-21 11:03:29 +01:00
Emily Schmidt
00a65754bb
factor out SExpr/SExprWriter classes out of smtlib backend, and also tidy them up/document them
2024-08-21 11:03:27 +01:00
Emily Schmidt
9f660b1e4b
rewrite smtlib pass to use SExpr class
2024-08-21 11:02:31 +01:00
Roland Coeurjoly
566e57d24f
Support $lut cells. Both C++ and SMT tests pass
2024-08-21 11:02:31 +01:00
Emily Schmidt
1b2986f7fb
add support for $mul, $div, $divfloor, $mod, $modfloor, $pow in functional backend
2024-08-21 11:02:31 +01:00
Emily Schmidt
9700df50d6
add generic writer class with formatting function to FunctionalTools
2024-08-21 11:02:31 +01:00
Emily Schmidt
eb2bb8c45b
tidy up generic functional backend, add generic scope class, tidy up c++ functional backend
2024-08-21 11:02:31 +01:00
Emily Schmidt
6f9e21219b
add new generic compute graph and rewrite c++ functional backend to use it
2024-08-21 11:02:29 +01:00
Emily Schmidt
248d5f72d4
add support for std::variant to hashlib
2024-08-21 11:01:09 +01:00
Emily Schmidt
dbf2bc3b1d
need unsigned comparison when checking shift widths for overflow in functional backend
2024-08-21 11:01:09 +01:00
Emily Schmidt
7b29d177ac
add support for memories to c++ and smtlib functional backends
2024-08-21 11:01:09 +01:00
Emily Schmidt
7611dda2eb
add initial version of functional smtlib backend
2024-08-21 11:01:09 +01:00
Emily Schmidt
63dea89fac
add initial version of functional C++ backend
2024-08-21 11:01:09 +01:00
Emily Schmidt
dd5ec84a26
fix bugs in drivertools
2024-08-21 11:01:09 +01:00
Jannis Harder
d90268f610
fixup! drivertools: Utility code for indexing and traversing signal drivers
2024-08-21 11:01:09 +01:00
Jannis Harder
d4e3daa9d0
ComputeGraph datatype for the upcoming functional backend
2024-08-21 11:01:09 +01:00
Jannis Harder
f29422f745
topo_scc: Add sources_first option
2024-08-21 11:01:09 +01:00
Jannis Harder
56572978f5
drivertools: Utility code for indexing and traversing signal drivers
...
It adds `DriveBit`, `DriveChunk` and `DriveSpec` types which are similar
to `SigBit`, `SigChunk` and `SigSpec` but can also directly represent
cell ports, undriven bits and multiple drivers. For indexing an RTLIL
module and for querying signal drivers it comes with a `DriverMap` type
which is somewhat similar to a `SigMap` but is guaranteed to produce
signal drivers as returned representatives.
A `DriverMap` can also optionally preserve connections via intermediate
wires (e.g. querying the driver of a cell input port will return a
connected intermediate wire, querying the driver of that wire will
return the cell output port that's driving the wire).
2024-08-21 11:00:21 +01:00
Jannis Harder
f24e2536c6
kernel/rtlil: Add `SigBit operator[](int offset)` to `SigChunk`
...
This is already supported by `SigSpec` and since both `SigChunk` and
`SigSpec` implement `extract` which is the multi-bit variant of this,
there is no good reason for `SigChunk` to not support
`SigBit operator[](int offset)`.
2024-08-21 10:58:39 +01:00
Jannis Harder
c73c8a39cf
kernel/log: Add log_str helper for custom log_* functions/overloads
...
When implementing custom log_... functions or custom overloads for the
core log functions like log_signal it is necessary to return `char *`
that are valid long enough.
The log_... functions implemented in log.cc use either `log_id_cache` or
`string_buf` which both are cleared on log_pop.
This commit adds a public `log_str` function which stores its argument
in the `log_id_cache` and returns the stored copy, such that custom
log functions outside of log.cc can also create strings that remain
valid until the next `log_pop`.
2024-08-21 10:58:39 +01:00
Jannis Harder
0922142567
Add generic topological sort and SCC detection
...
This adds a generic non-recursive implementation of Tarjan's linear time
SCC algorithm that produces components in topological order. It can be
instantiated to work directly on any graph representation for which the
enumerate_nodes and enumerate_successors interface can be implemented.
2024-08-21 10:58:39 +01:00
Emil J
92cac63845
Merge pull request #4344 from widlarizer/emil/keep_hierarchy
...
cost: add keep_hierarchy pass with min_cost argument
2024-07-29 16:33:08 +02:00
Emil J
051d83205d
Merge pull request #4471 from georgerennie/hashlib_primes
...
hashlib: Add some more primes
2024-07-29 15:10:22 +02:00
Emil J. Tywoniak
4b29f64142
cost: add model for techmapped cell count, keep_hierarchy pass with -min_cost parameter
2024-07-29 10:26:02 +02:00
Emil J
49eaa108a5
Merge pull request #4425 from YosysHQ/emil/doc-sigmap
...
sigmap: comments
2024-07-29 10:18:44 +02:00
Roland Coeurjoly
ce11ddbf21
Simplified run_frontend by using a lambda function for file extension checks and combining blif and eblif into a single condition.
2024-07-23 17:55:04 +02:00
Roland Coeurjoly
8c1431f373
Guess VHDL frontend for both *.vhd and *vhdl files
2024-07-23 17:01:57 +02:00
Emil J. Tywoniak
583db7b15e
sigmap: comments
2024-07-18 16:02:11 +02:00
Alexander von Gluck
2f514487cb
haiku: Basic fixes to build under Haiku
2024-07-15 12:57:34 +02:00
George Rennie
339d4e8932
hashlib: Correct prime sequence
2024-07-02 08:10:18 +01:00
George Rennie
78ae4ed9ac
hashlib: Add some more primes
...
* Add some primes as suggested in #4458 . This allows larger hashtables
to be allocated for very big designs
2024-07-01 12:37:41 +01:00
Martin Povišer
07daf61ae6
Merge pull request #4467 from povik/fix-add-shiftx
...
rtlil: Fix `addShiftx` for signed shifts
2024-06-26 18:17:28 +02:00
Martin Povišer
89d939334e
rtlil: Fix `addShiftx` for signed shifts
...
Only the `B` input (the shift amount) can be marked as signed on a
`$shiftx` cell. Adapt the helper accordingly and prevent it from
creating invalid RTLIL when called with `is_signed` set. Previously
it would mark both `A` and `B` as signed.
2024-06-21 15:14:08 +02:00
Miodrag Milanovic
141a2e3638
Make C++17 compiler required
2024-06-17 16:55:36 +02:00