Nic30 / hwtLib

hardware library for hwt (= ipcore repo)
MIT License
34 stars 7 forks source link
fpga hardware-designs rtl verilog vhdl

hwtLib

CircleCI PyPI version Coverage Status Documentation Status Python version Join the chat at https://gitter.im/hwt-community/community

hwtLib is the library of hardware components writen using hwt library. Any component can be exported as Xilinx Vivado (IP-exact) or Quartus IPcore using IpPackager or as raw Verilog/VHDL/SystemC code and constraints by to_rtl() function. Target language is specified by keyword parameter serializer.

Content

For example there is a component AxiLiteEndpoint, wich is configured using c-like data type description and it generates a address decoders and convertors to other intefaces if requested. Another example is Axi4S_frameParser, which is configured in same way and performs an extraction of the data fields from an input stream. Hwt type system does contains all c-like and SystemVerilog-like types but in addition it allows for better specification of padding and allignment and has an explicit data type for streams. This allows Axi4S_frameParser to be easily configured to change alignemnt of the stream, cut/split/replace part of the steam with an easy to read HLS-like description.

Verifications are write in UVM like style and as hwt based design are actually a graph we can easily analyse them. This is every useful as it allows us to generate most of the test environment automatically in a user controlled and predictable way and write mostly only a test scenario. For example there is no need to build bus transactions manually as AddressSpaceProbe can discover the mapped address space (for any interface) and we can set register values using a proxy as if it was a normal value. This means that you can write a verification which will have a component with arbitrary bus/address space and it will work as long as you keep the names of the registers the same.

Clock frequencies and target chips usually does not matter but if componet generates constraints it surely needs a correct clock period to generate them correctly.

Also note that the code of the components should be shared if @serializeParamsUniq is used, the design for largest FPGAs takes 5s to generate. The verification should be also fast (take look at travis build) if this is not your case you are probably doing something wrong.

Installation

# from PYPI (latest release)
sudo pip3 install hwtLib

# or from git (latest)
sudo pip3 install -r https://raw.githubusercontent.com/Nic30/hwtLib/master/doc/requirements.txt git+https://github.com/Nic30/hwtLib#egg=hwtLib --upgrade --no-cache

Repositories with opensource HW: