All notable changes to this project will be documented in this file.
4.4.1 - 2024-07-29 14:21:42+02:00 (urgency: medium)
- fixed
hal_py.GateLibrary.gate_types
pybind - fixed
hal_py.NetlistFactory.load_netlist
pybind
4.4.0 - 2024-07-19 15:55:24+02:00 (urgency: medium)
- WARNING: this release breaks the API of the
boolean_influence
andbitorder_propagation
plugin - WARNING: this release contains many new unstable plugin APIs that will likely change in the future
- plugins
- updated
boolean_influence
plugin- changed API so that no instance of the plugin needs to be created anymore to apply its algorithms
- file structure and namespace clean up
- added
resynthesis
plugin- moved
decompose_gate
anddecompose_gates_of_type
fromnetlist_preprocessing
plugin and slightly changed their API - added functions for logic re-synthesis that write out parts of the current netlist and call Yosys as an open-source synthesizer to produce a new gate-level netlist based on a user-defined gate library
- moved
- changed
bitorder_propagation
plugin- changed API so that no instance of the plugin needs to be created anymore to apply its algorithms
- changed propagation logic for better results
- updated
z3_utils
plugin- general code and file structure clean up as well as more documentation
- added comprehensive simplification logic that is able to simplify
z3::expr
using an extended rule set as the simplification ofhal::BooleanFunction
- added
module_identification
plugin- allows a user to automatically search for arithmetic structures in the netlist
- added
sequential_symbolic_execution
plugin- allows the user to perform symbolic execution over mulitple cycles including sequential elements
- added first rudimentary version of
genlib_writer
that allows to write the combinational gates of a gate library in genlib format which is required for resynthesis.
- updated
- core
- decorators
- added
NetlistModificationDecorator::add_vcc/gnd_nets()
to create ground and power nets for netlists that do not have a ground/power net already
- added
- added
SMT::Solver::query_local()
variant that directly takes an SMT representation of a Solver query - added
Netlist::get_gnd/vcc_nets()
to get all global ground and power nets
- decorators
- deps
- added
json.hpp
from nlohmann to deps to offer a light weight json api - adapted cmake to consider the correct flags when finding and linking against the new version of Bitwuzla
- added
- miscellaneous
- added logic evaluator plugin
- added backward compatibility for view management
- slightly improved symbolic execution engine
- added a version of
netlist_factory::load_netlist
that takes a path to a netlist file as well as a pointer to a gate library - added
use_net_variables
parameter toGate::get_resolved_boolean_function
to choose whether to use input pins or nets as variable names - added
utils::get_unique_temp_directory
- added
base
parameter toutils::wrapped_stoull
andutils::wrapped_stoul
- added
all_global_io
parameter toSubgraphNetlistDecorator::copy_subgraph_netlist
to configure labeling of global inputs and outputs - added datatype
ExistingFile
to plugin parameter - added helper gate libraries needed for resynthesis; this is a dirty hack, expect more changes later
- changed MUX data input and output pins in all gate libraries to
PinType::data
- bugfixes
- fixed incompatibility between shipped zlib and QuaZip libraries
- fixed a bug when checking whether one Boolean function is just a negated version of another one during symbolic execution
- fixed bugs related to the Boolean function SLICE operation
- fixed VCD writer of
netlist_simulation_controller
plugin - fixed handling of const
0
and1
nets inverilog_parser
,vhdl_parser
, andverilog_writer
plugins - fixed layout bug which occured when leftmost node had no inputs
- fixed missing sort indicator when sorting entries in
Views
widget - fixed bug loading simulation data by cleaning map before loading controller from project
- fixed bug that occured when trying to generate the Boolean influence for a constant Boolean function
4.3.0 - 2024-07-02 13:42:55+02:00 (urgency: medium)
- WARNING: this release breaks compatibility with Ubuntu 20.04 LTS
- WARNING: this release breaks the API of the
graph_algorithm
,dataflow
, andxilinx_toolbox
plugins - GUI
- refactored module widget
- added option to show gate content for each module
- added option to show interior nets for each module
- added
Isolate in new view
feature for nets - added button to expand or collapse all tree items
- added delete module action and shortcut
- added entries for context menu
- adapted appearance for menu content tree, selection details tree, grouping content tree (same model for all)
- refactored view widget
- changed appearance from tabular view to tree view
- added 'directory' elements to organize and manage groups of views
- added drag'n drop feature allowing to relocate views or directories to another branch in the tree
- added column for view ID
- added functions to Python GUI API to create, modify and delete views and directories
- added UNDO functionality for create/delete view and directory actions
- fixed sort-by-column feature. The tree is not sorted at program start thus showing elements in 'natural' order.
- refactored search bar
- changed appearance of search bar to be more intuitive
- added menu for extended options - e.g. option to search in selected columns only
- added search history
- added filter proxy class for trees and tables increasing the search performance
- refactored layouter module
- switched to multithreaded algorithm
- boosted performance by using classes with faster memory access
- removed layouter code used prior to version 3.1.0 - thus removing the setting option to use that code
- added setting option to dump junction layout input data for experts to debug in case of layout errors
- refactored module widget
- plugins
- added
hawkeye
plugin for the detection of symmetric cryptographic implementations in gate-level netlists- see publication
HAWKEYE - Recovering Symmetric Cryptography From Hardware Circuits
at CRYPTO'24 for details
- see publication
- changed
graph_algorithm
plugin- updated the igraph dependency shipped with HAL
- graph corresponding to a netlist is now encapsulated within an
NetlistGraph
object that allows easy interaction with the graph - added new functions for computing neighborhoods, shortest paths, subgraphs, and (strongly) connected components
- changed the API to facilitate for the aforementioned changes and made everything accessible via Python
- changed
dataflow_analysis
plugin- can now operate on arbitrary, user-defined gate types, not only FFs
- user can now specify the pin types to be considered as control pins
- can now take known registers and other known word-level structures into account during analysis
- changed the API to facilitate for the aforementioned changes
- changed
netlist_simulator_controller
plugin- added feature to VCD parser: removal of leading backslash and trailing whitespace from waveform name
- added converter for net names which don't qualify as C++ variable name
- extended maximum line with the CSV parser can handle
- changed warning messages for waveform parsing and made them more specific
- changed policy toward 'dangling' wires, they are no longer ignored but considered as global inputs or outputs
- changed
waveform_viewer
plugin- added GUI wizard to structure input steps when launching a new simulation
- added table widget to enter engine parameter
- added table widget to enter simulation input data
- added viewer to show output of simulation process while running
- added algorithm to identify simulated pin groups and bundle apropriate waveform to groups
- changed
xilinx_toolbox
plugin- added
split_shift_registers
function to splitSRL16E
gates into multiple flip-flops - changed Python bindings for better usability
- added
- added
- core
- pin (groups)
- added optional flag to determine whether a pin group has an inherent order (defaults to
false
) - added
GateType::delete_pin_group
andGateType::assign_pin_to_group
to enable more operations on pin groups of gate pins - added parameter
force_name
to enforce pin (group) renaming toModule::set_pin_name
,Module::set_pin_group_name
,Module::create_pin
, andModule::create_pin_group
- added pin types
status
,error
,error_detection
,done
, andcontrol
- added qualifier for module
pin_changed
core events telling receiver details about the recent modification - added event scope and stacking classes so that module
pin_changed
events can be collected and prioritized - added specific GUI handler for every module
pin_changed
event thus replacing the reload-entire-pingroup-tree policy - added class
ActionPingroup
so that UNDO function works for all pin / pin group actions issued from GUI
- added optional flag to determine whether a pin group has an inherent order (defaults to
- decorators
- added
NetlistTraversalDecorator
to ease exploration of a netlist- added
get_next_matching_gates
to get successor/predecessor gates matching a certain condition - added
get_next_matching_gates_until
to get successor/predecessor gates until a certain condition is fulfilled - added
get_next_matching_gates_until_depth
to get successor/predecessor gates up to a certain depth - added
get_next_sequential_gates
andget_next_sequential_gates_map
to get the next layer of sequential successors/predecessors - added
get_next_combinational_gates
to get all combinational gates until the next non-combinational gates are reached
- added
- added
- pin (groups)
- miscellaneous
- added support for Ubuntu 24.04 LTS
- added INIT field declaration to FF-gate-types in example library
- added drag'n drop feature allowing to move several nodes in graph view at same time
- added GUI PluginParameter type
ComboBox
for parameters that can be requested from plugin - added GUI PluginParameter types
Module
andGated
for parameters that can be requested from plugin - added
Show content
button toGroupings
widget to show content of grouping as a list - added flag which Python editor tab is active when serializing project
- added extended gate library picker when importing a netlist
- added keyboard shortcut for delete-item action from toolbar
- added gate type properties
fifo
andshift_register
- added optional filter to
Net::get_num_of_sources
andNet::get_num_of_destinations
- added function
unify_ff_outputs
to netlist preprocessing plugin - added function
replace_gate_type
to gate library - changed supported input file formats for import from hard coded list to list provided by loadable parser plugins
- changed behavior of import netlist dialog, suggest only non-existing directory names and loop until an acceptable name was entered
- changed appearance and behavior of import project dialog, make sure existing hal projects don't get overwritten
- changed installation script policy to install Python packages (omit 'pip install' which would need virtual environment)
- removed hard coded path names from CI MacOS workflow script
- deprecated many functions in
netlist_utils
as they have been moved somewhere else
- bugfixes
- fixed saleae input data reader which gets linked into external Verilator simulation code
- fixed waveform viewer: opening old results will no longer generate the same view twice
- fixed waveform viewer: opening old results will by now also update waveform time axis
- fixed colors in Python Console when switching between color schemes
- fixed pybind of
Module::get_gates
- fixed Python script execution abort button disappearing when switching tabs
- fixed Python interpreter crash due to release of GIL semaphore before cleanup is done
- fixed segfault when deleting a module for which an exclusive view exists
- fixed not loading all plugins if the GUI is not in control
- fixed Verilog writer not being a dependency of Verilator plugin
- fixed order of pins within pin groups not being properly handled for modules and gate types
- fixed netlist parsers assigning gate pins in wrong order (compensated by the bug above, imported netlists were still correct)
- fixed wrong order of pins within pin groups in provided gate libraries
- fixed format string handling of enums in log outputs
- fixed restoring user assigned module colors from project file
- fixed no scrollbar shown in
Data
tab ofSelection Details
widget - fixed declaration of FF-gate type in example gate library
- fixed error which could cause crashes in do-not-render-layout-until-complex-operation-finished algorithm
- fixed wrong placements of nodes in view by XML-macro (might even crash)
- fixed problems in GUI plugin management caused by addressing plugins by absolute path
- fixed several bugs related to moving node boxes in GUI by drag'n'drop
- fixed several bugs in automated tests, eliminate cases which produce non-deterministic results
4.2.0 - 2023-05-24 10:02:04-07:00 (urgency: medium)
- GUI plugin manager
- WARNING: modified plugin core API - reduced number of base classes and instead added extension components
- added overview of loaded plugins and their features
- added interactive buttons to load and unload plugins
- added feature to load plugin automatically if needed for file parsing
- prevent unloading of plugin if it is needed as a dependency of another plugin
- changed plugin load policy to have only mandatory or user required plugins loaded at startup
- Boolean functions
- added
BooleanFunction::substitute(const std::map<std::string, std::string>&)
to substitute multiple variable names at once - changed
BooleanFunction::get_constant_value
to returnstd::vector<BooleanFunction::Value>
, thereby removing the 64-bit limit - added
BooleanFunction::Node::get_constant_value
,BooleanFunction::Node::get_index_value
, andBooleanFunction::Node::get_variable_name
- added
BooleanFunction::get_constant_value_u64
andBooleanFunction::Node::get_constant_value_u64
to retrieve the constant value asu64
if it comprises less than 64-bit - added
BooleanFunction::has_constant_value(const std::vector<BooleanFunction::Value>&)
andBooleanFunction::Node::has_constant_value(const std::vector<BooleanFunction::Value>&)
- added
BooleanFunction::algebraic_printer
as an alternative printer forBooleanFunction::to_string
to print a Boolean function in algebraic form - added shift and rotate operators
Shl
,Lshr
,Ashr
,Rol
, andRor
- added
- plugins
boolean_influence
- added deterministic variants of all Boolean influence functions that shall be used for Boolean functions with only few input variables
- added additional parameters for more control to the subcircuit and gate variants of
get_boolean_influence
netlist_preprocessing
- added
decompose_gates_of_type
anddecompose_gate
that decompose combinational logic gates into basic gate types - added
parse_def_file
to parse a Design Exchange Format file that contains placement information simplify_lut_inits
now annotates the original init string into the data container
- added
verilog_parser
- added annotation of all net names that where merged during parsing in the data container
- added implicit wire declarations for assign statements
- changed the behavior of the parser when flattening a netlist and generating new unique names (instead of appending an index we now add a prefix containing the names of parent modules)
z3_utils
- added
compare_netlists
function that functionally compares two netlists that only differ in their combinational logic - removed class
z3Wrapper
- renamed
to_z3
tofrom_bf
and added support for missing node types - renamed
to_hal
toto_bf
and added support for missing node types - changed
to_cpp
to output only the C++ code implementing the Boolean function and nothing more
- added
dataflow_analysis
- added API to interact with dataflow analysis results from C++ and Python
- added automatic creation of pin groups for data and control pins of register modules
- added parameter to only write or retrieve information on certain register groups
- deprecated
plugin_dataflow::execute
as its functionality is now split betweendataflow::analyze
and the members ofdataflow::Result
- removed file writes if not explicitly called by user
netlist_simulation_controller
- added versions of
add_waveform_group
taking a module pin group as input - added versions of
set_input
taking aWaveData
object, vectors of nets and values, aWaveDataGroup
and a vector of values, and a module pin group and a vector of values as input
- added versions of
solve_fsm
- changed both versions of fsm_solving to now not only consider data inputs of the state register, but also synchronous control signals.
xilinx_toolbox
- added the first version of the xilinx_toolbox plugin that provides functionality especially fitted to xilinx fpga netlists
- decorators
- added
NetlistModificationDecorator
- added
delete_modules
to delete all (or a filtered subset of) the modules in a netlist - moved
replace_gate
fromnetlist_utils
, now returns pointer to replacement gate - added
connect_gates
to connect two gates at the specified pins via a new or already existing net - added
connect_nets
to merge two nets into one, thereby connecting them
- added
BooleanFunctionDecorator
- added a version of
get_boolean_function_from
that takes a module pin group as input
- added a version of
- added
- selection details widget
- added
Focus item in graph view
to several context menus - added
Isolate in new view
to gate/module related context menus - changed
Isolate in new view
policy for modules: open exclusive module view if such a view already exists - improved drag&drop functionality to move module pins and merge module pin groups
- added
- miscellaneous
- added
Gate::get_modules
to recursively get all modules that contain the gate by traversing the module hierarchy - added
Net::is_a_source(const Gate*)
andNet::is_a_destination(const Gate*)
that check whether a gate is a source/destination independent of the gate pin - added
PinGroup<T>::contains_pin
to check whether a pin is part of the respective gate or module pin group - added overloaded version of
deserialize_netlist
that takes a gate library, thereby overruling the gate library path in the .hal file - added
utils::wrapped_stoull
andutils::wrapped_stoul
that wrap the standard string to integer conversion and usehal::Result<>
for error handlung instead of exceptions - added utility function
is_valid_enum
to check whether the string representation of an enum value is valid. - added serialization of physical gate positions (non-negative integer)
- added keyboard shortcuts for fold, unfold, and remove from view
- added
filter
parameter toget_fan_[in/out]_[nets/endpoints]
- added pyBinds for the
LogManager
class - added pyBinds for the
ProjectDirectory
class - added
Module::move_pin_group
to change the order of pin groups of a module - changed abort being more responsive when aborting layouting of large views
- changed and improved color scheme for light style
- changed labels on HAL startup screen to better resemble the new project structure
- removed toolbox from groupings widget
- added
- bugfixes
- fixed build from tarball
- fixed minor navigation bugs on settings page
- fixed missing Python bindings for
GatePinGroup
- fixed
SolveFsmPlugin
not properly replacing power and ground nets in Boolean functions - fixed searchbar attempting time consuming search when there is no content to search
- fixed some documentations of core functions
- fixed igraph not building anymore by relaxing irgaph compiler options
- fixed Python GUI API being unavailable at runtime
- fixed nets without source or destination not being shown when unfolding the module they belong to in the selection details widget
- fixed cmake failing to parse HAL version number from file
- fixed pins and pin groups not being hashable in Python
4.1.0 - 2023-03-08 16:57:06+01:00 (urgency: medium)
- selection details widget
- module icons reflect module color
- gate icons shape according to gate type
- user setting to adjust size of or omit icon in upper right corner
- project import/export
- added export feature: generate zipped project including external gate libraries and python source files
- added import feature by extracting zipped project
- added quazip library sources (deps) since recent distributions no longer link binary packages against qt5
- netlist parsers
- added (limited) support for 'defparam' statements to Verilog parser
- added support for pin assignments by order instead of name to Verilog and VHDL parser
- GUI comments
- user can add comments to gates and modules to take notes on the reverse engineering progress
- comments are shown in the graph view (as little notes on the gate/module boxes) and in the selection details widget
- plugin
netlist_preprocessing
- collection of utility functions preparing a raw netlist for further analysis
- remove LUT fan-in endpoints that do not show up in the LUT's boolean function via
remove_unused_lut_inputs
- remove buffer gates via
remove_buffers
, also dynamically by analyzing Boolean function and connected inputs - remove redundant gates via
remove_redundant_logic
, i.e., gates of equal type with identical inputs - remove unconnected gates/nets via
remove_unconnected_gates
andremove_unconnected_nets
- simplify LUT configuration strings based on constant inputs via
simplify_lut_inits
- plugin
bitorder_propagation
- propagate a known order of input/output pins within module pin groups to other connected modules
- decorators
BooleanFunctionDecorator
- substitute power and ground nets/pins by constant values in Boolean functions via
substitute_power_ground_nets
andsubstitute_power_ground_pins
- get a concatenated Boolean function corresponding to a vector of nets or Boolean functions via get_boolean_function_from`
- substitute power and ground nets/pins by constant values in Boolean functions via
BooleanFunctionNetDecorator
- get a unique Boolean function variable for a net via
get_boolean_variable
andget_boolean_variable_name
- get the net corresponding to a unique Boolean function variable via
get_net_from
- get the net ID corresponding to a unique Boolean function variable via
get_net_id_from
- get a unique Boolean function variable for a net via
SubgraphNetlistDecorator
- copy a subgraph of the netlist via
copy_subgraph_netlist
- get the Boolean function of a subgraph via
get_subgraph_function
- get the inputs to the Boolean function of a subgraph without computing the Boolean function via
get_subgraph_function_inputs
- copy a subgraph of the netlist via
- miscellaneous
- added functions
get_pin_names
,get_input_pins
,get_input_pin_names
,get_output_pins
, andget_output_pin_names
to classModule
- added function
BooleanFunction::get_truth_table_as_string
that returns the truth table of a Boolean function as a formatted string - added missing GND, VCC, and RAM gate types to the
ICE40ULTRA
gate library - added Python bindings for the HAL project manager
- added new GUI dialog for creating an empty project (without providing a netlist)
- changed all example netlists to be HAL projects
- API cleanup for plugin
solve_fsm
- added functions
- bugfixes
- fixed Verilog and VHDL parser ignoring pin order of modules
- fixed order of module pins in Verilog writer
- fixed some errors in the Python documentation
- fixed pin types of
power
andground
gate types in various gate libraries - fixed spamming the log with messages related to module pins
- fixed segfault that sometimes occurred when deleting a module
- fixed saving absolute paths for Python files and not copying them to the new project folder when using
Save as...
- fixed some project manager bugs related to inaccessible files
- fixed missing Python binding for
GateType::get_pin_groups
- fixed incorrect undo action for "fold parent module"
- fixed some internal data structure of the Verilog and VHDL parsers not being cleared after each instantiation attempt
- fixed wrong gate type properties for MUX gates in various gate libraries
- fixed net and instance aliasing in VHDL and Verilog parser
- fixed netlist parser bug related to unconnected module pins that are being directly assigned to another wire/signal in the module/entity body
- fixed
get_pins
returning pins in wrong order if no filter is specified
4.0.1 - 2022-10-24 15:33:15+02:00 (urgency: medium)
- WARNING: this release breaks multiple APIs, please make sure to adjust your code accordingly.
- project manager
- added keeping all data belonging to a netlist in a single project directory
- added import of Verilog and VHDL netlists as well as existing .hal files into new projects
- added referencing all project files with relative filenames so that project can be ported to different location (whenever possible)
- added CLI option
-p
to open existing project - changed CLI option
-i
import netlist to new project
- netlist simulation
- added interactive waveform viewer to the HAL GUI
- added new netlist simulation backend with out-of-the-box support for Verilator
- added easy integration of additional simulation engines by writing respective wrapper functionality
- added support for reading Saleae traces as simulation input to allow simulation on real-world inputs
- added tools to list, dump, compare, and export simulation results directly from disk
- added interaction between waveform viewer and GUI so that simulated net states can be visualized in netlist
- deprecated custom HAL simulator, which is now only available for debugging purposes
- Boolean functions
- added entirely new Boolean function architecture based on reverse Polish notation
- added new SMT solver interface with out-of-the-box support for both z3 and Boolector
- added custom symbolic execution engine
- added improved Boolean function optimization based on ABC
- module and gate pins
- added a new system for gate and module pins, breaking all previously used APIs
- added
GatePin
class to keep properties of gate pins stored within gate types - added
ModulePin
class to keep properties of module pins stored within modules - added
PinGroup
class to collect related pins in a dedicated container - added pin related interactions to GUI actions (undo and macro feature, log in crash dump)
- selection details widget
- added tabs to unclutter the presented information
- added more details on gate/module pins
- added more details on LUT functionality
- added options to edit properties such as names, types etc. whereever applicable
- running Python interpreter in background thread
- added option to abort Python script execution from within the GUI
- added support for
input
andraw_input
functions for Python scripts to take input from the HAL Python console - added GUI widgets to query for strings, numbers, file names, modules, or gates from Python scripts
- python console and editor features
- changed to using PEG instead of PyParser to parse whether statement is complete if python version >= 3.9
- added automatically saving all Python editor tabs upon saving the entire project (even un-named tabs)
- added timer to display abort button if Python console command runs for more than 5 seconds
- GateTypeProperty additions
- changed gate type properties
carry
,buffer
,lut
, andmux
toc_carry
,c_buffer
,c_lut
, andc_mux
- added new gate type properties such as
c_and
,c_or
, ... to better represent combinational logic - added pin types
carry
andsum
to better annotate pins of gate types with propertyc_carry
,c_half_adder
, orc_full_adder
- added respective annotations to gate libraries shipped with HAL
- changed gate type properties
- miscellaneous
- added context menu entry to add any module or gate to cone view
- added link feature between entry in module tree view and graphical view, e.g. renaming the module will also rename the view
- added GUI API for plugins so that plugins can query for input parameter and execution can be triggered by push button
- added
Gate::get_init_data
andGate::set_init_data
for simplified access to the INIT data of, e.g., LUT type gates - changed HGL gate library format to better support new gate pin features (backward compatible)
- bugfixes
- fixed gate locations not being properly loaded from a gate's data fields
- fixed multiple memory leaks
- fixed rare segfault when adding gates to a module
- fixed segfault when removing the last item from a view
- fixed parsing of Liberty gate library attribute
clock
- fixed description of flip-flops and latches in all FPGA gate libraries
3.3.0- 2021-10-13 16:20:00+02:00 (urgency: medium)
- Serialize to and deserialize from hal project directory
- Layouts from all views are saved and restored
- Grouping names and colors are saved and restored
- Command line option -p to open project added
- Command line option -i revised, will now import netlist file
- added user action system to enable recording and reverting actions within the GUI
- moved most GUI actions to the new user action system, including interactions with the graph view and view management
- user actions can be recorded and exported as a macro file allowing easier debugging and crash reporting
- recording of the user actions is automatically dumped on crash
- users can now revert actions executed within the GUI
- rebuild the settings system from scratch to allow for easier integration of new settings
- theme setting (and many others) can now be changed during the session
- added a warning when attempting to assign a keybinding that is already in use
- added incremental search for settings
- added setting to enable/disable extra window to list all executed instances from UserAction
- added new
Move to module ...
dialog- allows to create new module or select from existing modules
- existing modules can be selected from a table, tree-view, or using a module picker within the graph view
- enables searching for existing modules
- added cursor to indicate that user is in module pick mode
- added successor / predecessor utilities to gate and module context menu
- shortest path between two gates can be highlighted or added to current view
- predecessors or successors can be highlighted or added to the current view up to a user-specified depth
- different grouping colors can be assigned depending on the distance from the origin
- common predecessors or successors can be found and added to view
- improved layouter
- omit repeated layouting during an ongoing activity
- show progress bar during layouting
- allow user to abort layouting
- preserve graph view location of gate when moving it to new module
- fixed routing errors for complex cable swaps
- fixed multiple connections of a single net to the same gate not being shown properly
- fixed incorrect placement of new gates and modules in cone view when navigating starting from a net
- added generic SMT solver interface.
- added translation from
BooleanFunction
to SMT-LIB. - added
BooleanFunction::Node
data structure to extend functionality to generic ASTs. - added support for z3 and boolector SMT solvers.
- added cpp-subprocess library to handle communication with SMT solver.
- added Boost Spirit x3 library to generate grammar-based parser from SMT-LIB models to C++ data structures.
- added translation from
- improved handling of properties for special gate types such as LUTs and FFs.
- properties that only apply to special gate types have been moved out of the
GateType
class and into a designatedGateTypeComponent
- added functions to retrieve a gate type's components based on some filter condition
- added special components dealing with RAM properties
- properties that only apply to special gate types have been moved out of the
- improved netlist parsers
- split VHDL and Verilog parsers into two independent plugins
- netlist parsers now take the path to the netlist file as input instead of a
std::stringstream
- added support for
Z
andX
assignments to Verilog and VHDL parsers - added
tri
as a synonym forwire
to the Verilog parser - fixed netlist parsers assigning wrong order of inputs for some multi-bit signals
- improved netlist writers
- netlist writers now take the output path as input instead of a
std::stringstream
- removed broken VHDL writer (will not be supported until further notice)
- entirely new Verilog writer that respects module hierarchies
- added GEXF netlist writer, e.g., for netlist analysis within Gephi
- netlist writers now take the output path as input instead of a
- expanded
netlist_utils
- added function
get_common_inputs
to get inputs that are common across multiple gates - added function
replace_gate
to replace a gate with an instance of another gate type - added function
get_gate_chain
andget_complex_gate_chain
to find gates that are arranged in a chain - added function
get_shortest_path
to compute the shortest path between two gates - added function
get_next_gates
to get the predecessors or successors of a gate up to a user-specified depth - added function
get_partial_netlist
to export parts of a netlist as a netlist instance
- added function
dataflow_analysis
plugin- can now take groups of flip-flops as input that should not be touched during analysis
- this is meant to aid the dataflow analysis by passing control registeres identified beforehand, which prevents them from being merged into the datapath
- new internal event system
- binds event handlers to a netlist instance
- facilitates listening to the events of selected netlists only
- improved search
- all searchbars now come with options for "Exact Match" and "Case Sensitive" search, as well as a "Clear" button
- added search icons to the Python editor and the module widget
- disabled the search filter whenever the searchbar is not visible within a widget
- miscellaneous API changes and additions
- added function
is_top_module
to classModule
to determine whether a module is the top module - added function
get_nets
to classModule
to get all nets that are connected to any of the gates or submodules of a module - added functions
is_gnd_net
andis_vcc_net
to classNet
to determine whether a net is connected to GND or VCC - added functions
operator==
andoperator!=
to classesNetlist
,Gate
,Net
,Module
, andEndpoint
- added Python bindings for
netlist_serializer
- added function
- miscellaneous GUI changes and additions
- added
Save As...
option to save.hal
files under a different name - added
Export ...
menu to export the netlist using any of the registered netlist writers - added
Remove from view
action to context menu for gates and modules - added context menu options to close multiple view tabs at once
- added an indicator showing whether views have been modified
- added HAL version number to the info shown in
About
- added
Fold parent module
option to module context menu - when trying to create a view for a module that is already associated with an (unchanged) view, the existing view is activated instead of creating a new view
- added
- bugfixes
- fixed selection details not being updated immediately when renaming or changing a type
- fixed navigation bug where ports and nets did not match for modules
- fixed list of navigation targets containing duplicates and/or loops
- fixed drag'n'drop bug related to negative coordinates
- fixed liberty parser aborting on unknown
pg_type
- fixed stylesheets
- fixed improper handling of GND and VCC nets within the
solve_fsm
plugin - fixed module port names not being freed when reassigned a new name
- fixed segfault when no VCC or GND gate is present within a netlist
3.2.6 - 2021-03-03 09:30:00+02:00 (urgency: medium)
- added support for multiple properties (formerly refered to as "base type") for a single instance of class
GateType
- renamed enum
GateType::BaseType
toGateTypeProperty
and moved it out of classGateType
- added function
has_property
to classGateType
- changed function
get_base_type
of classGateType
toget_properties
- changed HGL gate libraries to support multiple properties
- changed function
create_gate_type
of classGateLibrary
to support multiple properties
- renamed enum
- added
sequential
,power
,ground
,buffer
,mux
, andcarry
gate type properties to enumGateTypeProperty
- moved enums
PinType
andPinDirection
from classGateType
into global scope - added
get_path
tonetlist_utils
to retrieve all gates on the predecessor/successor path from a start gate/net to gates of a specified property - made
optimize_constants
of classBooleanFunction
publicly accessible - refined buffer removal in
netlist_utils::remove_buffers
to take constant0
and1
inputs into account - added high-impedance state
Z
to classBooleanFunction
and added basic support toevaluate
- cleaned up and refined some logger outputs and streamlined log channel names
- disabled extended logging again
- changes to
z3_utils
(WIP) - fixed crash related to GraphicsScene destructor
- fixed overlapping gates in cone view (and subsequent segfault) by suppressing gate coordinates when adding to cone view
- fixed
get_gate_by_id
andget_gates
of classNetlist
returning only gates contained within one of its modules (causing a GUI crash upon deleting gates from a module) - fixed nets of old module not updating when moving gate from one module to another
3.2.5 - 2021-01-29 13:15:00+02:00 (urgency: medium)
- WARNING: temporarily enabled extended logging (includes taking screenshots) for university course purposes. Note that no data leaves your machine unless you actively provide it to us.
- views get persisted to .halv file and are restored if the file is found on disk
- fixed bug in
boolean_influence
plugin causing problems on global inputs - fixed gate and net details widget not showing full list of pins for large gates
3.2.4 - 2021-01-23 15:30:00+02:00 (urgency: medium)
- added plugin
boolean_influence
that enables calculation of the boolean influence for each FF depending on the predecessing FFs - extended the
z3_utils
plugin with az3Wrapper
class, which holds exactly onez3::expr
and the correspondingz3::context
- removed the code coverage checks from the macOS pipeline and added test command, so the macOS pipeline will work again properly
- fixed a bug in DANA, where sometimes the net names were output in the DANA results instead of the gate names
3.2.3 - 2021-01-18 18:30:00+02:00 (urgency: medium)
- fixed
z3_utils
plugin being disabled by default causing linking errors - fixed
load_initial_values
andload_initial_values_from_netlist
assigning values to potentially non-existing nets
3.2.2 - 2021-01-16 14:40:00+02:00 (urgency: medium)
- refactored gate library handling
- separated gate library manager from gate library parser interface
- added gate library writer interface to enable writing out gate library files
- extended and refactored gate library functionality
- added
create_gate_type
to classGateLibrary
to enable gate type creation from Python - added
mark_vcc_gate_type
andmark_gnd_gate_type
to classGateLibrary
to enable marking gate types as power or ground connections - added
get_gate_type_by_name
andcontains_gate_type_by_name
to classGateLibrary
- added pin types and respective functions to
GateType
to enable assigning special-purpose pins - added
get_gate_library
to classGateType
- added base types
ram
,dsp
, andio
- merged input and output pin groups to simplify pin group handling
- removed
add_gate_type
function from classGateLibrary
- removed
GateTypeSequential
andGateTypeLut
classes and moved their functionality into classGateType
- renamed some functions to have shorter and more understandable names
- added
- added new gate library format: "HAL Gate Library" (HGL)
- supports assignment of pin types to gate types
- added parser for HGL (
.hgl
) files - added writer for HGL (
.hgl
) files
- refactored liberty gate library parser
- added parsing of power and ground pins (
pg_pin
) to Liberty parser
- added parsing of power and ground pins (
- added more netlist utility functions
- added
get_nets_at_pins
to retrieve nets that are connected to a vector of pins - added
remove_buffers
to remove buffer gates from a netlist - added
remove_unused_lut_endpoints
to remove unused LUT fan-in endpoints - added
rename_luts_according_to_function
to rename LUTs depending on the Boolean function they implement
- added
- added
to_z3
to classBooleanFunction
to translate a Boolean function into a z3 expression - added highly experimental
solve_fsm
plugin for FSM verification using z3 - added
z3_utils
plugin to provide common z3 functions to all other plugins - improved layouter uses location information from gate API
- switched from float gate coordinates to integer ones
- the netlist simulator VCD writer now optionally takes a set of target nets to write to VCD
- fixed
add_boolean_function
of classGate
assigning wrong functions to LUTs - fixed wrong Python binding for property
gate_library
of classNetlist
- fixed netlist simulator segfaulting when an output pin of a FF remains unconnected
- fixed optimization of Boolean functions sometimes producing wrong or non-optimal results
- fixed
netlist_utils::get_subgraph_function
returning wrong results if input pins without relevance for the Boolean function remained unconnected - fixed layouter not showing connections if things change within submodules by adding additional test whether removing or adding a gate/module requires context update
3.1.11 - 2021-01-03 11:35:00+02:00 (urgency: medium)
- added highly experimental way to close and reopen netlists at runtime
- known issue: the Python context does not change properly between netlists
- added creation of backups for Python files created within the editor outside of the
.hal
file - added user prompt when detecting Python file backups after a crash
- fixed crash when moving top module upward
- fixed module cache inconsistencies causing bad memory allocs in the GUI when deleting nets or endpoints
3.1.10 - 2020-12-18 14:00:00+02:00 (urgency: medium)
- added
SB_GB_IO
,SB_GB
,SB_I2C
,SB_SPI
,SB_HFOSC
, andSB_LFOSC
gate types toICE40ULTRA
gate library - added jumping to gates, nets, and modules from the selection details widget when double-clicking the respective item in the list or using the context menu
- added isolating gates and modules in new views from the selection details widget using the conext menu
- changed layouter to only be called after fully executing a Python script
- improved performance of selection details widget
- fixed layouter flaw that junctions could not be drawn if in- and outgoing wires were swapped
- fixed parsing of bit order for INIT strings in FPGA gate libraries
- fixed GUI segfaulting when deleting wires without unfolding the containing module
- fixed occasional null pointer exceptions on GUI startup
- fixed GUI listening to signals from netlists other than the one loaded within the GUI
- fixed graph view resizing when navigating using the arrow keys or the GUI API
3.1.9 - 2020-12-02 13:00:00+02:00 (urgency: medium)
- added
NetlistSimulator::load_initial_value_from_netlist
to load the initial value from the netlist - changed
NetlistSimulator::load_initial_values
to load a user-specified value instead of reading it from the netlist - fixed layouter not showing gates within modules for netlists with coordinates
3.1.8 - 2020-12-02 10:00:00+02:00 (urgency: medium)
- added optional placement of gates and modules according to COORDINATE info parsed from netlist file
- fixed bug in recently introduced placement according to parsed coordinates, map needs clear if unused
- fixed crash caused by NodeBoxes hash not completely emptied on clear
- fixed mistakes in
module
Python documentation - fixed missing include in
graph_navigation_widget.cpp
- fixed missing initialization in
NetlistSimulator::generate_vcd
- fixed missing input label when separated net is connected to more than one port
3.1.7 - 2020-11-26 14:30:00+02:00 (urgency: medium)
- WARNING: the function signature of
netlist_utilities::get_subgraph_function
has changed - added cycle detection to
netlist_utilities::get_subgraph_function
again - added Lattice ICE gate library
- improved access to layout class NodeBox for GUI C++ developer
- improved Python plugin, added command line option
--python-script
and--python-args
- improved appearance and programmcode for arrow-key navigation
- removed all Boost and Kyoto references
- fixed crashes due to missing entries in coordinate system in views with unconnected boxes
- fixed crashes when navigating from global inputs connected to multiple boxes
- fixed bad alignment between net endpoint and port label for gates with ports not connected to nets
- fixed log output got incorrectly supressed in case command line arguments were solely directed at plugins
- fixed wrong layouting of endpoints in GUI in the presence of unconnected pins/ports
- fixed wrong calculation of minimum size of the dockbars
- fixed bottom dockbar not reappearing when dragging removing every widget from it
3.1.6 - 2020-11-22 19:30:00+02:00 (urgency: medium)
- added
netlist_utilities::get_subgraph_function
variants with and without cache - added
netlist_utilities::get_next_sequential_gates
variants with and without cache - added tests for
netlist_utilities::get_next_sequential_gates
- added python bindings for gate_library_manager
- cleaned up
DataContainer
- removed hidden internal cache from
netlist_utilities::get_subgraph_function
- removed
netlist_utilities::get_subgraph_function
cycle detection due to unintended behavior - fixed netlist parsers wrongly handling escapings within strings
- fixed
netlist_utilities::copy_netlist
did not copyDataContainer
contents - fixed netlist pybind handling of netlists that occasionally led to double-free segfaults
- fixed segfault in
BooleanFunction::from_string
when providing partial variable names
3.1.5 - 2020-11-16 14:30:00+02:00 (urgency: medium)
- fixed and expanded Python decorators for logging in study environment to additionally cover the GUI
- fixed infinite loop when renaming groupings using the GUI
3.1.4 - 2020-11-15 14:00:00+02:00 (urgency: medium)
- added tests for
netlist_utils
- fixed crash when creating invalid module when using
netlist::create_module
- fixed assigning nets instead of gates when copying netlist using
netlist_utils::copy_netlist
- fixed
netlist_utils::copy_netlist
not copying port names - fixed
netlist_utils::get_subgraph_function
crashing on unconnected input pin - fixed infinite loop within
netlist_utils::get_subgraph_function
if the combinational logic contains a feedback path
3.1.3 - 2020-11-12 17:15:00+02:00 (urgency: medium)
- GUI code refactoring
- fix crash which occurs sometimes when invoking context menu from gate
3.1.2 - 2020-11-09 20:00:00+02:00 (urgency: medium)
- updated existing Python decorators and added new ones for the GUI API
- fix
get_subgraph_function
crashing whenoutput_net
is a nullptr
3.1.1 - 2020-11-05 16:18:00+02:00 (urgency: medium)
- fix bug that preventes module widget from showing the full tree in some instances
- fix missing cleaup of groupings when deleting gates, nets, or modules
- display Python Editor Widget by default, but hide its navigation bar
- do not display Log Widget by default anymore
3.1.0 - 2020-11-04 14:00:00+02:00 (urgency: medium)
- new (deterministic) layouter
- tries to minimize wire length by placing connected gates closer to each other
- combines multiple in-/outputs into one port if driven by the same net
- cleaner overall appearance of the graph
- added Python tool to convert SkyWater gate libraries into a Liberty file that can be read by HAL
- fix bug with selection within grouping widget
- fix return code of GUI
- fixed problems when dragging around the docking bars of widgets
- Fix detect Library Path
3.0.2 - 2020-10-29 16:00:00+02:00 (urgency: medium)
- Focal Test Release 2
3.0.1 - 2020-10-29 13:00:00+02:00 (urgency: medium)
- Focal Test Release
3.0.0 - 2020-10-29 12:00:00+02:00 (urgency: medium)
- new selections details widget
- hierarchical view of all items within the current selection
- a single item can be selected within that view
- selected item will be highlighted in a different color than the rest of the graph view selection
- current selection can be moved to a module or grouping by using the respective buttons
- details section
- shows additional details for the item selected in the hierarchical view
- sections can be collapsed and expanded
- right-click context menu allows to copy strings or Python code to the clipboard and change module name, type, and port names
- added number of gates, nets, and submodules to module details widget
- hierarchical view of all items within the current selection
- new view manager widget
- now presented in a table view additionally containing information about the time of creation of the view
- views can be sorted by name and date
- gate library improvements
- support for gate types with multi-bit pins
- clear identification of clock pins
- new netlist features
- module types and named module ports (parsed from netlist or set by user)
- support for multi-driven nets (i.e., nets with more than one source)
- groupings
- an interactive container for gates, nets, and modules
- new groupings widget within the GUI to control groupings
- allows to be filtered and sorted
- groupings can be added to the current selection
- members of a grouping are shown in a dedicated color within the graph view
- new graph view features
- Python GUI API to control the graph view
- zoom level of graph view can now be controlled by shortcuts
- netlist utilities
- added function to deep copy a netlist
- added function to get the Boolean function of a subgraph
- state-of-the-art suite of benchmark netlists
- new simulator plugin
- simulates (parts of) a netlist cycle accurate
- can export to VCD
- added
clear_caches
toNetlist
- added
get_fan_in_endpoint
,get_fan_out_endpoint
,get_fan_in_endpoints
andget_fan_out_endpoints
to classGate
- double-clicking module in module widget will open it in new view
- gate library manager now operates on file paths instead of library names
- liberty gate library parser now supports inout ports, clock statements and bus groups
- netlist parsers
- VHDL and Verilog parser now use common intermediate structure for parsing
- attribute parsing for Verilog parser
- support for inout ports
- all parsers and writers have been moved into plugins
- code refactoring
- "hal" namespace
- TitleCase for classes
- moved to std::filesystem internally
- split Python API into multiple files
- massively expanded testing coverage
- the project is now affiliated with the Max Planck Institute for Security and Privacy
- reworked core ownership model
- no more
shared_ptr
- clear ownership management via
unique_ptr
at necessary locations - instances passed via non-owning raw pointers
- no more
- updated/fixed the graph algorithms plugin by switching entirely to igraph
- Endpoints are now managed classes as well, owned by the respective nets and passed via pointers
- cleaned up the documentation in many parts of the core
- inverting a Boolean function is now done using
~
instead of!
- cone-view now works correctly for modules
- module widget selection is now more consistent with graph view
- inconsistencies with case insensitivity of the VHDL parser fixed
- delete option no longer shown for top module in right-click context menu
- some minor memory leaks in plugin management
- list of nets and gates no longer present in module details widget
- accessing the single source of a net is superseeded by accessing its source list to support multi-driven nets
- using
!
to invert a Boolean function
2.0.0 - 2019-12-19 22:00:00+02:00 (urgency: medium)
Note: This is an API breaking release.
- Heavily improved VHDL and Verilog parsers
- Updated CMake build system to use target-based configurations
- Changes to gate library system
- Replaced BDDs with Boolean functions
- Major changes to internal representation of gate types
- Allows for differentiation between LUTs, flip-flops, latches and combinational gate types
- Flip-flops and latches may now specify special sequential inputs such as enable, clock, set, and reset
- Replaced JSON gate libraries with liberty files
- Simplified plugin system
- Included igraph library
- Major GUI revision
- Added isolation view/cone view feature
- New layouting system
- Added support for hierarchization/modularization
- Tons of bug fixes and smaller issues ...
1.1.8 - 2019-09-19 14:23:59+02:00 (urgency: medium)
- Fix command line parsing
- Fix parse all_options from main
- Fixed set log option as command line parameter without stopping execution
- Fixed assign parsing for yosys verilog output
1.1.7 - 2019-08-26 10:41:58-04:00 (urgency: medium)
- Changed myself library to synopsys_nand_nor
- Fixed bug in bdd gen
- Added new gate library!
- Added python decorator to log function calls
- Changed question when hal file exists for better clarity
- Fixes #179. Parse yosys netlist correct. (#181)
- Set new vhdl parser as default, keep old one as fallback (#180)
1.1.6 - 2019-08-05 15:55:18+02:00 (urgency: medium)
- Fixed ubuntu ppa build
1.1.5 - 2019-08-05 15:14:35+02:00 (urgency: medium)
- Added uninstall target and fixed make/ninja install on linux with correct ldconfig settings
- Test/test update (#176)
- Fixed OpenMP build for macOS 2nd try
- Fixed cmake on macOS
- resetted utils to master
- resetted some files to master
- Update Dockerfile
- Update install_dependencies.sh
- Update Dockerfile
- modified dependencies to include igraph
- reset files from vhdl_modules_feature branch
- Update scan_ff.py
- added missing line in python script
- added new gate_library for scan_ff - added gate decorator - added json for library
- cleaned community_detection
- community_detection working with igraph_community_fastgreedy + printing and plotting results
- added nangate gate library
- minor fixes
- Fix documentation error
- removed bug in split function in utils; added file exists function
- fixed some shadow warnings
- added file_exists function to core::utils
- implemented graph plot + community fastgreedy algorithm
- openmp
- prepared community detection with igraph
- Updated brew file to include graph
- added igraph to cmake
- added igraph
- bug in hdl writer - backslashes are being removed
- fixxed naming for modules
1.1.4 - 2019-07-15 14:53:49+02:00 (urgency: medium)
- Remember py path for last 'saved as'
- Fix several bugs regarding file modified state
- Add file modified indicator
- Fix function call
- Remove unnecessary function parameters
- added missing includes
- Remove malformed whitespaces
- Remove global content manager artifacts
- Add python file modified indicator
- Deglobalize hal content manager
- Connect netlist watcher and file status manager
- Integrate global file status manager
- Add Quuid to python code editor
- Add global class to track modified files
- recent-files-items now keep track of their files and are removeable. This fixes issue #136
- Fix content manager integration
- Integrate content manager to previous solution
- Fix errors after master merge
- Add ability to reload pyscript if modified on disk
1.1.3 - 2019-07-03 10:10:12+02:00 (urgency: medium)
- Remember last opened path for python scripts
- Add multi file selection for python scripts
1.1.2 - 2019-06-27 14:21:03+02:00 (urgency: medium)
- Add hint to gate_libraries to README.md
- Changes to the global state can be handled via ContentManager
1.1.1 - 2019-06-27 14:21:03+02:00 (urgency: medium)
- Quickfix for Xilinx Simprim gate library
1.1.0 - 2019-06-27 12:28:36+02:00 (urgency: medium)
- Added Support for Xilinx Unisim gate library
- Added Support for Xilinx Simprim gate library
- Added Support for Synopsys 90nm gate library
- Added Support for GSCLIB 3.0 gate library
- Added Support for UMC 0.18 um gate library
- Added VHDL and Verilog parser fixes
- Fixeds issue #143
- Fixed static lint issues
1.0.24 - 2019-06-21 15:36:52+02:00 (urgency: medium)
- Testing new CI deployment
1.0.23 - 2019-06-21 10:36:36+02:00 (urgency: medium)
- Automated homebrew deployment
- Testing new CI deployment
1.0.22 - 2019-06-19 16:48:41+02:00 (urgency: medium)
- Fixed showing message box for error while opening file
- Fixed plugin generator for new EXPORT definition
- Fixed Visibility of shared Libraries (#121)
- Fixed bug in callback hook, optimized json output
- Added pybind for bdd evaluate
- Added python editor tabs in hal file manager
- Remove plugin manager callback hook while closing GUI. Fixes #88
1.0.21 - 2019-06-13 17:17:28+02:00 (urgency: medium)
- Fixes in python editor
- Fixes in core (Closes issue #98 and #96)
1.0.20 - 2019-06-06 11:56:36+02:00 (urgency: medium)
- Added python editor tabs to have multiple documents open at the same time
1.0.19 - 2019-05-30 21:45:18+02:00 (urgency: high)
- Remove dirty flag from genversion.py
- Remove kernel.h dependency in include/gate_decorator_system/decorators/gate_decorator_bdd.h for plugin repositoriese
1.0.18 - 2019-05-30 19:44:48+02:00 (urgency: high)
- Fix un-indent of single line failing on specific cursor positions
- fixed bug in parsers: added a GLOBAL_GND instead of a GLOBAL_VCC gate
1.0.17 - 2019-05-29 14:52:07+02:00 (urgency: medium)
- Fixed correct python binding of data container and added documentation for it. Closes #78
- Rename add_net and insert_gate to assign_net and assign_gate in module class. Closes #85
- Fix cursor position upon stdout and stderr text output
- Fix build instructions for macOS and import of OpenMP
- fixxed documentation
- added new features to gate_decorator_bdd: - generate truth table - evaluate bdd
- python context is no longer printed before each script execution
- Hardcode returns from python editor
- Display prompt before closing application
- Added first issue templates
1.0.16 - 2019-05-23 10:20:12+02:00 (urgency: high)
- Allow changing parent module (#84)
- navigation expands the file-name-index when gui starts (#83)
- Feature/selection history (#82)
- Move to spdlog 1.3.1 (#80)
- new tool for generating new plugins (#81)
- Fixed homebrew install command in README.md
- Fixes for out of source plugin builds
1.0.15 - 2019-05-16 14:42:58+02:00 (urgency: high)
- Fixed install include path of plugins
- Include information about homebrew tap in README.md
1.0.14 - 2019-05-16 10:41:27+02:00 (urgency: high)
- Fix install rpath on macOS
- Update genversion.py
- netlist creation now correctly fires module created event for topmodule
- Fix bad python binding for gates property of module
- Fix disabled arrow keys in navigation view
1.0.13 - 2019-05-13 12:53:46+02:00 (urgency: high)
- Fix auto-scrolling in the python editor
- Add indent/unindent for multi-line selections in python editor
- Fixed python shell to properly support global keyword
1.0.12 - 2019-05-13 12:53:46+02:00 (urgency: high)
- Fixed global and local in python context
- Cleanup .gitignore and .gitattributes
- Added .brew_home to .gitignore for homebrew builds
- Move from gitter to discord in README.md
1.0.11 - 2019-04-30 19:46:40+02:00 (urgency: high)
- Minor fixes
1.0.10 - 2019-04-30 19:46:40+02:00 (urgency: high)
- Add python editor save-as button and fix load/save logic (#55)
- Add shift-tab unindent in python editor (#51)
- fixed readme not showing screenshot
- updated readme, fixed gui log not showing multiple spaces, added python bindings for quine mccluskey plugin
1.0.8 - 2019-04-30 19:46:40+02:00 (urgency: high)
- Added plugin directory to include_directories
1.0.7 - 2019-04-30 16:12:10+02:00 (urgency: high)
- Added missing python defs
- Fixed misleading error message, fixed wrong module signal
- Fix graph_algorithm include
1.0.6 - 2019-04-29 18:52:10+02:00 (urgency: high)
- Added sunny theme
- Fixes plugin name for python import
1.0.5 - 2019-04-26 16:55:18+02:00 (urgency: high)
- GIT repo cleanup
1.0.4 - 2019-04-26 16:55:18+02:00 (urgency: high)
- Fixes GUI not start from package install again
1.0.3 - 2019-04-26 15:20:17+02:00 (urgency: high)
- Fixes GUI not start from package install
1.0.2 - 2019-04-26 01:38:17+02:00 (urgency: high)
- Fix in install buddy header again
1.0.1 - 2019-04-25 20:44:35+02:00 (urgency: high)
- Fix in install buddy header
1.0.0 - 2019-04-25 16:32:50+02:00 (urgency: low)
- Initial Release