From 63d392b21ca2ff1865654c49268db87e289ab893 Mon Sep 17 00:00:00 2001 From: Filip Kokosinski Date: Tue, 15 Dec 2020 10:06:43 +0100 Subject: [PATCH 1/7] xc7: add picorv32 and vexriscv litex example Signed-off-by: Filip Kokosinski Signed-off-by: Alessandro Comodi --- .github/scripts/build-examples.sh | 8 +- .github/workflows/sphinx-tuttest.yml | 10 ++ docs/building-examples.rst | 3 + docs/images/litex-picorv32-console.gif | Bin 0 -> 119820 bytes xc7/litex_demo/.gitignore | 3 + xc7/litex_demo/README.rst | 71 +++++++++++ xc7/litex_demo/arty.py | 156 +++++++++++++++++++++++++ xc7/litex_demo/requirements.txt | 33 ++++++ 8 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 docs/images/litex-picorv32-console.gif create mode 100644 xc7/litex_demo/.gitignore create mode 100644 xc7/litex_demo/README.rst create mode 100755 xc7/litex_demo/arty.py create mode 100644 xc7/litex_demo/requirements.txt diff --git a/.github/scripts/build-examples.sh b/.github/scripts/build-examples.sh index e45ab3a..576d08c 100755 --- a/.github/scripts/build-examples.sh +++ b/.github/scripts/build-examples.sh @@ -47,7 +47,7 @@ shift examples="$@" if [ "$fpga_family" == "xc7" -a -z "$examples" ]; then - examples="counter picosoc litex_linux" + examples="counter picosoc litex litex_linux" elif [ "$fpga_family" == "eos-s3" -a -z "$examples" ]; then examples="counter" fi @@ -66,6 +66,12 @@ if [ "$fpga_family" = "xc7" ]; then "picosoc") snippets="${snippets} xc7/picosoc_demo/README.rst:example-picosoc-*-group" ;; + "litex") + tuttest_exec xc7/litex_demo/README.rst example-litex-dir + tuttest_exec xc7/litex_demo/README.rst example-litex-req + tuttest_exec xc7/litex_demo/README.rst example-litex_picorv32-*-group + tuttest_exec xc7/litex_demo/README.rst example-litex_vexriscv-*-group + ;; "litex_linux") snippets="${snippets} xc7/linux_litex_demo/README.rst:example-litex-deps,example-litex-*-group" ;; diff --git a/.github/workflows/sphinx-tuttest.yml b/.github/workflows/sphinx-tuttest.yml index 9fc2ac8..6128988 100644 --- a/.github/workflows/sphinx-tuttest.yml +++ b/.github/workflows/sphinx-tuttest.yml @@ -40,6 +40,15 @@ jobs: - {fpga-fam: "xc7", os: "debian", os-version: "bullseye", example: "picosoc"} - {fpga-fam: "xc7", os: "debian", os-version: "sid", example: "picosoc"} + - {fpga-fam: "xc7", os: "ubuntu", os-version: "xenial", example: "litex"} + - {fpga-fam: "xc7", os: "ubuntu", os-version: "bionic", example: "litex"} + - {fpga-fam: "xc7", os: "ubuntu", os-version: "focal", example: "litex"} + - {fpga-fam: "xc7", os: "centos", os-version: "7", example: "litex"} + - {fpga-fam: "xc7", os: "centos", os-version: "8", example: "litex"} + - {fpga-fam: "xc7", os: "debian", os-version: "buster", example: "litex"} + - {fpga-fam: "xc7", os: "debian", os-version: "bullseye", example: "litex"} + - {fpga-fam: "xc7", os: "debian", os-version: "sid", example: "litex"} + - {fpga-fam: "xc7", os: "ubuntu", os-version: "xenial", example: "litex_linux"} - {fpga-fam: "xc7", os: "ubuntu", os-version: "bionic", example: "litex_linux"} - {fpga-fam: "xc7", os: "ubuntu", os-version: "focal", example: "litex_linux"} @@ -48,6 +57,7 @@ jobs: - {fpga-fam: "xc7", os: "debian", os-version: "buster", example: "litex_linux"} - {fpga-fam: "xc7", os: "debian", os-version: "bullseye", example: "litex_linux"} - {fpga-fam: "xc7", os: "debian", os-version: "sid", example: "litex_linux"} + env: LANG: "en_US.UTF-8" DEBIAN_FRONTEND: "noninteractive" diff --git a/docs/building-examples.rst b/docs/building-examples.rst index 3e7b0e2..1b15f4e 100644 --- a/docs/building-examples.rst +++ b/docs/building-examples.rst @@ -64,6 +64,9 @@ Enter the directory that contains examples for Xilinx 7-Series FPGAs: .. jinja:: xc7_picosoc_demo :file: templates/example.jinja +.. jinja:: xc7_litex_demo + :file: templates/example.jinja + .. jinja:: xc7_linux_litex_demo :file: templates/example.jinja diff --git a/docs/images/litex-picorv32-console.gif b/docs/images/litex-picorv32-console.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0caa3113425cd14062056fd7032e2ac1264f208 GIT binary patch literal 119820 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 SoC. It also includes DDR +controller. First, enter this example's directory: + +.. code-block:: bash + :name: example-litex-dir + + cd litex_demo + +Install the litex dependencies with the following: + +.. code-block:: bash + :name: example-litex-req + + pip install -r requirements.txt + +There are multiple CPU types supported, choose one from the below commands to generate the design and build it. + +**Picorv32** + +.. code-block:: bash + :name: example-litex_picorv32-a35t-group + + ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/picorv32/arty_35 --board-variant a7-35 --build + +.. code-block:: bash + :name: example-litex_picorv32-a100t-group + + ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/picorv32/arty_100 --board-variant a7-100 --build + +**VexRiscv** + +.. code-block:: bash + :name: example-litex_vexriscv-a35t-group + + ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/vexriscv/arty_35 --board-variant a7-35 --build + +.. code-block:: bash + :name: example-litex_vexriscv-a100t-group + + ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/vexriscv/arty_100 --board-variant a7-100 --build + +Depending on which board and CPU-type you selected, the bitstream is loacted in: + +.. code-block:: bash + + cd build///gateware + +Now you can upload the design with: + +.. code-block:: bash + + openocd -f ${INSTALL_DIR}/${FPGA_FAM}/conda/envs/${FPGA_FAM}/share/openocd/scripts/board/digilent_arty.cfg -c "init; pld load 0 top.bit; exit" + +.. note:: + + This example uses baud rate of ``1000000`` by default. + +You should observe the following line in the OpenOCD output + +.. code-block:: bash + + Info : JTAG tap: xc7.tap tap/device found: 0x0362d093 (mfg: 0x049 (Xilinx), part: 0x362d, ver: 0x0) + +In the ``picocom`` terminal, you should observe the following output: + +.. image:: ../../docs/images/litex-picorv32-console.gif + :align: center + :width: 80% diff --git a/xc7/litex_demo/arty.py b/xc7/litex_demo/arty.py new file mode 100755 index 0000000..9cdc667 --- /dev/null +++ b/xc7/litex_demo/arty.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +# +# This file is part of LiteX. +# +# Copyright (c) 2015-2019 Florent Kermarrec +# Copyright (c) 2020 Antmicro +# SPDX-License-Identifier: BSD-2-Clause + +import os +import argparse + +from migen import * + +from litex.boards.platforms import arty +from litex.build.xilinx.vivado import vivado_build_args, vivado_build_argdict + +from litex.soc.cores.clock import * +from litex.soc.integration.soc_core import * +from litex.soc.integration.soc_sdram import * +from litex.soc.integration.builder import * +from litex.soc.cores.led import LedChaser + +from litedram.modules import MT41K128M16 +from litedram.phy import s7ddrphy + +from liteeth.phy.mii import LiteEthPHYMII + +# CRG ---------------------------------------------------------------------------------------------- + +class _CRG(Module): + def __init__(self, platform, sys_clk_freq): + self.rst = Signal() + self.clock_domains.cd_sys = ClockDomain() + self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) + self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True) + self.clock_domains.cd_idelay = ClockDomain() + self.clock_domains.cd_eth = ClockDomain() + + # # # + + self.submodules.pll = pll = S7PLL(speedgrade=-1) + self.comb += pll.reset.eq(~platform.request("cpu_reset") | self.rst) + pll.register_clkin(platform.request("clk100"), 100e6) + pll.create_clkout(self.cd_sys, sys_clk_freq) + pll.create_clkout(self.cd_sys4x, 4*sys_clk_freq) + pll.create_clkout(self.cd_sys4x_dqs, 4*sys_clk_freq, phase=90) + pll.create_clkout(self.cd_idelay, 200e6) + pll.create_clkout(self.cd_eth, 25e6) + + self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_idelay) + + self.comb += platform.request("eth_ref_clk").eq(self.cd_eth.clk) + +# BaseSoC ------------------------------------------------------------------------------------------ + +class BaseSoC(SoCCore): + def __init__( + self, + toolchain="vivado", + sys_clk_freq=int(100e6), + with_ethernet=False, + with_etherbone=False, + ident_version=True, + board_variant="a7-35", + **kwargs + ): + platform = arty.Platform(variant=board_variant, toolchain=toolchain) + + # SoCCore ---------------------------------------------------------------------------------- + SoCCore.__init__(self, platform, sys_clk_freq, + ident = "LiteX SoC on Arty A7", + ident_version = ident_version, + **kwargs) + + # CRG -------------------------------------------------------------------------------------- + self.submodules.crg = _CRG(platform, sys_clk_freq) + + # DDR3 SDRAM ------------------------------------------------------------------------------- + if not self.integrated_main_ram_size: + self.submodules.ddrphy = s7ddrphy.A7DDRPHY(platform.request("ddram"), + memtype = "DDR3", + nphases = 4, + sys_clk_freq = sys_clk_freq) + self.add_csr("ddrphy") + self.add_sdram("sdram", + phy = self.ddrphy, + module = MT41K128M16(sys_clk_freq, "1:4"), + origin = self.mem_map["main_ram"], + size = kwargs.get("max_sdram_size", 0x40000000), + l2_cache_size = kwargs.get("l2_size", 8192), + l2_cache_min_data_width = kwargs.get("min_l2_data_width", 128), + l2_cache_reverse = True + ) + + # Ethernet / Etherbone --------------------------------------------------------------------- + if with_ethernet or with_etherbone: + self.submodules.ethphy = LiteEthPHYMII( + clock_pads = self.platform.request("eth_clocks"), + pads = self.platform.request("eth")) + self.add_csr("ethphy") + if with_ethernet: + self.add_ethernet(phy=self.ethphy) + if with_etherbone: + self.add_etherbone(phy=self.ethphy) + + # Leds ------------------------------------------------------------------------------------- + self.submodules.leds = LedChaser( + pads = platform.request_all("user_led"), + sys_clk_freq = sys_clk_freq) + self.add_csr("leds") + +# Build -------------------------------------------------------------------------------------------- + +def main(): + parser = argparse.ArgumentParser(description="LiteX SoC on Arty A7") + parser.add_argument("--toolchain", default="vivado", help="Toolchain use to build (default: vivado)") + parser.add_argument("--board-variant", default="a7-35", help="Board variant (default: a7-35)") + parser.add_argument("--build", action="store_true", help="Build bitstream") + parser.add_argument("--load", action="store_true", help="Load bitstream") + parser.add_argument("--sys-clk-freq", default=100e6, help="System clock frequency (default: 100MHz)") + parser.add_argument("--with-ethernet", action="store_true", help="Enable Ethernet support") + parser.add_argument("--with-etherbone", action="store_true", help="Enable Etherbone support") + parser.add_argument("--with-spi-sdcard", action="store_true", help="Enable SPI-mode SDCard support") + parser.add_argument("--with-sdcard", action="store_true", help="Enable SDCard support") + parser.add_argument("--no-ident-version", action="store_false", help="Disable build time output") + builder_args(parser) + soc_sdram_args(parser) + vivado_build_args(parser) + args = parser.parse_args() + + assert not (args.with_ethernet and args.with_etherbone) + soc = BaseSoC( + toolchain = args.toolchain, + sys_clk_freq = int(float(args.sys_clk_freq)), + with_ethernet = args.with_ethernet, + with_etherbone = args.with_etherbone, + ident_version = args.no_ident_version, + board_variant = args.board_variant, + **soc_sdram_argdict(args) + ) + assert not (args.with_spi_sdcard and args.with_sdcard) + soc.platform.add_extension(arty._sdcard_pmod_io) + if args.with_spi_sdcard: + soc.add_spi_sdcard() + if args.with_sdcard: + soc.add_sdcard() + builder = Builder(soc, **builder_argdict(args)) + builder_kwargs = vivado_build_argdict(args) if args.toolchain == "vivado" else {} + builder.build(**builder_kwargs, run=args.build) + + if args.load: + prog = soc.platform.create_programmer() + prog.load_bitstream(os.path.join(builder.gateware_dir, soc.build_name + ".bit")) + +if __name__ == "__main__": + main() diff --git a/xc7/litex_demo/requirements.txt b/xc7/litex_demo/requirements.txt new file mode 100644 index 0000000..e1d2cd6 --- /dev/null +++ b/xc7/litex_demo/requirements.txt @@ -0,0 +1,33 @@ +# LiteX +-e git+https://github.com/enjoy-digital/litex@4092180662ec62cf28b9283a020f1ff7f0892c19#egg=litex +-e git+https://github.com/enjoy-digital/litedram@103072c68a2e3ec9c81f198e50e5427e5780580c#egg=litedram +-e git+https://github.com/enjoy-digital/liteeth@617400fe9e5b902e6bfd39a7c32ef5b255bc10c0#egg=liteeth +-e git+https://github.com/enjoy-digital/liteiclink@8b29505096406d242685bf71b16a0ce4e4be54aa#egg=liteiclink +-e git+https://github.com/enjoy-digital/litejesd204b@7228931a2697ba2694e563028acc399c57b88dbb#egg=litejesd204b +-e git+https://github.com/enjoy-digital/litepcie@579c5b423b2442fd224853a448e66189b68202d0#egg=litepcie +-e git+https://github.com/enjoy-digital/litesata@a9a4c5845a43bdfb81570bfd2b8869c7f4e18350#egg=litesata +-e git+https://github.com/enjoy-digital/litescope@f78400aa29cb328641fb28e1aba097afcb25c16b#egg=litescope +-e git+https://github.com/enjoy-digital/litesdcard@0cb5ab5bab0bba9c3f3c900837bd39e745465aa2#egg=litesdcard +-e git+https://github.com/enjoy-digital/litevideo@41f30143075ece3fff5c33a332ed067d1837cbb3#egg=litevideo +-e git+https://github.com/litex-hub/litehyperbus@5282d5167c4c91984b614febdb062450b26aec52#egg=litehyperbus +-e git+https://github.com/litex-hub/litespi@024326c423b053e4cff9a30932c7b38fe38d252d#egg=litespi +-e git+https://github.com/litex-hub/litex-boards@e1f9fd1a25de353ca7682a745955a5fc4db9c81d#egg=litex_boards + +# Migen and nMigen +-e git+https://github.com/m-labs/migen@9a37a588121d9ba72e723bc6eeeb4b0195d7b98c#egg=migen +-e git+https://github.com/nmigen/nmigen@b466b724fe9f62140062afc9ecde9a920a261487#egg=nmigen + +# Pythondata for different CPU types +-e git+https://github.com/litex-hub/pythondata-cpu-blackparrot@4264d9b0ee43dbb04a94260a6cf9063202996537#egg=pythondata_cpu_blackparrot +-e git+https://github.com/litex-hub/pythondata-cpu-cv32e40p@b8fe3c41bfe87eb382449bcbf0f7f0e061d45e08#egg=pythondata_cpu_cv32e40p +-e git+https://github.com/litex-hub/pythondata-cpu-lm32@63440000de23714f602637f772559980c0f6678e#egg=pythondata_cpu_lm32 +-e git+https://github.com/litex-hub/pythondata-cpu-microwatt@ba76652320e9dc23d9b2c64a62d0a752c870a215#egg=pythondata_cpu_microwatt +-e git+https://github.com/litex-hub/pythondata-cpu-minerva@2a69b7f3051df7a59d417b08bde963b9e6b8396b#egg=pythondata_cpu_minerva +-e git+https://github.com/litex-hub/pythondata-cpu-mor1kx@ff018922b07fd0e55d92f0d9ba58ee4d0e0d8a5d#egg=pythondata_cpu_mor1kx +-e git+https://github.com/litex-hub/pythondata-cpu-picorv32@8bdce32bf6db95df397ea8f9904e38ae9cae5641#egg=pythondata_cpu_picorv32 +-e git+https://github.com/litex-hub/pythondata-cpu-rocket@e5bbab953c9265e351600a783be70065708a1c40#egg=pythondata_cpu_rocket +-e git+https://github.com/litex-hub/pythondata-cpu-serv@8976da102013beeb07d30f7b9af7611bcfdf5a7f#egg=pythondata_cpu_serv +-e git+https://github.com/litex-hub/pythondata-cpu-vexriscv@16c5dded21ca50b73a2bdafab10eeef2ca816818#egg=pythondata_cpu_vexriscv +-e git+https://github.com/litex-hub/pythondata-cpu-vexriscv-smp@c7cf25663a90a00772d1fc8f55028e423cbde770#egg=pythondata_cpu_vexriscv_smp +-e git+https://github.com/litex-hub/pythondata-misc-tapcfg@4befb8bc3dd0bc30e7554d0d30a5f99c9bec0fad#egg=pythondata_misc_tapcfg +-e git+https://github.com/litex-hub/pythondata-software-compiler_rt@fcb03245613ccf3079cc833a701f13d0beaae09d#egg=pythondata_software_compiler_rt From 832bbfb67db951aa78325204b482cbc52ee5a9cc Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 21 Dec 2020 13:24:50 +0100 Subject: [PATCH 2/7] env: add riscv64 unknown elf Signed-off-by: Alessandro Comodi --- xc7/environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/xc7/environment.yml b/xc7/environment.yml index ccdc3bf..3d6392f 100644 --- a/xc7/environment.yml +++ b/xc7/environment.yml @@ -8,6 +8,7 @@ dependencies: - litex-hub::prjxray-db=0.0_248_g2e51ad3=20210312_125539 - litex-hub::vtr-optimized=8.0.0_3445_ga806b1609=20210312_125539 - litex-hub::yosys=0.9_5266_g0fb4224e=20210301_104249_py37 + - litex-hub::gcc-riscv64-elf-newlib=9.2.0=20201119_154229 - make - lxml - simplejson From dc44e93754f065adf9d851a1696efb3b2e117053 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 21 Dec 2020 14:28:06 +0100 Subject: [PATCH 3/7] xc7: linux_litex: remove litex example Signed-off-by: Alessandro Comodi --- xc7/linux_litex_demo/README.rst | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/xc7/linux_litex_demo/README.rst b/xc7/linux_litex_demo/README.rst index 0f8f899..9ab9acd 100644 --- a/xc7/linux_litex_demo/README.rst +++ b/xc7/linux_litex_demo/README.rst @@ -5,20 +5,6 @@ This example design features a Linux-capable SoC based around VexRiscv soft CPU. It also includes DDR and Ethernet controllers. To build the litex example, run the following commands: -.. code-block:: bash - :name: example-litex-deps - - wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py - chmod +x litex_setup.py - ./litex_setup.py init - ./litex_setup.py install - wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14.tar.gz - tar -xf riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14.tar.gz - export PATH=$PATH:$PWD/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14/bin/ - cd litex-boards/litex_boards/targets - ./digilent_arty.py --toolchain symbiflow --cpu-type vexriscv --build - cd - - To build the linux-litex-demo example, depending on your hardware, run: .. code-block:: bash From a0b165eb902a07d4e2c06d55f8c01226c50ae4b7 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 21 Dec 2020 15:11:34 +0100 Subject: [PATCH 4/7] xc7: added litex to readme Signed-off-by: Alessandro Comodi --- xc7/README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/xc7/README.rst b/xc7/README.rst index 72f9c5a..601fc6e 100644 --- a/xc7/README.rst +++ b/xc7/README.rst @@ -3,6 +3,7 @@ SymbiFlow Toolchain Examples for Xilinx 7 Series #. ``counter`` - simple 4-bit counter driving LEDs. The design targets the `Basys3 board `__, the `Arty boards `__, and the `Zybo Z7 board `__ #. ``picosoc`` - `picorv32 `__ based SoC. The design targets the `Basys3 board `__. +#. ``litex`` - Series of `LiteX-based `__ designs, that feature different CPU types and LiteX modules. #. ``linux_litex`` - `LiteX `__ based system with Linux capable `VexRiscv core `__. The design includes `DDR `__ and `Ethernet `__ controllers. The design targets the `Arty boards `__. The Linux images for the ``linux_litex`` example can be built following the `linux on litex vexriscv `__ instructions. From 22358ff170c31b558b6425a4b25e591800ce73a5 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Tue, 29 Dec 2020 11:09:26 +0100 Subject: [PATCH 5/7] litex: use default baud rate of 115200 Signed-off-by: Alessandro Comodi --- xc7/litex_demo/README.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xc7/litex_demo/README.rst b/xc7/litex_demo/README.rst index f63838a..5ef7cde 100644 --- a/xc7/litex_demo/README.rst +++ b/xc7/litex_demo/README.rst @@ -15,7 +15,7 @@ Install the litex dependencies with the following: :name: example-litex-req pip install -r requirements.txt - + There are multiple CPU types supported, choose one from the below commands to generate the design and build it. **Picorv32** @@ -23,24 +23,24 @@ There are multiple CPU types supported, choose one from the below commands to ge .. code-block:: bash :name: example-litex_picorv32-a35t-group - ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/picorv32/arty_35 --board-variant a7-35 --build + ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_35 --board-variant a7-35 --build .. code-block:: bash :name: example-litex_picorv32-a100t-group - ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/picorv32/arty_100 --board-variant a7-100 --build + ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_100 --board-variant a7-100 --build **VexRiscv** .. code-block:: bash :name: example-litex_vexriscv-a35t-group - ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/vexriscv/arty_35 --board-variant a7-35 --build + ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_35 --board-variant a7-35 --build .. code-block:: bash :name: example-litex_vexriscv-a100t-group - ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --uart-baudrate=1000000 --output-dir build/vexriscv/arty_100 --board-variant a7-100 --build + ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_100 --board-variant a7-100 --build Depending on which board and CPU-type you selected, the bitstream is loacted in: @@ -56,7 +56,7 @@ Now you can upload the design with: .. note:: - This example uses baud rate of ``1000000`` by default. + This example uses baud rate of ``115200`` by default. You should observe the following line in the OpenOCD output From d39372ae8787283cf2ccbe86af4907c6f2173013 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 4 Jan 2021 09:45:30 +0100 Subject: [PATCH 6/7] litex_demo: update litex version Signed-off-by: Alessandro Comodi --- xc7/litex_demo/README.rst | 8 +- xc7/litex_demo/arty.py | 156 -------------------------------- xc7/litex_demo/requirements.txt | 2 +- 3 files changed, 5 insertions(+), 161 deletions(-) delete mode 100755 xc7/litex_demo/arty.py diff --git a/xc7/litex_demo/README.rst b/xc7/litex_demo/README.rst index 5ef7cde..62f7f63 100644 --- a/xc7/litex_demo/README.rst +++ b/xc7/litex_demo/README.rst @@ -23,24 +23,24 @@ There are multiple CPU types supported, choose one from the below commands to ge .. code-block:: bash :name: example-litex_picorv32-a35t-group - ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_35 --board-variant a7-35 --build + ./src/litex/litex/boards/targets/arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_35 --variant a7-35 --build .. code-block:: bash :name: example-litex_picorv32-a100t-group - ./arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_100 --board-variant a7-100 --build + ./src/litex/litex/boards/targets/arty.py --toolchain=symbiflow --cpu-type=picorv32 --sys-clk-freq 80e6 --output-dir build/picorv32/arty_100 --variant a7-100 --build **VexRiscv** .. code-block:: bash :name: example-litex_vexriscv-a35t-group - ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_35 --board-variant a7-35 --build + ./src/litex/litex/boards/targets/arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_35 --variant a7-35 --build .. code-block:: bash :name: example-litex_vexriscv-a100t-group - ./arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_100 --board-variant a7-100 --build + ./src/litex/litex/boards/targets/arty.py --toolchain=symbiflow --cpu-type=vexriscv --sys-clk-freq 80e6 --output-dir build/vexriscv/arty_100 --variant a7-100 --build Depending on which board and CPU-type you selected, the bitstream is loacted in: diff --git a/xc7/litex_demo/arty.py b/xc7/litex_demo/arty.py deleted file mode 100755 index 9cdc667..0000000 --- a/xc7/litex_demo/arty.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python3 -# -# This file is part of LiteX. -# -# Copyright (c) 2015-2019 Florent Kermarrec -# Copyright (c) 2020 Antmicro -# SPDX-License-Identifier: BSD-2-Clause - -import os -import argparse - -from migen import * - -from litex.boards.platforms import arty -from litex.build.xilinx.vivado import vivado_build_args, vivado_build_argdict - -from litex.soc.cores.clock import * -from litex.soc.integration.soc_core import * -from litex.soc.integration.soc_sdram import * -from litex.soc.integration.builder import * -from litex.soc.cores.led import LedChaser - -from litedram.modules import MT41K128M16 -from litedram.phy import s7ddrphy - -from liteeth.phy.mii import LiteEthPHYMII - -# CRG ---------------------------------------------------------------------------------------------- - -class _CRG(Module): - def __init__(self, platform, sys_clk_freq): - self.rst = Signal() - self.clock_domains.cd_sys = ClockDomain() - self.clock_domains.cd_sys4x = ClockDomain(reset_less=True) - self.clock_domains.cd_sys4x_dqs = ClockDomain(reset_less=True) - self.clock_domains.cd_idelay = ClockDomain() - self.clock_domains.cd_eth = ClockDomain() - - # # # - - self.submodules.pll = pll = S7PLL(speedgrade=-1) - self.comb += pll.reset.eq(~platform.request("cpu_reset") | self.rst) - pll.register_clkin(platform.request("clk100"), 100e6) - pll.create_clkout(self.cd_sys, sys_clk_freq) - pll.create_clkout(self.cd_sys4x, 4*sys_clk_freq) - pll.create_clkout(self.cd_sys4x_dqs, 4*sys_clk_freq, phase=90) - pll.create_clkout(self.cd_idelay, 200e6) - pll.create_clkout(self.cd_eth, 25e6) - - self.submodules.idelayctrl = S7IDELAYCTRL(self.cd_idelay) - - self.comb += platform.request("eth_ref_clk").eq(self.cd_eth.clk) - -# BaseSoC ------------------------------------------------------------------------------------------ - -class BaseSoC(SoCCore): - def __init__( - self, - toolchain="vivado", - sys_clk_freq=int(100e6), - with_ethernet=False, - with_etherbone=False, - ident_version=True, - board_variant="a7-35", - **kwargs - ): - platform = arty.Platform(variant=board_variant, toolchain=toolchain) - - # SoCCore ---------------------------------------------------------------------------------- - SoCCore.__init__(self, platform, sys_clk_freq, - ident = "LiteX SoC on Arty A7", - ident_version = ident_version, - **kwargs) - - # CRG -------------------------------------------------------------------------------------- - self.submodules.crg = _CRG(platform, sys_clk_freq) - - # DDR3 SDRAM ------------------------------------------------------------------------------- - if not self.integrated_main_ram_size: - self.submodules.ddrphy = s7ddrphy.A7DDRPHY(platform.request("ddram"), - memtype = "DDR3", - nphases = 4, - sys_clk_freq = sys_clk_freq) - self.add_csr("ddrphy") - self.add_sdram("sdram", - phy = self.ddrphy, - module = MT41K128M16(sys_clk_freq, "1:4"), - origin = self.mem_map["main_ram"], - size = kwargs.get("max_sdram_size", 0x40000000), - l2_cache_size = kwargs.get("l2_size", 8192), - l2_cache_min_data_width = kwargs.get("min_l2_data_width", 128), - l2_cache_reverse = True - ) - - # Ethernet / Etherbone --------------------------------------------------------------------- - if with_ethernet or with_etherbone: - self.submodules.ethphy = LiteEthPHYMII( - clock_pads = self.platform.request("eth_clocks"), - pads = self.platform.request("eth")) - self.add_csr("ethphy") - if with_ethernet: - self.add_ethernet(phy=self.ethphy) - if with_etherbone: - self.add_etherbone(phy=self.ethphy) - - # Leds ------------------------------------------------------------------------------------- - self.submodules.leds = LedChaser( - pads = platform.request_all("user_led"), - sys_clk_freq = sys_clk_freq) - self.add_csr("leds") - -# Build -------------------------------------------------------------------------------------------- - -def main(): - parser = argparse.ArgumentParser(description="LiteX SoC on Arty A7") - parser.add_argument("--toolchain", default="vivado", help="Toolchain use to build (default: vivado)") - parser.add_argument("--board-variant", default="a7-35", help="Board variant (default: a7-35)") - parser.add_argument("--build", action="store_true", help="Build bitstream") - parser.add_argument("--load", action="store_true", help="Load bitstream") - parser.add_argument("--sys-clk-freq", default=100e6, help="System clock frequency (default: 100MHz)") - parser.add_argument("--with-ethernet", action="store_true", help="Enable Ethernet support") - parser.add_argument("--with-etherbone", action="store_true", help="Enable Etherbone support") - parser.add_argument("--with-spi-sdcard", action="store_true", help="Enable SPI-mode SDCard support") - parser.add_argument("--with-sdcard", action="store_true", help="Enable SDCard support") - parser.add_argument("--no-ident-version", action="store_false", help="Disable build time output") - builder_args(parser) - soc_sdram_args(parser) - vivado_build_args(parser) - args = parser.parse_args() - - assert not (args.with_ethernet and args.with_etherbone) - soc = BaseSoC( - toolchain = args.toolchain, - sys_clk_freq = int(float(args.sys_clk_freq)), - with_ethernet = args.with_ethernet, - with_etherbone = args.with_etherbone, - ident_version = args.no_ident_version, - board_variant = args.board_variant, - **soc_sdram_argdict(args) - ) - assert not (args.with_spi_sdcard and args.with_sdcard) - soc.platform.add_extension(arty._sdcard_pmod_io) - if args.with_spi_sdcard: - soc.add_spi_sdcard() - if args.with_sdcard: - soc.add_sdcard() - builder = Builder(soc, **builder_argdict(args)) - builder_kwargs = vivado_build_argdict(args) if args.toolchain == "vivado" else {} - builder.build(**builder_kwargs, run=args.build) - - if args.load: - prog = soc.platform.create_programmer() - prog.load_bitstream(os.path.join(builder.gateware_dir, soc.build_name + ".bit")) - -if __name__ == "__main__": - main() diff --git a/xc7/litex_demo/requirements.txt b/xc7/litex_demo/requirements.txt index e1d2cd6..369ed30 100644 --- a/xc7/litex_demo/requirements.txt +++ b/xc7/litex_demo/requirements.txt @@ -1,5 +1,5 @@ # LiteX --e git+https://github.com/enjoy-digital/litex@4092180662ec62cf28b9283a020f1ff7f0892c19#egg=litex +-e git+https://github.com/enjoy-digital/litex@afbac26e8015fdca70e7b2bc1477db31f7860c38#egg=litex -e git+https://github.com/enjoy-digital/litedram@103072c68a2e3ec9c81f198e50e5427e5780580c#egg=litedram -e git+https://github.com/enjoy-digital/liteeth@617400fe9e5b902e6bfd39a7c32ef5b255bc10c0#egg=liteeth -e git+https://github.com/enjoy-digital/liteiclink@8b29505096406d242685bf71b16a0ce4e4be54aa#egg=liteiclink From ba3ee5c49cdb04d1c12d0a2b7336ef5d25c2357d Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 18 Jun 2021 10:36:36 +0200 Subject: [PATCH 7/7] xc7: fix litex execution in CI Signed-off-by: Alessandro Comodi --- .github/scripts/build-examples.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/scripts/build-examples.sh b/.github/scripts/build-examples.sh index 576d08c..904d0c0 100755 --- a/.github/scripts/build-examples.sh +++ b/.github/scripts/build-examples.sh @@ -67,13 +67,10 @@ if [ "$fpga_family" = "xc7" ]; then snippets="${snippets} xc7/picosoc_demo/README.rst:example-picosoc-*-group" ;; "litex") - tuttest_exec xc7/litex_demo/README.rst example-litex-dir - tuttest_exec xc7/litex_demo/README.rst example-litex-req - tuttest_exec xc7/litex_demo/README.rst example-litex_picorv32-*-group - tuttest_exec xc7/litex_demo/README.rst example-litex_vexriscv-*-group + snippets="${snippets} xc7/litex_demo/README.rst:example-litex-dir,example-litex-req,example-litex_picorv32-*-group,example-litex_vexriscv-*-group" ;; "litex_linux") - snippets="${snippets} xc7/linux_litex_demo/README.rst:example-litex-deps,example-litex-*-group" + snippets="${snippets} xc7/linux_litex_demo/README.rst:example-litex-*-group" ;; *) echo "ERROR: Unknown example name: $example" >&2