+++
title = "Digilent Atlys (Xilinx FPGA)"
date = "2026-02-13T09:30:45+01:00"
type = "index"

+++

+ Architecture: Sparc
+ CPU: LEON3 50 Mhz
+ RAM: 128 MB
+ Ethernet: GRETH
+ 1xUSB 2.0
+ HDMI
+ Programming via Micro-USB
+ Power supply 5V 4A

Jumper 11 must be set to program the Bitstream.
Be sure that Switch 7 is set to ON for Debug Support Unit.

You can find a ready-to-go Bitstream @gaisler.com:

https://download.gaisler.com/products/GRLIB/bin/grlib-bitfiles-gpl-2025.2.tar.gz

To program the Bitstream use following command:

$ sudo djtgcfg enum
$ sudo djtgcfg prog -d Atlys -i 0 -f leon3mp.bit

If you want to create your own Bitstream you need to get Xilinx/AMD ISE 14.7 for Linux.
For that you also need a free License from Xilinx/AMD.

To upload a Linux Kernel (f.e. with NFSRoot enabled) you need to convert the
vmlinux from OpenADK with mklinuximg (available from gaisler.com).
Eventually you need the Toolchain from gaisler in your PATH:

$ cd /opt/mklinimg
$ ./mklinuximg /home/wbx/leon3/build_digilent-atlys_uclibc-ng_leon3/linux/vmlinux /home/wbx/kernel -cmdline "console=ttyS0,38400 ip=dhcp root=/dev/nfs nfsroot=192.168.1.254:/srv/nfs/leon3"

Then you can load the kernel into DDRAM via GRMON4 (evaluation version available from gaisler.com):

$ ./grmon -digilent -nb -u
```
grmon4> load kernel
          40000000 .text              3.8kB /   3.8kB   [===============>] 100%
          40000f40 .data              128B              [===============>] 100%
          40004000 .vmlinux           4.1MB /   4.1MB   [===============>] 100%
          4041b4d0 .ps_move_startu   35.8kB /  35.8kB   [===============>] 100%
          40424430 .ps_move_prom      5.0kB /   5.0kB   [===============>] 100%
  Total size: 4.13MB (473.12kbit/s)
  Entry point 0x40000000
  Image kernel loaded

grmon4> run

``` 

![Digilent Atlys](/img/digilent-atlys.jpg)

Dmesg:
```
[    0.000000] PROMLIB: Sun Boot Prom Version 0 Revision 0
[    0.000000] Linux version 6.12.69-1 (wbx@fluor) (sparc-openadk-linux-uclibc-gcc (GCC) 15.2.0, GNU ld (GNU Binutils) 2.46.0.20260210) #17 Fri Feb 13 10:10:02 CET 2026
[    0.000000] printk: legacy bootconsole [earlyprom0] enabled
[    0.000000] ARCH: LEON
[    0.000000] TYPE: Leon3 System-on-a-Chip
[    0.000000] Ethernet address: 00:00:7c:cc:01:45
[    0.000000] CACHE: 2-way associative cache, set size 4k
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000040000000-0x0000000047ff7fff]
[    0.000000]   Normal   empty
[    0.000000]   HighMem  empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040000000-0x0000000047ff7fff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000047ff7fff]
[    0.000000] OF stdout device is: /a::a
[    0.000000] PROM: Built device tree with 23670 bytes of memory.
[    0.000000] Booting Linux...
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Kernel command line: console=ttyS0,38400 ip=dhcp root=/dev/nfs nfsroot=192.168.1.254:/srv/nfs/leon3 
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] Sorting __ex_table...
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 32760
[    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 64
[    0.000000] printk: legacy console [ttyS0] enabled
[    0.000000] printk: legacy bootconsole [earlyprom0] disabled
[    0.000000] clocksource: timer_cs: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns
[    0.004000] Calibrating delay loop... 49.08 BogoMIPS (lpj=98176)
[    0.056000] pid_max: default: 32768 minimum: 301
[    0.064000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.068000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.096000] Memory: 122820K/131040K available (3063K kernel code, 500K rwdata, 472K rodata, 140K init, 205K bss, 7816K reserved, 0K cma-reserved, 0K highmem)
[    0.104000] devtmpfs: initialized
[    0.140000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.148000] futex hash table entries: 256 (order: 0, 3072 bytes, linear)
[    0.172000] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.212000] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[    0.220000] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.256000] clocksource: Switched to clocksource timer_cs
[    0.296000] NET: Registered PF_INET protocol family
[    0.308000] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.328000] tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.332000] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.336000] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.344000] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.348000] TCP: Hash tables configured (established 1024 bind 1024)
[    0.352000] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.356000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.360000] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.376000] RPC: Registered named UNIX socket transport module.
[    0.380000] RPC: Registered udp transport module.
[    0.384000] RPC: Registered tcp transport module.
[    0.388000] RPC: Registered tcp-with-tls transport module.
[    0.392000] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.408000] workingset: timestamp_bits=30 max_order=15 bucket_order=0
[    0.640000] Serial: GRLIB APBUART driver
[    0.652000] ffd12f78: ttyS0 at MMIO 0x80000100 (irq = 4, base_baud = 3125000) is a GRLIB/APBUART
[    0.660000] grlib-apbuart at 0x80000100, irq 4
[    0.728000] NET: Registered PF_PACKET protocol family
[    0.732000] leon: power management initialized
[    1.000000] Sending DHCP requests ., OK
[    1.020000] IP-Config: Got DHCP answer from 192.168.1.254, my address is 192.168.1.3
[    1.024000] IP-Config: Complete:
[    1.028000]      device=eth0, hwaddr=00:00:7c:cc:01:45, ipaddr=192.168.1.3, mask=255.255.255.0, gw=192.168.1.254
[    1.036000]      host=192.168.1.3, domain=, nis-domain=(none)
[    1.040000]      bootserver=192.168.1.254, rootserver=192.168.1.254, rootpath=
[    1.040000]      nameserver0=192.168.1.254
[    1.396000] VFS: Mounted root (nfs filesystem) readonly on device 0:13.
[    1.404000] devtmpfs: mounted
[    1.412000] Freeing unused kernel image (initmem) memory: 140K
[    1.416000] This architecture does not have kernel memory protection.
[    1.420000] Run /sbin/init as init process
[    1.424000]   with arguments:
[    1.424000]     /sbin/init
[    1.424000]   with environment:
[    1.424000]     HOME=/
[    1.424000]     TERM=linux
[   82.996000] random: crng init done
```

Have fun!
