All notable changes to this project will be documented in this file. Only releases published to PyPI are tracked here. No release candidates!
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
GateGraphis an alternative PyRTL logic representation, designed to simplify analysis.
- Rewrote
output_to_verilogandoutput_verilog_testbench. The new implementation's output should be much easier to read:- Single-use expressions are inlined.
- Try mangling unusable
WireVectorandMemBlocknames first, before assigning them entirely new names. - Add comments to the generated Verilog that show the un-mangled names.
- Many documentation improvements:
- Most methods and functions now have examples.
- Consistently use canonical top-level
pyrtl.*names, rather than module-level names (pyrtl.WireVector, notpyrtl.wire.WireVector). - Enabled
intersphinxfor clickable standard library references (list,dict, etc). - Set up
doctestfor examples, to verify that documentation examples still work.
- Switched from
pylintandpycodestyletoruff:- Applied many
rufffixes. - Reformatted the code with
ruff format. - Updated
toxto runruff checkandruff format.
- Applied many
- Removed remaining Python 2 support.
- Fixed XOR implementation in
and_inverter_synthpass (@EdwinChang24) output_verilog_testbenchshould not re-initialize RomBlocks.FastSimulationwas not settinginit_memvaluecorrectly (renamed toSimulationTrace.memory_value_map).- Specify bitwidths for Verilog initial register and memory values. They were previously unsized constants, which are implicitly 32-bit signed, which could cause surprises.
- An optimization pass to optimize inverter chains (@gaborszita)
one_hot_to_binaryencoder (documentation) (@vaaniarora)binary_to_one_hotdecoder (documentation) (@vaaniarora)
- More support for signed integers: Signed integers can now be used in
RomBlock'sromdata,Simulation'smem_value_map- And Verilog-style register reset values (@PrajwalVandana)
- Improved documentation:
- Use iteration instead of recursion to avoid stack overflow in
find_producer(@gaborszita)
- Added an
initialize_registersoption tooutput_to_verilog(documentation)
- Improved handling of signed integers.
- Fixed a
wire_matrixbug involving single-element matrices ofInputsorRegisters.
- Named
WireVectorslices withwire_structandwire_matrix. See documentation:
- Major changes to
render_tracevisualization. See examples and documentation - Many documentation and release process improvements.
- Python 3.11 compatibility.
- Python 2.7 support.