-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
649a142
commit 0ed7740
Showing
2 changed files
with
23 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,6 @@ | ||
# Filament Evaluation | ||
|
||
Evaluation artifact for Filament HDL presented in the paper "Modular Hardware Design with Timeline Types". To clone: | ||
|
||
``` | ||
git clone https://github.com/cucapra/filament-evaluation.git | ||
cd filament-evaluation | ||
git submodule init | ||
git submodule update | ||
``` | ||
Evaluation artifact for Filament HDL presented in the paper "Modular Hardware Design with Timeline Types". | ||
|
||
**NOTE**: Before starting, ensure that you have 105 GB of storage space. Unfortunately, the Vivado tools can take up quite a lot of space during installation. To the best of our knowledge, Vivado tools are only supported for x86 architectures and do not work on the ARM-based processors. | ||
|
||
|
@@ -40,22 +33,21 @@ ssh -p 3022 [email protected] | |
> **NOTE**: If you're using the VM, skip to the next section. | ||
**Prerequisites**: | ||
- Clone this repository | ||
- Initialize submodules: `git submodule init && git submodule update` | ||
- Install [Rust][rust-install] | ||
- Install the test runner `runt`: `cargo install runt` | ||
- Install [z3][] | ||
- Install [Icarus Verilog][iverilog] (version >= 11.0) | ||
- Ensure your python version is >= 3.9 and insall dependencies: | ||
- Ensure your python version is >= 3.9 and install dependencies: | ||
``` | ||
python3 -m pip install numpy | ||
``` | ||
|
||
Run the following command from the root of the repository to build and configure tools: | ||
Run the following command from the root of the repository to build and configure tools. | ||
**NOTE**: Make sure you're in the root of this repository before running the command! Otherwise, the installation **will fail** completely and misconfigure the tools. | ||
``` | ||
cd <replace-with-location-to-filament-evaluation> && ./scripts/configure-fud.sh | ||
``` | ||
**NOTE**: Make sure you're in the root of this repository before running the command! Otherwise, the installation **will fail** completely and misconfigure the tools. | ||
|
||
The final line should say exactly this: | ||
``` | ||
|
@@ -110,13 +102,13 @@ The following instructions assume you're using the VM. These instructions **requ | |
- Open the terminal and run `cd ~/Desktop && ./Xilinx_Unified_2020.2_1118_1232_Lin64.bin` | ||
- If a box pops up asking you for a new version, ignore it and click `Continue`. | ||
- Enter your Xilinx credentials. If you don't have them, [create a Xilinx account][xilinx-account]. | ||
- **Note** When you create an account, you need to fill out all the required information on [your profile][xilinx-profile]. Otherwise the Xilinx installer will reject your login. | ||
- **Note** When you create an account, you need to fill out all the required information on [your profile][xilinx-profile]. Otherwise, the Xilinx installer will reject your login. | ||
- The "User ID" is the email address of the Xilinx account you created. | ||
- Agree to the contract and press `Next`. | ||
- Choose `Vivado` and click `Next`. | ||
- Choose `Vivado HL WebPACK` and click `Next`. | ||
- Leave the defaults for selecting devices and click `Next`. | ||
- **Important!** Change the install path from `/tools/Xilinx` to `/home/filament/Xilinx`. | ||
- **Important!** Change the installation path from `/tools/Xilinx` to `/home/filament/Xilinx`. | ||
- Confirm that you want to create the directory. | ||
- Click Install. Depending on the speed of your connection, the whole process should take about 2-4 hrs. | ||
- To ensure that the tool was installed correctly, do the following: | ||
|
@@ -134,7 +126,7 @@ Use the following script to ensure that your `vivado` installation work correctl | |
cd <replace-with-location-to-filament-evaluation> && ./scripts/synth.sh | ||
``` | ||
|
||
## Step-by-step Instructions | ||
## Step-by-step Instructions (30-45 minutes) | ||
|
||
The artifact reproduces the following claims: | ||
1. Latency information generated by Aetherling (Table 1) | ||
|
@@ -188,7 +180,7 @@ runt -j 1 -d -i table-1/ | |
<details> | ||
<summary><b>Regenerating Aetherling Latency Data</b> [click to expand]</summary> | ||
|
||
Our harness files hardcode the latencies information. | ||
Our harness files hard code the latency information. | ||
Generating latency information requires the [Aetherling artifact][aeth-artifact]. | ||
Our provided instructions work when using the Aetherling artifact VM: | ||
|
||
|
@@ -200,7 +192,7 @@ Our provided instructions work when using the Aetherling artifact VM: | |
map compute_latency conv_2d_ppar | ||
map compute_latency sharpen_ppar | ||
``` | ||
- The above commands will cause the run the Aetherling compiler on all the `conv_2d` and `sharpen` designs and report the results in the form of a 7-element array which tracks the latencies for designs with the following throughputs: `[16, 8, 4, 2, 1, 1/3, 1/9]`. | ||
- The above commands will cause the run the Aetherling compiler on all the `conv_2d` and `sharpen` designs and report the results in the form of a 7-element array which tracks the latencies for designs with the following throughput: `[16, 8, 4, 2, 1, 1/3, 1/9]`. | ||
|
||
</details> | ||
|
||
|
@@ -224,7 +216,7 @@ Hold times for the two harnesses can be extracted by running the command: | |
### Table 2: Quantitative Comparison | ||
|
||
Table 2 reports the resource usage of designs generated by Filament to ones generated by Aetherling and Reticle. | ||
This evaluation **requires** Vivado synthesis toolchains to be installed. | ||
This evaluation **requires** Vivado synthesis toolchain to be installed. | ||
As a sanity check, run `fud check` and ensure that the `synth-verilog` stage is correctly installed and the `vivado` binary is available. | ||
|
||
**TLDR**: Run the following command to generate synthesis results for each design mentioned in table 2: | ||
|
@@ -244,6 +236,17 @@ Each folder, except `filament-base` contains a `device.xdc` which defines the ta | |
Our script uses `fud` to orchestrate the execution. | ||
For Filament files, `fud` compiles them to Verilog and runs the synthesis toolchain while for the Aetherling benchmark, it just runs the synthesis toolchain directly. | ||
|
||
## (Optional) User Experience (10-15 minutes) | ||
|
||
Filament's core contribution is a type checker and a compiler that enables users to write safe and performant hardware designs. | ||
However, Filament's type is complex and, [following in the footsteps][rust-errs] of the Rust programming language, we believe it to be important that Filament generates good error messages. | ||
To this end, we invite reviewers to follow Filament's tutorial and play with the compiler to get a sense of the language tools. | ||
* Make sure `mdbook` is installed: `cargo install mdbook` | ||
* From the `filament-evaluation` repository, run `cd filament && mdbook serve` to start the documentation server | ||
* Open the documentation in a browser at `http://localhost:3000` and follow the tutorial | ||
* If you're using the VM, we've setup a port forwarding rule to forward port 3000 to port 3000 on the host machine so you can read the documentation on your machine. | ||
|
||
|
||
[virtualbox]: https://www.virtualbox.org/ | ||
[aeth-artifact]: https://dl.acm.org/do/10.1145/3395633/full/ | ||
[xilinx-account]: https://login.xilinx.com | ||
|
@@ -256,4 +259,5 @@ For Filament files, `fud` compiles them to Verilog and runs the synthesis toolch | |
[verismith]: https://yannherklotz.com/docs/fpga2020/verismith_paper.pdf | ||
[appliance-import]: https://docs.oracle.com/en/virtualization/virtualbox/6.0/user/ovf.html | ||
[reticle]: https://dl.acm.org/doi/abs/10.1145/3453483.3454075 | ||
[aetherling]: https://aetherling.org/ | ||
[aetherling]: https://aetherling.org/ | ||
[rust-errs]: https://rustc-dev-guide.rust-lang.org/diagnostics.html?highlight=diagnostics#diagnostic-output-style-guide |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters