GithubHelp home page GithubHelp logo

uwsampl / lakeroad-evaluation Goto Github PK

View Code? Open in Web Editor NEW
5.0 8.0 0.0 4.87 MB

License: MIT License

Dockerfile 0.01% Shell 0.06% SystemVerilog 1.81% Python 0.40% Verilog 92.15% Tcl 0.01% Coq 5.56%

lakeroad-evaluation's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lakeroad-evaluation's Issues

Get semantics of extract from CIRCT people

To summarize the question, the ExtractOp only takes a lowbit as an argument. The highbit is implicit. This raises to questions:

  1. Is highbit determined as lowbit + output_type_size - 1?
  2. If so, what if lowbit + output_type_size - 1 > input_type_size??

Her's a summary of ExtractOp's description and signature

  • comb.extract (::circt::comb::ExtractOp):

    Extract a range of bits into a smaller value, lowBit specifies the lowest bit included.

    • Syntax:

       operation ::= `comb.extract` $input `from` $lowBit attr-dict `:` functional-type($input, $result)
      

Hard to support Calyx primitives that depend on other modules

We currently just don't do this.

For example, an integer divider is implemented with a fixed point divider. We pre-synth the fixed point divider, but we don't technically pre-synth the entire integer divider (though it will be mostly/all pre-synthed, because it's just a FP divider).

It's hard because we'd need to start importing modules, which gets messy quickly (try it and you'll see).

Presynthesize memories in Calyx

We are not presynthesizing memories in Calyx, namely because Calyx's test ecosystem is not set up for it. Calyx's tests depend on being able to look at the internal state of a memory.

It's kind of a lame excuse, but it's pretty important to know that Calyx is still functional, so I really don't want to break the tests permanently.

I looked at using something like the keep attribute in Verilog, but it doesn't preserve a signal all the way through place and route, which is what we need.

End-to-end smoketest (compile some instruction to some FPGA and test)

I want to get an end-to-end smoketest done and checked into the eval repo, just for my own sanity. Here's what I wanna do:'

  • Ingest an ISA instruction (ideally multiple, but can start with one) expressed either in Rosette or translated to Rosette from Reticle/Comb/whatever
  • Synthesize ISA instruction for Xilinx UltraScale+
  • Compile synthesized result to Verilog implementation
  • Place and route the result to ensure validity
    • Is this enough? It would be great to actually get it onto a board!
  • Simulate the result with Verilator to ensure functional correctness
    • Is this enough?

Build or choose benchmark suite for Lakeroad

We need to collect benchmarks for Lakeroad. This will be the primary source of documentation for finding benchmarks.

Possible benchmarks:

Get semantics of icmp from CIRCT people

The ICmpOp takes a predicate argument, and I'm not sure how this is supposed to be interpreted. My guess is that it is just an int code to determine which comparison to run.

I've asked on the CIRCT discord but haven't gotten a response yet.

In the mean time I'm going to generate fresh source for common comparisons:

  • ==
  • !=
  • is_zero
  • is_not_zero
  • >
  • >=
  • <
  • <=

Add a new Yosys evaluation or revive the old one

Currently we're not running the task that generates the Yosys table. I updated our Yosys+Lakeroad fork for the YosysHQ demo, but I haven't updated the eval to work on that updated version of Yosys+LR.

Replace calls to abc with calls to Lakeroad in yosys

This is potentially a way to build a more robust evaluation. As far as I know, Yosys breaks up a design into subcomponents and then calls ABC on subcomponents to map. We could replace that call to ABC with a call to Lakeroad.

Fix crash in Dockerfile due to `route_design`

I ran into this problem a while ago. I started using route_design -release_memory because the flag prevented a crash in the Docker container. Turns out it prevents a crash because it doesn't run routing at all. Whoops.

Without the flag, we get the crash. So have to investigate this.

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.