FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LiteXによるSoC環境構築を試行する

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。

github.com

$ wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py
$ ./litex_setup.py --init --install --user --config=minimal
          __   _ __      _  __
         / /  (_) /____ | |/_/
        / /__/ / __/ -_)>  <
       /____/_/\__/\__/_/|_|
     Build your hardware, easily!
          LiteX Setup utility.

...
--- Logging error ---
Traceback (most recent call last):
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_internal/utils/logging.py", line 177, in emit
    self.console.print(renderable, overflow="ignore", crop=False, style=style)
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_vendor/rich/console.py", line 1673, in print
    extend(render(renderable, render_options))
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_vendor/rich/console.py", line 1305, in render
    for render_output in iter_render:
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_internal/utils/logging.py", line 134, in __rich_console__
    for line in lines:
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_vendor/rich/segment.py", line 249, in split_lines
    for segment in segments:
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_vendor/rich/console.py", line 1283, in render
    renderable = rich_cast(renderable)
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_vendor/rich/protocol.py", line 36, in rich_cast
    renderable = cast_method()
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_internal/self_outdated_check.py", line 130, in __rich__
    pip_cmd = get_best_invocation_for_this_pip()
  File "/home/msyksphinz/.local/lib/python3.8/site-packages/pip/_internal/utils/entrypoints.py", line 58, in get_best_invocation_for_this_pip
    if found_executable and os.path.samefile(
  File "/usr/lib/python3.8/genericpath.py", line 101, in samefile
    s2 = os.stat(f2)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.8'

あれ?とりあえずシンボリックリンクで解決してみる。

$ cd /usr/bin
$ sudo ln -s pip3 pip3.8
          __   _ __      _  __
         / /  (_) /____ | |/_/
        / /__/ / __/ -_)>  <
       /____/_/\__/\__/_/|_|
     Build your hardware, easily!
          LiteX Setup utility.

[   0.001] LiteX Setup auto-update...
[   0.309] LiteX Setup is up to date.
[   0.309] Initializing Git repositories...
[   0.309] --------------------------------
[   0.309] migen Git Repo already present.
[   0.309] litex Git Repo already present.
[   0.309] Installing Git repositories...
[   0.309] ------------------------------
[   0.309] Installing migen Git repository...
Obtaining file:///home/msyksphinz/work/litex/migen
  Preparing metadata (setup.py) ... done
Requirement already satisfied: colorama in /usr/lib/python3/dist-packages (from migen==0.9.2) (0.4.3)
Installing collected packages: migen
  Attempting uninstall: migen
    Found existing installation: migen 0.9.2
    Uninstalling migen-0.9.2:
      Successfully uninstalled migen-0.9.2
  Running setup.py develop for migen
Successfully installed migen

[notice] A new release of pip available: 22.2.2 -> 22.3.1
[notice] To update, run: python3 -m pip install --upgrade pip
[   1.102] Installing litex Git repository...
Obtaining file:///home/msyksphinz/work/litex/litex
  Preparing metadata (setup.py) ... done
Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from litex==0.0.0) (3.4)
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from litex==0.0.0) (2.22.0)
Installing collected packages: litex
  Attempting uninstall: litex
    Found existing installation: litex 0.0.0
    Uninstalling litex-0.0.0:
      Successfully uninstalled litex-0.0.0
  Running setup.py develop for litex
Successfully installed litex

[notice] A new release of pip available: 22.2.2 -> 22.3.1
[notice] To update, run: python3 -m pip install --upgrade pip

お、なんとなくうまくいった。

次に、ツールチェインのインストールとVexRiscvを実装してみる。

$ pip3 install meson ninja

どうもconfig=standard以上にしないとVexRiscvを使えないらしい

$ ./litex_setup.py --init --install --user --config=standard
$ litex_sim --cpu-type=vexriscv
[spdeeprom] loaded (addr = 0x0)
[xgmii_ethernet] loaded (0x55d41a151ef0)
[clocker] loaded
[ethernet] loaded (0x55d41a151ef0)
[gmii_ethernet] loaded (0x55d41a151ef0)
[serial2console] loaded (0x55d41a151ef0)
[serial2tcp] loaded (0x55d41a151ef0)
[clocker] sys_clk: freq_hz=1000000, phase_deg=0

        __   _ __      _  __
       / /  (_) /____ | |/_/
      / /__/ / __/ -_)>  <
     /____/_/\__/\__/_/|_|
   Build your hardware, easily!

 (c) Copyright 2012-2022 Enjoy-Digital
 (c) Copyright 2007-2015 M-Labs

 BIOS built on Dec  2 2022 23:49:49
 BIOS CRC passed (fc66119d)

 LiteX git sha1: fe7e70ba

--=============== SoC ==================--
CPU:            VexRiscv @ 1MHz
BUS:            WISHBONE 32-bit @ 4GiB
CSR:            32-bit data
ROM:            128KiB
SRAM:           8KiB

--============== Boot ==================--
Booting from serial...
Press Q or ESC to abort boot completely.
sL5DdSMmkekro
Timeout
No boot medium found

--============= Console ================--

litex>

とりあえず起動できた。