Coder Social home page Coder Social logo

stanfordaha / lake Goto Github PK

View Code? Open in Web Editor NEW
14.0 20.0 2.0 4.52 MB

Lake is a framework for generating synthesizable memory modules from a high-level behavioral specification and widely-available memory macros.

License: BSD 3-Clause "New" or "Revised" License

Python 94.91% SystemVerilog 4.82% Shell 0.02% Makefile 0.24% Tcl 0.01%

lake's Introduction

Lake: An Agile Framework for Designing and Automatically Configuring Physical Unified Buffers

Lake is a framework for generating synthesizable memory modules from a high-level behavioral specification and widely-available memory macros. Lake also comprises a library of generalized hardware modules aimed at memory controller designs.

Install

git clone github.com/StanfordAHA/lake

cd lake && pip install -e .

Run a test

To run a test, you can simply generate the verilog and push through your favorite verilog simulator. Alternatively, Lake uses the pytest framework for unit tests of constituent modules. These tests leverage fault and verilator for open source simulation. Tests should run and pass on Linux and MacOS.

Documentation

Check out the wiki of this github repo.

lake's People

Contributors

mbstrange2 avatar kavyasreedhar avatar joejoedesu avatar jake-ke avatar ankita0805 avatar bobcheng15 avatar mcoduoza avatar kalhankoul96 avatar kuree avatar joyliu37 avatar steveri avatar jack-melchert avatar hofstee avatar yuchen-mei avatar alexcarsello avatar weiya711 avatar kongty avatar

Stargazers

Josie Herzog avatar  avatar Andrew Butt avatar  avatar Chen avatar  avatar  avatar Jiacheng Pan avatar  avatar Roman Hossain Shaon avatar  avatar Kevin Kiningham avatar  avatar  avatar

Watchers

Nikhil Bhagdikar avatar  avatar James Cloos avatar  avatar Pat Hanrahan avatar David Durst avatar  avatar Clark Barrett avatar Xuan Yang avatar  avatar  avatar  avatar Caleb Donovick avatar Gedeon Nyengele avatar Daniel Stanley avatar  avatar  avatar Kathleen avatar  avatar  avatar

lake's Issues

Control signal polarity in tech maps

Specific to dual_port_sram_joey branch:

Tech maps should capture whether each of the control signals is active high or active low to be more generic.

data_out takes in chain_data after stencil valid is gated

The current logic design is shown below:

always_comb begin
  if (accessor_output[0]) begin
    data_out_tile[0] = curr_tile_data_out[0];
  end
  else data_out_tile[0] = chain_data_in[0];
  if (accessor_output[1]) begin
    data_out_tile[1] = curr_tile_data_out[1];
  end
  else data_out_tile[1] = chain_data_in[1];
end

If the chain_data is not driven, which is often the case given our apps, data_out becomes x after valid cycles. As shown in the wave below:
image

Wrapper for verilog generation does not work?

@kavyasreedhar I'm trying the command you recommended to run the verilog wrapper generator, but I'm getting a weird error:

dhuff@kiwi:~/lake$ python tests/wrapper_lake.py -c conv_3_3_recipe/buf_inst_input_10_to_buf_inst_output_3_ubuf 
Traceback (most recent call last):
  File "tests/wrapper_lake.py", line 5, in <module>
    from lake.utils.util import generate_lake_config_wrapper
ImportError: No module named lake.utils.util

Any idea what I'm doing wrong?

Improving Opal 4/22/24

  1. Balancing the read scanner crd and seg
  2. static segmentation in the GLB read mem
  3. Skipping in the intersect "galloping"
  4. Stream version of the dense scanner in the sparse flow

Error out with ncsim

As of a89c091, the top test errors out with ncsim, but passes with Verilator. I'm suspecting it's x related issue since Verilator doesn't handle x. It could also be timing/cycle related bug.

Create a chain of and gate use reduce in Kratos

I am trying to use kratos to generate the accessor hardware.

This combinational logic in piece_sel function is to "and" a bunch of bool variables produced by the comparison logic. And doing a log operation on it. I get the following error when run this hardware generator. Could any Kratos expert told me which part I wrote is incorrect?

File "basic.py", line 65, in init
self.add_code(self.piece_sel)
File "/nobackup/joeyliu/aha/lakeenv/lib/python3.7/site-packages/kratos/generator.py", line 558, in add_always
fn_ln, kargs)
File "/nobackup/joeyliu/aha/lakeenv/lib/python3.7/site-packages/kratos/pyast.py", line 848, in transform_stmt_block
exec(code_obj, _globals)
File "", line 10, in
File "", line 5, in piece_sel
File "", line 5, in
_kratos.exception.InvalidConversionException: Cannot convert a variable to bool

Default __main__ missing/old

For debugging purpose it's very helpful to have __main__ in each module so that we can directly inspect the SystemVerilog if things go wrong. Most of the modules already have it, but some of them are either missing, or out-dated. @kavyasreedhar can you do updates on your modules?

New Memory Tile Feature to Support Unified Buffer

  • Input access pattern
  • Support Line buffer with correct access pattern
  • Support High dimensional stencil width parameter or general stencil valid generation
  • Support Arbitrary Delay / Negative starting address
  • handle accumulation Buffer with mutiple port

clk_en bypass for SRAM

To support SRAM configuration while clk_en is low (stall high), we need to use the config_en wires to the SRAM features as a bypass to clk_en for the tile.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.