Noir is an FPGA computer designed by Lone Dynamics Corporation.
This repo contains schematics, PCB layouts, pinouts, a 3D-printable case, example gateware and documentation.
Find more information on the Noir product page.
There is now a dual-core bitstream optimized for speed that significantly decreases boot time and adds a second RISC-V core.
In addition to updating to this bitstream (images/v0/noir_dual.bit
), make sure you copy the images/linux/noir_dual.dtb
file to the SD card and update boot.json
to use noir_dual.dtb
.
Noir has a JTAG interface and ships with a DFU bootloader that allows the included flash MMOD to be programmed over the USB-C port.
The DFU bootloader is available for 5 seconds after power-on, issuing a DFU command during this period will stop the boot process until the DFU device is detached. If no command is received the boot process will continue and the user gateware will be loaded.
Install dfu-util (Debian/Ubuntu):
$ sudo apt install dfu-util
Update the user gateware on the flash MMOD:
$ sudo dfu-util -a 0 -D image.bit
Detach the DFU device and continue the boot process:
$ sudo dfu-util -a 0 -e
It is possible to update the bootloader itself using DFU but you shouldn't attempt this unless you have a JTAG programmer (or another method to program the MMOD) available, in case you need to restore the bootloader.
These examples assume you're using a "USB Blaster" JTAG cable, see the header pinout below. You will need to have openFPGALoader installed.
Program the configuration SRAM:
openFPGALoader -c usb-blaster image.bit
Program the flash MMOD:
openFPGALoader -f -c usb-blaster images/bootloader/tinydfu_noir.bit
Building the blinky example requires Yosys, nextpnr-ecp5 and Project Trellis.
Assuming they are installed, you can simply type make
to build the gateware, which will be written to output/blinky.bin. You can then use openFPGALoader or dfu-util to write the gateware to the device.
See the Kakao Linux repo for the latest instructions.
Copy the files from the images/linux
directory to the root directory of a FAT-formatted MicroSD card.
Noir ships with LiteX gateware on the user gateware section of the MMOD that is compatible with these images. After several seconds the Linux penguin should appear on the screen (HDMI) followed by a login prompt.
Please follow the setup instructions in the linux-on-litex-vexriscv repo and then:
- Build the Linux-capable gateware:
$ cd linux-on-litex-vexriscv
$ ./make.py --board noir --uart-baudrate 115200 --build
$ ls build/noir
- Write the gateware to the MMOD using USB DFU:
$ sudo dfu-util -a 0 -D build/noir/gateware/noir.bit
-
Copy the device tree binary
build/noir/noir.dtb
to a FAT-formatted MicroSD card. -
Build the Linux kernel and root filesystem:
$ cd ..
$ git clone http://github.com/buildroot/buildroot
$ cd buildroot
$ make BR2_EXTERNAL=../linux-on-litex-vexriscv/buildroot/ litex_vexriscv_usbhost_defconfig
Optionally customize the kernel and buildroot packages:
$ make menuconfig
Build the kernel and rootfs:
$ make
$ ls output/images
-
Copy the
Image
androotfs.cpio
files from output/images to the MicroSD card. -
Copy the OpenSBI binary (included in this repo as
noir/images/linux/opensbi.bin
) to the MicroSD card. Alternatively, you can build this binary by following these instructions. -
Copy
noir/images/linux/boot.json
to the MicroSD card. -
Power-cycle Noir. After Linux has finished booting you should see a login prompt on the HDMI display.
If you haven't yet installed LiteX please see the LiteX quick start guide for details on installing LiteX.
Build the LiteX gateware:
$ cd litex-boards/litex_boards/targets
$ ./machdyne_noir.py --cpu-type=vexriscv --cpu-variant=lite --sys-clk-freq 40000000 --uart-baudrate 1000000 --uart-name serial --build
Program the LiteX gateware to SRAM over JTAG:
$ ./machdyne_noir.py --cable usb-blaster --load
Or program the LiteX gateware to flash over DFU:
$ sudo dfu-util -a 0 -D build/machdyne_noir/gateware/machdyne_noir.bit
The 3.3V JTAG header can be used to program the FPGA SRAM as well as the MMOD flash memory. It can also be used to provide power (5V) to the board.
1 2
3 4
5 6
Pin | Signal |
---|---|
1 | TCK |
2 | TDI |
3 | TDO |
4 | TMS |
5 | 5V0 |
6 | GND |
Revision | Notes |
---|---|
V0 | Initial version |
V1 | Work in progress; adds composite video DAC output to 3.5mm jack |
The contents of this repo are released under the Lone Dynamics Open License with the following exceptions:
-
The KiCad design files contain parts of the kicad-pmod library which is released under the Apache License, Version 2.0.
-
The KiCad design files may contain symbols and footprints released under other licenses; please contact us if we've failed to give proper attribution.
Note: You can use these designs for commercial purposes but we ask that instead of producing exact clones, that you either replace our trademarks and logos with your own or add your own next to ours.