Compare commits
No commits in common. "12032433ed7b6ef3044cb636fef9c8086c58931a" and "3deb18c261c27238f9df8829cb991fcd4bef954b" have entirely different histories.
12032433ed
...
3deb18c261
11
README.md
11
README.md
@ -15,14 +15,7 @@ Softcore system-on-chip on the Lattice ECP5 Versa board, built with a 100% Veril
|
||||
* 100MHz clock frequency.
|
||||
* Runs a Rust "hello world" program.
|
||||
|
||||
Use nixpkgs 19.03. If you are unfamiliar with Nix and just installed it on another (non-NixOS) distribution, simply run:
|
||||
|
||||
```
|
||||
$ nix-channel --remove nixpkgs
|
||||
$ nix-channel --add https://nixos.org/channels/nixos-19.03 nixpkgs
|
||||
$ nix-channel --update
|
||||
|
||||
```
|
||||
Use nixpkgs unstable (known to work with ae71c13). Check https://nixbld.m-labs.hk/project/fpga for the status of the build with other nixpkgs versions.
|
||||
|
||||
Optional: set up the M-Labs key and binary substituter for Nix (otherwise Nix will recompile LLVM, rustc, etc. on your machine).
|
||||
Create the file ``~/.config/nix/nix.conf`` with the following contents:
|
||||
@ -34,8 +27,6 @@ trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDS
|
||||
|
||||
Run ``nix-build -A simplesoc_ecp5 release.nix``
|
||||
|
||||
You can also build manually and use your distribution's packages, but YMMV.
|
||||
|
||||
Bypass the ispCLOCK device using the jumpers on your board.
|
||||
|
||||
Create a ``versa.cfg`` file with:
|
||||
|
@ -1,21 +1,29 @@
|
||||
{ stdenv, rustc }:
|
||||
stdenv.mkDerivation {
|
||||
name = "rust-riscv32i-crates";
|
||||
src = rustc.src;
|
||||
phases = [ "unpackPhase" "buildPhase" ];
|
||||
buildPhase = ''
|
||||
destdir=$out/lib/rustlib/riscv32i-unknown-none-elf/lib/
|
||||
rustc="${rustc}/bin/rustc --out-dir ''${destdir} -L ''${destdir} --target riscv32i-unknown-none-elf -g -C opt-level=s --crate-type rlib"
|
||||
{ stdenv, rustc, fetchFromGitHub }:
|
||||
let
|
||||
compiler-builtins-src = fetchFromGitHub {
|
||||
owner = "rust-lang-nursery";
|
||||
repo = "compiler-builtins";
|
||||
rev = "0.1.12";
|
||||
sha256 = "0hkssvrh952kcz7w7aws3pqr05barg3qppqpji641b35xpbg9gyg";
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "rust-riscv32i-crates";
|
||||
src = rustc.src;
|
||||
phases = [ "unpackPhase" "buildPhase" ];
|
||||
buildPhase = ''
|
||||
destdir=$out/lib/rustlib/riscv32i-unknown-none-elf/lib/
|
||||
rustc="${rustc}/bin/rustc --out-dir ''${destdir} -L ''${destdir} --target riscv32i-unknown-none-elf -g -C opt-level=s --crate-type rlib"
|
||||
|
||||
mkdir -p ''${destdir}
|
||||
export RUSTC_BOOTSTRAP=1
|
||||
''${rustc} --crate-name core src/libcore/lib.rs
|
||||
''${rustc} --crate-name compiler_builtins src/libcompiler_builtins/src/lib.rs --cfg 'feature="compiler-builtins"' --cfg 'feature="mem"'
|
||||
'';
|
||||
# ''${rustc} --crate-name alloc src/liballoc/lib.rs
|
||||
# ''${rustc} --crate-name libc ${./libc_mini.rs}
|
||||
# ''${rustc} --crate-name unwind src/libunwind/lib.rs
|
||||
# ''${rustc} --crate-name std src/libstd/lib.rs
|
||||
# ''${rustc} -Cpanic=abort --crate-name panic_abort src/libpanic_abort/lib.rs
|
||||
# ''${rustc} -Cpanic=unwind --crate-name panic_unwind src/libpanic_unwind/lib.rs --cfg llvm_libunwind
|
||||
}
|
||||
mkdir -p ''${destdir}
|
||||
export RUSTC_BOOTSTRAP=1
|
||||
''${rustc} --crate-name core src/libcore/lib.rs
|
||||
''${rustc} --crate-name compiler_builtins ${compiler-builtins-src}/src/lib.rs --cfg 'feature="compiler-builtins"' --cfg 'feature="mem"'
|
||||
'';
|
||||
# ''${rustc} --crate-name alloc src/liballoc/lib.rs
|
||||
# ''${rustc} --crate-name libc ${./libc_mini.rs}
|
||||
# ''${rustc} --crate-name unwind src/libunwind/lib.rs
|
||||
# ''${rustc} --crate-name std src/libstd/lib.rs
|
||||
# ''${rustc} -Cpanic=abort --crate-name panic_abort src/libpanic_abort/lib.rs
|
||||
# ''${rustc} -Cpanic=unwind --crate-name panic_unwind src/libpanic_unwind/lib.rs --cfg llvm_libunwind
|
||||
}
|
||||
|
@ -7,8 +7,6 @@ rustPlatform.buildRustPackage rec {
|
||||
src = ./.;
|
||||
cargoSha256 = "0kf2pnfylfmzm0qvi4jfci43qvrnj1v5f037sb9zpvfqyddhdffl";
|
||||
|
||||
phases = ["unpackPhase" "buildPhase" "installPhase"];
|
||||
|
||||
buildPhase = ''
|
||||
export CARGO_HOME=$(mktemp -d cargo-home.XXX)
|
||||
export RUSTFLAGS="-L ${rust-riscv32i-crates}/lib/rustlib/riscv32i-unknown-none-elf/lib -C linker=${binutils-riscv32}/bin/riscv32-unknown-elf-ld -C link-arg=-Tlink.x"
|
||||
|
68
overlay.nix
68
overlay.nix
@ -1,73 +1,5 @@
|
||||
self: super:
|
||||
rec {
|
||||
yosys = super.yosys.overrideAttrs(oa: rec {
|
||||
name = "yosys-${version}";
|
||||
version = "2019-07-27";
|
||||
srcs = [
|
||||
(super.fetchFromGitHub {
|
||||
owner = "yosyshq";
|
||||
repo = "yosys";
|
||||
rev = "6538671c84a12114a991d59569eede3e0d368758";
|
||||
sha256 = "1l6v94a9vh9krmfsmd3v8l8xciwf028xvg93qf80s8a75djm7bc3";
|
||||
name = "yosys";
|
||||
})
|
||||
|
||||
# NOTE: the version of abc used here is synchronized with
|
||||
# the one in the yosys Makefile of the version above;
|
||||
# keep them the same for quality purposes.
|
||||
(super.fetchFromGitHub {
|
||||
owner = "berkeley-abc";
|
||||
repo = "abc";
|
||||
rev = "5776ad07e7247993976bffed4802a5737c456782";
|
||||
sha256 = "1la4idmssg44rp6hd63sd5vybvs3vr14yzvwcg03ls37p39cslnl";
|
||||
name = "yosys-abc";
|
||||
})
|
||||
];
|
||||
buildInputs = oa.buildInputs ++ [ super.zlib ];
|
||||
});
|
||||
nextpnr = super.nextpnr.overrideAttrs(oa: rec {
|
||||
name = "nextpnr-${version}";
|
||||
version = "2019-07-22";
|
||||
src = super.fetchFromGitHub {
|
||||
owner = "yosyshq";
|
||||
repo = "nextpnr";
|
||||
rev = "ba050c21b94e816f9dd69f69b23ad5105858f401";
|
||||
sha256 = "1wxsv1lcbi6bvv5vryvjz9mj530iva85wh6b6pvnfff2i4yc3p9q";
|
||||
};
|
||||
buildInputs = oa.buildInputs ++ [ super.eigen ];
|
||||
cmakeFlags = oa.cmakeFlags ++ [ "-DUSE_OPENMP=ON" ];
|
||||
});
|
||||
icestorm = super.icestorm.overrideAttrs(oa: rec {
|
||||
name = "icestorm-${version}";
|
||||
version = "2019-07-03";
|
||||
src = super.fetchFromGitHub {
|
||||
owner = "cliffordwolf";
|
||||
repo = "icestorm";
|
||||
rev = "792cef084a751e32f541332feb4905f8e49e9943";
|
||||
sha256 = "115qmgcz5ndw4z8ivk1cdlz6i2dzhq195gr8y4fjrjcb5jlacz23";
|
||||
};
|
||||
});
|
||||
trellis = super.trellis.overrideAttrs(oa: rec {
|
||||
name = "trellis-${version}";
|
||||
version = "2019-07-18";
|
||||
srcs = [
|
||||
(super.fetchFromGitHub {
|
||||
owner = "symbiflow";
|
||||
repo = "prjtrellis";
|
||||
rev = "b27c0da5d20a4c105fe9be2b5f8d859316613f44";
|
||||
sha256 = "12jcs64agv5yhqq4zwjp2vd9y248608hz1gj187g1cfqrv0yc8d5";
|
||||
name = "trellis";
|
||||
})
|
||||
(super.fetchFromGitHub {
|
||||
owner = "symbiflow";
|
||||
repo = "prjtrellis-db";
|
||||
rev = "b4d626b6402c131e9a035470ffe4cf33ccbe7986";
|
||||
sha256 = "0k26lq6c049ja8hhqcljwjb1y5k4gcici23l2n86gyp83jr03ilx";
|
||||
name = "database";
|
||||
})
|
||||
];
|
||||
});
|
||||
|
||||
llvm_7 = super.llvm_7.overrideAttrs(oa: {
|
||||
name = oa.name + "-riscv";
|
||||
cmakeFlags = oa.cmakeFlags ++ ["-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=RISCV"];
|
||||
|
@ -3,7 +3,7 @@ let
|
||||
pkgs = import <nixpkgs> { overlays = [ (import ./overlay.nix) ]; };
|
||||
hx = import ./default.nix { inherit pkgs; };
|
||||
jobs = hx // {
|
||||
inherit (pkgs) yosys nextpnr icestorm trellis llvm_7 rustc cargo cargo-vendor;
|
||||
inherit (pkgs) llvm_7 rustc cargo cargo-vendor;
|
||||
|
||||
helloworld_ecp5 = import ./examples/helloworld_ecp5.nix { inherit pkgs hx; };
|
||||
helloworld_kintex7 = import ./examples/helloworld_kintex7.nix { inherit pkgs hx; };
|
||||
|
Loading…
Reference in New Issue
Block a user