blob: d83a718a209f1c346d023d54156fabdd299aaeeb [file] [log] [blame]
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
:name: Shodan
:description: This script runs Tock & seL4 on Shodan matcha
$name?="matcha"
using sysbus
mach create $name
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.RiscV32"
include @sim/config/shodan_infrastructure/SpringbokRiscV32.cs
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.SpringbokRiscV32"
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.SpringbokRiscV32_ControlBlock"
include @sim/config/shodan_infrastructure/KelvinCPU.cs
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.KelvinCPU"
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.MlTopControlBlock"
include @sim/config/shodan_infrastructure/SmcRiscV32.cs
include @sim/config/shodan_infrastructure/Mailbox.cs
include @sim/renode/tools/sel4_extensions/seL4Extensions.cs
include @sim/config/shodan_infrastructure/AddressRangeStub.cs
include @sim/config/shodan_infrastructure/MatchaI2S.cs
EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.Sound.MatchaI2S"
$repl_file ?= @sim/config/platforms/shodan-release.repl
machine LoadPlatformDescription $repl_file
$term_port?=3456
emulation CreateServerSocketTerminal $term_port "term" false
connector Connect uart5 term
# for a client, bash users may consider this inline script:
#
# stty sane -echo -icanon; socat TCP:localhost:$term_port -; stty sane
#
# tmux users may consider adding a binding to ~/.tmux.conf
#
# bind-key k split-window "stty -echo -icanon; socat TCP:localhost:$term_port -"
# Hook up the analyzers to the uarts so we can see their output in the main
# Renode log
showAnalyzer "uart0-analyzer" sysbus.uart0 Antmicro.Renode.Analyzers.LoggingUartAnalyzer
showAnalyzer "uart5-analyzer" sysbus.uart5 Antmicro.Renode.Analyzers.LoggingUartAnalyzer
# Set the uarts host/virt timestamp format. Options: None, Virtual, Host, Full.
uart0-analyzer TimestampFormat None
uart5-analyzer TimestampFormat None
# Load the boot rom into the 32k rom at 0x8000 (useVirtualAddress = false, allowLoadsOnlyToMemory = true)
sysbus LoadELF @out/matcha/hw/boot_rom.elf false true cpu0
# Load the tarball of CAmkES components, cpio bundle of built-in files,
# the seL4 kernel, and preload the secure core binary.
$tar ?= @out/cantrip/shodan/release/ext_flash.tar
$tar_load_address ?= 0x44000000
$cpio ?= @out/cantrip/shodan/release/ext_builtins.cpio
$cpio_load_address ?= 0x46000000
$kernel ?= @out/cantrip/shodan/release/kernel/kernel.elf
$eflash_address ?= 0x20000000
$sc_bin ?= @out/cantrip/shodan/release/tmp/matcha-tock-bundle.bin
sysbus LoadBinary $tar $tar_load_address
sysbus LoadBinary $cpio $cpio_load_address
sysbus LoadBinary $sc_bin $eflash_address
sysbus LoadSymbolsFrom $kernel
# If we have a I2S peripheral, setup an audio file that we can use
# for sampling data. Note that the format for these files is raw
# sample data, left channel followed by right.
$i2s_mic_audio_file ?= @sim/config/shodan_infrastructure/test.raw
$i2s_speaker_audio_file ?= @/tmp/speaker.raw
# Uncomment these lines to enable audio
#i2s0 InputFile $i2s_mic_audio_file
#i2s0 OutputFile $i2s_speaker_audio_file
# Start cpu0 at the bootrom reset vector, which is stored immediately after the
# bootrom interrupt vector table at 0x8080.
# (see https://ibex-core.readthedocs.io/en/latest/03_reference/exception_interrupts.html for details)
sysbus.cpu0 PC 0x8080
$cpuLibrary?=@out/kelvin/sim/librenode_kelvin.so
sysbus.cpu2 CpuLibraryPath $cpuLibrary
# Start the vector core at address 0 of its instruction TCM.
sysbus.cpu2 PC 0x80000000
# Set the vector core to be less interactive to IO for faster execution
$vector_core_mips ?= 1000
sysbus.cpu2 PerformanceInMips $vector_core_mips
# Start GDB and halt both cores so we can connect GDB before the bootrom has
# started.
# cpu2 does not support GDB. Please follow docs/KelvinIssDebugging.md to debug
# Kelvin programs.
$gdb_port?=3333
machine StartGdbServer $gdb_port false cpu0
machine StartGdbServer $gdb_port false cpu1
cpu0 IsHalted true
cpu1 IsHalted true
cpu2 IsHalted true