From a2e3324d42d4cad8725c3ea746119cccc094dbcf Mon Sep 17 00:00:00 2001 From: dam1n19 <dam1n19@soton.ac.uk> Date: Wed, 28 Jun 2023 14:27:57 +0100 Subject: [PATCH] Added QuickStart filelists --- flist/corstone101_ip.flist | 6 +- flist/corstone101_ip_qs.flist | 90 +++ flist/corstone101_vip.flist | 6 +- flist/corstone101_vip_qs.flist | 35 + flist/nanosoc.flist | 36 + flist/nanosoc_ip.flist | 11 - flist/nanosoc_qs.flist | 33 + makefile | 24 +- software/common/bootloader/bootloader.c | 4 +- .../verilog/nanosoc_region_systable.v | 12 +- .../dma/{ => dma230}/verilog/nanosoc_ss_dma.v | 1 + .../dma/no_dmac/verilog/nanosoc_ss_dma.v | 119 +++ .../verilog/nanosoc_ss_systemctrl.v | 8 +- .../nanosoc_system/verilog/nanosoc_system.v | 12 +- system/slcorem0_tech | 2 +- system/sldma230_tech | 2 +- system/socdebug_tech | 2 +- verif/verilog/nanosoc_clkreset.v | 6 +- verif/verilog/nanosoc_tb_qs.v | 739 ++++++++++++++++++ 19 files changed, 1110 insertions(+), 38 deletions(-) create mode 100644 flist/corstone101_ip_qs.flist create mode 100644 flist/corstone101_vip_qs.flist create mode 100644 flist/nanosoc.flist create mode 100644 flist/nanosoc_qs.flist rename system/nanosoc_subsystems/dma/{ => dma230}/verilog/nanosoc_ss_dma.v (98%) create mode 100644 system/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v create mode 100644 verif/verilog/nanosoc_tb_qs.v diff --git a/flist/corstone101_ip.flist b/flist/corstone101_ip.flist index ed11406..8ba90b2 100644 --- a/flist/corstone101_ip.flist +++ b/flist/corstone101_ip.flist @@ -16,9 +16,9 @@ +libext+.v+.vlib // ============= Corstone-101 search path ============= --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_dualtimers/verilog --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_watchdog/verilog --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/memories/ ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_dualtimers/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_watchdog/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/memories/ // CMSDK APB Timer IP //-y $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_timer/verilog diff --git a/flist/corstone101_ip_qs.flist b/flist/corstone101_ip_qs.flist new file mode 100644 index 0000000..77bb3fd --- /dev/null +++ b/flist/corstone101_ip_qs.flist @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------- +// NanoSoC Corstone-101 Filelist +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Verilog Command File for Arm Corstone-101 +//----------------------------------------------------------------------------- + +// ============= Verilog library extensions =========== ++libext+.v+.vlib + +// ============= Corstone-101 search path ============= ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_dualtimers/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_watchdog/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/ + +// CMSDK APB Timer IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_timer/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_timer/verilog/cmsdk_apb_timer.v + +// CMSDK Dual Timers IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_dualtimers/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_dualtimers/verilog/cmsdk_apb_dualtimers_frc.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_dualtimers/verilog/cmsdk_apb_dualtimers.v + +// CMSDK APB UART IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_uart/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_uart/verilog/cmsdk_apb_uart.v + +// CMSDK APB Watchdog IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_watchdog/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_watchdog/verilog/cmsdk_apb_watchdog_frc.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_watchdog/verilog/cmsdk_apb_watchdog.v + +// CMSDK APB Slave Mux IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_slave_mux/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_slave_mux/verilog/cmsdk_apb_slave_mux.v + +// CMSDK APB Subystem Top IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_subsystem/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_subsystem/verilog/cmsdk_apb_subsystem.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_subsystem/verilog/cmsdk_apb_test_slave.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_apb_subsystem/verilog/cmsdk_irq_sync.v + +// CMSDK AHB Slave Mux IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_slave_mux/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_slave_mux/verilog/cmsdk_ahb_slave_mux.v + +// CMSDK AHB Default Slave IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_default_slave/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_default_slave/verilog/cmsdk_ahb_default_slave.v + +// CMSDK AHB GPIO IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_gpio/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_gpio/verilog/cmsdk_ahb_gpio.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_gpio/verilog/cmsdk_ahb_to_iop.v + +// CMSDK AHB to APB Bridge IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_to_apb/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_to_apb/verilog/cmsdk_ahb_to_apb.v + +// CMSDK IOP to GPIO IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_iop_gpio/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_iop_gpio/verilog/cmsdk_iop_gpio.v + +// CMSDK Clockgate Models +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/clkgate +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/clkgate/cmsdk_clock_gate.v + +// CMSDK Memory Models +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/ +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_ahb_ram_beh.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_ahb_ram.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_ahb_rom.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_flash_rom16.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_flash_rom32.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_fpga_rom.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_fpga_sram.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_sram256x16.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/memories/cmsdk_sram256x8.v + +// CMSDK AHB to SRAM bridge IP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_to_sram/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_ahb_to_sram/verilog/cmsdk_ahb_to_sram.v \ No newline at end of file diff --git a/flist/corstone101_vip.flist b/flist/corstone101_vip.flist index 1efe3d7..b97dab2 100644 --- a/flist/corstone101_vip.flist +++ b/flist/corstone101_vip.flist @@ -16,9 +16,9 @@ +libext+.v+.vlib // ============= DMA-230 search path ============= --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_debug_tester/verilog --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/protocol_checkers/AhbLitePC/verilog --incdir $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/protocol_checkers/ApbPC/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_debug_tester/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/protocol_checkers/AhbLitePC/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/models/protocol_checkers/ApbPC/verilog // CMSDK Debug Tester VIP //-y $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_debug_tester/verilog diff --git a/flist/corstone101_vip_qs.flist b/flist/corstone101_vip_qs.flist new file mode 100644 index 0000000..880db86 --- /dev/null +++ b/flist/corstone101_vip_qs.flist @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// NanoSoC Corstone-101 VIP Filelist +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Verilog Command File for Arm Corstone-101 VIP +//----------------------------------------------------------------------------- + +// ============= Verilog library extensions =========== ++libext+.v+.vlib + +// ============= DMA-230 search path ============= ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_debug_tester/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/AhbLitePC/verilog ++incdir+$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/ApbPC/verilog + +// CMSDK Debug Tester VIP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_debug_tester/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_debug_tester/verilog/cmsdk_debug_tester_ahb_interconnect.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_debug_tester/verilog/cmsdk_debug_tester_trace_capture.v +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/cmsdk_debug_tester/verilog/cmsdk_debug_tester.v + +// CMSDK AHB Lite Protocol Checker VIP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/AhbLitePC/verilog +$(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/AhbLitePC/verilog/AhbLitePC.v + +// CMSDK APB Protocol Checker VIP +//-y $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/ApbPC/verilog +// $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0-QS/Corstone-101-logical/models/protocol_checkers/ApbPC/verilog/ApbPC.v \ No newline at end of file diff --git a/flist/nanosoc.flist b/flist/nanosoc.flist new file mode 100644 index 0000000..cb80eb1 --- /dev/null +++ b/flist/nanosoc.flist @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// NanoSoC Top-level Filelist +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Verilog Command File for NanoSoC IP +//----------------------------------------------------------------------------- + +// ============= Verilog library extensions =========== ++libext+.v+.vlib + +// ============= NanoSoC IP search path ============= + +// Include NanoSoC IP +-f $(SOCLABS_NANOSOC_TECH_DIR)/flist/nanosoc_ip.flist + +// Include Corstone IP +-f $(SOCLABS_NANOSOC_TECH_DIR)/flist/corstone101_ip.flist + +// SLCore Files +-f $(SOCLABS_SLCOREM0_TECH_DIR)/flist/slcorem0.flist + +// Debug IP +-f $(SOCLABS_SOCDEBUG_TECH_DIR)/flist/socdebug.flist + +// DMAC IP +-f $(SOCLABS_SLDMA230_TECH_DIR)/flist/sldma230_ip.flist + +// DMA Subystem +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v diff --git a/flist/nanosoc_ip.flist b/flist/nanosoc_ip.flist index 7ca1d01..4c6e3e1 100644 --- a/flist/nanosoc_ip.flist +++ b/flist/nanosoc_ip.flist @@ -17,9 +17,6 @@ // ============= NanoSoC IP search path ============= -// Include Corstone IP --f $(SOCLABS_NANOSOC_TECH_DIR)/flist/corstone101_ip.flist - // NanoSoC Chip Pads Level $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v @@ -31,7 +28,6 @@ $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_system/verilog/nanosoc_system.v // NanoSoC Subsystems $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v @@ -67,12 +63,5 @@ $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/systable/verilog/nanosoc_regi $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_control/verilog/nanosoc_clkctrl.v $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_control/verilog/nanosoc_pin_mux.v -// SLCore Files --f $(SOCLABS_SLCOREM0_TECH_DIR)/flist/slcorem0_ip.flist - -// Debug IP --f $(SOCLABS_SOCDEBUG_TECH_DIR)/flist/socdebug_controller_ip.flist -// DMAC IP --f $(SOCLABS_SLDMA230_TECH_DIR)/flist/sldma230_ip.flist diff --git a/flist/nanosoc_qs.flist b/flist/nanosoc_qs.flist new file mode 100644 index 0000000..f8399d3 --- /dev/null +++ b/flist/nanosoc_qs.flist @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// NanoSoC Top-level Filelist - QUICKSTART +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Verilog Command File for NanoSoC IP +//----------------------------------------------------------------------------- + +// ============= Verilog library extensions =========== ++libext+.v+.vlib + +// ============= NanoSoC IP search path ============= + +// Include NanoSoC IP +-f $(SOCLABS_NANOSOC_TECH_DIR)/flist/nanosoc_ip.flist + +// Include Corstone IP - QUICKSTART +-f $(SOCLABS_NANOSOC_TECH_DIR)/flist/corstone101_ip_qs.flist + +// SLCore Files - QUICKSTART +-f $(SOCLABS_SLCOREM0_TECH_DIR)/flist/slcorem0_qs.flist + +// Debug IP +-f $(SOCLABS_SOCDEBUG_TECH_DIR)/flist/socdebug.flist + +// DMA Subystem +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v \ No newline at end of file diff --git a/makefile b/makefile index e6e3590..ff888a7 100644 --- a/makefile +++ b/makefile @@ -83,6 +83,7 @@ BOOTROM_ADDRW ?= 8 BOOTROM_HEX ?= $(SOCLABS_NANOSOC_TECH_DIR)/testcodes/bootloader/$(BOOTLOADER).hex BOOTROM_BUILD_DIR ?= $(SOCLABS_PROJECT_DIR)/system/src/bootrom +QUICKSTART ?= no NANOSOC_EXPANSION_REGION ?= yes @@ -94,10 +95,15 @@ ifeq ($(NANOSOC_EXPANSION_REGION),yes) endif # System Design Filelist -DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/system.flist - -# Testbench Filelist -TBENCH_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/system_tb.flist +ifeq ($(QUICKSTART),yes) + DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top_qs.flist + TBENCH_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top_qs.flist + TB_TOP ?= nanosoc_tb_qs +else + DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist + TBENCH_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist + TB_TOP ?= nanosoc_tb +endif # Simulator type (mti/vcs/xm) @@ -127,7 +133,7 @@ VCS_SIM_OPTION = +vcs+lic+wait +vcs+flush+log -assert nopostproc VCS_VC_OPTIONS = -f $(TBENCH_VC) $(ACCELERATOR_VC) $(ADP_OPTIONS) # XM verilog option -XMSIM_OPTIONS = -unbuffered -status -LICQUEUE -f xmsim.args -cdslib cds.lib -hdlvar hdl.var -NBASYNC +XMSIM_OPTIONS = -unbuffered -64bit -status -LICQUEUE -f xmsim.args -cdslib cds.lib -hdlvar hdl.var -NBASYNC XM_VC_OPTIONS = -f $(TBENCH_VC) $(ACCELERATOR_VC) $(ADP_OPTIONS) HAL_BLACK_BOX = -design_info $(LINT_INFO_DIR)/nanosoc_ip.bb -design_info $(LINT_INFO_DIR)/corstone101_ip.bb -design_info $(LINT_INFO_SLCOREM0_DIR)/cortexm0_ip.bb -design_info $(LINT_INFO_SLDMA230_DIR)/pl230_ip.bb @@ -198,8 +204,8 @@ all_vcs : compile_vcs bootrom debugtester compile_xm : bootrom @echo ADP_FILE @echo $(ADP_OPTIONS) - cd $(SIM_DIR); xmprep +overwrite $(XM_VC_OPTIONS) $(DEFINES_VC) +debug -timescale 1ps/1ps -top nanosoc_tb | tee compile_xm.log - cd $(SIM_DIR); xmvlog -work worklib -f xmvlog_sv.args -f xmvlog_ver.args -sv | tee -a compile_xm.log + cd $(SIM_DIR); xmprep +overwrite $(XM_VC_OPTIONS) $(DEFINES_VC) +debug -timescale 1ps/1ps -top $(TB_TOP) | tee compile_xm.log + cd $(SIM_DIR); xmvlog -work worklib -f xmvlog_ver.args | tee -a compile_xm.log cd $(SIM_DIR); xmelab -mess -f xmelab.args -access +r | tee -a compile_xm.log lint_xm: bootrom @@ -268,11 +274,11 @@ run_mti : code compile_mti @echo "run -all" > $(SIM_DIR)/run.tcl.tmp @echo "quit -f" >> $(SIM_DIR)/run.tcl.tmp @mv $(SIM_DIR)/run.tcl.tmp $(SIM_DIR)/run.tcl - cd $(SIM_DIR); vsim $(MTI_OPTIONS) -c nanosoc_tb -do run.tcl | tee logs/run_$(TESTNAME).log ; + cd $(SIM_DIR); vsim $(MTI_OPTIONS) -c $(TB_TOP) -do run.tcl | tee logs/run_$(TESTNAME).log ; # Run simulation in interactive mode sim_mti : code compile_mti - vsim $(MTI_OPTIONS) -gui nanosoc_tb & + vsim $(MTI_OPTIONS) -gui $(TB_TOP) & # Create work directory lib_mti : diff --git a/software/common/bootloader/bootloader.c b/software/common/bootloader/bootloader.c index fcebe2c..233c44b 100644 --- a/software/common/bootloader/bootloader.c +++ b/software/common/bootloader/bootloader.c @@ -6,7 +6,7 @@ // // David Flynn (d.w.flynn@soton.ac.uk) // -// Copyright � 2021-3, SoC Labs (www.soclabs.org) +// Copyright � 2021-3, SoC Labs (www.soclabs.org) //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -122,7 +122,7 @@ void FlashLoader(void) UartPutc(0x4); // Terminate simulation while (1); } - UartPuts("** Remap->RAM2\n"); // CMSDK boot loader\n"); + UartPuts("** Remap->IMEM0\n"); // CMSDK boot loader\n"); CMSDK_SYSCON->REMAP = 0; // Clear remap __DSB(); __ISB(); diff --git a/system/nanosoc_regions/systable/verilog/nanosoc_region_systable.v b/system/nanosoc_regions/systable/verilog/nanosoc_region_systable.v index 34277c5..129ef40 100644 --- a/system/nanosoc_regions/systable/verilog/nanosoc_region_systable.v +++ b/system/nanosoc_regions/systable/verilog/nanosoc_region_systable.v @@ -12,9 +12,12 @@ //----------------------------------------------------------------------------- module nanosoc_region_systable #( - parameter SYS_ADDR_W = 32, // System Address Width - parameter SYS_DATA_W = 32, // System Data Width - parameter SYSTABLE_BASE = 32'hf000_0000 // Base Address for System ROM Table + parameter SYS_ADDR_W = 32, // System Address Width + parameter SYS_DATA_W = 32, // System Data Width + parameter SYSTABLE_BASE = 32'hf000_0000, // Base Address for System ROM Table + parameter SOCLABS_JEPID = 7'd0, + parameter NANOSOC_PARTNUMBER = 12'd0, + parameter NANOSOC_REVISION = 4'h0 )( input wire HCLK, // Clock @@ -39,6 +42,9 @@ module nanosoc_region_systable #( // ------------------------------- nanosoc_coresight_systable #( .BASE (SYSTABLE_BASE), + .JEPID (SOCLABS_JEPID), + .PARTNUMBER (NANOSOC_PARTNUMBER), + .REVISION (NANOSOC_REVISION), // Entry 0 = Cortex-M0 Processor .ENTRY0BASEADDR (32'hE00FF000), .ENTRY0PRESENT (1'b1), diff --git a/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v b/system/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v similarity index 98% rename from system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v rename to system/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v index 581c7a9..734083b 100644 --- a/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v +++ b/system/nanosoc_subsystems/dma/dma230/verilog/nanosoc_ss_dma.v @@ -1,5 +1,6 @@ //----------------------------------------------------------------------------- // NanoSoC DMA Subsystem - Contains DMA Controllers +// - Version with DMA Controller 0 instantiated as DMA230 and DMA 1 disconnected // A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. // // Contributors diff --git a/system/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v b/system/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v new file mode 100644 index 0000000..135db1b --- /dev/null +++ b/system/nanosoc_subsystems/dma/no_dmac/verilog/nanosoc_ss_dma.v @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------------- +// NanoSoC DMA Subsystem - Contains DMA Controllers +// - Version with no DMA Controllers connected +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Mapstone (d.a.mapstone@soton.ac.uk) +// +// Copyright 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +module nanosoc_ss_dma #( + parameter SYS_ADDR_W = 32, // System Address Width + parameter SYS_DATA_W = 32, // System Data Width + parameter DMAC_0_CFG_ADDR_W = 12, // DMAC 0 Configuration Port Address Width + parameter DMAC_1_CFG_ADDR_W = 12, // DMAC 1 Configuration Port Address Width + parameter DMAC_0_CHANNEL_NUM = 2, // DMAC 0 Number of DMA Channels + parameter DMAC_1_CHANNEL_NUM = 2 // DMAC 1 Number of DMA Channels +)( + // System AHB Clocks and Resets + input wire SYS_HCLK, + input wire SYS_HRESETn, + input wire SYS_PCLKEN, // APB clock enable + + // DMAC 0 AHB Lite Port + output wire [SYS_ADDR_W-1:0] DMAC_0_HADDR, // Address bus + output wire [1:0] DMAC_0_HTRANS, // Transfer type + output wire DMAC_0_HWRITE, // Transfer direction + output wire [2:0] DMAC_0_HSIZE, // Transfer size + output wire [2:0] DMAC_0_HBURST, // Burst type + output wire [3:0] DMAC_0_HPROT, // Protection control + output wire [SYS_DATA_W-1:0] DMAC_0_HWDATA, // Write data + output wire DMAC_0_HMASTLOCK, // Locked Sequence + input wire [SYS_DATA_W-1:0] DMAC_0_HRDATA, // Read data bus + input wire DMAC_0_HREADY, // HREADY feedback + input wire DMAC_0_HRESP, // Transfer response + + // DMAC 0 APB Configurtation Port + input wire DMAC_0_PSEL, // APB peripheral select + input wire DMAC_0_PEN, // APB transfer enable + input wire DMAC_0_PWRITE, // APB transfer direction + input wire [DMAC_0_CFG_ADDR_W-1:0] DMAC_0_PADDR, // APB address + input wire [SYS_DATA_W-1:0] DMAC_0_PWDATA, // APB write data + output wire [SYS_DATA_W-1:0] DMAC_0_PRDATA, // APB read data + + // DMAC 0 DMA Request and Status Port + input wire [DMAC_0_CHANNEL_NUM-1:0] DMAC_0_DMA_REQ, // DMA transfer request + output wire [DMAC_0_CHANNEL_NUM-1:0] DMAC_0_DMA_DONE, // DMA transfer done + output wire DMAC_0_DMA_ERR, // DMA slave response not OK + + // DMAC 1 AHB Lite Port + output wire [SYS_ADDR_W-1:0] DMAC_1_HADDR, // Address bus + output wire [1:0] DMAC_1_HTRANS, // Transfer type + output wire DMAC_1_HWRITE, // Transfer direction + output wire [2:0] DMAC_1_HSIZE, // Transfer size + output wire [2:0] DMAC_1_HBURST, // Burst type + output wire [3:0] DMAC_1_HPROT, // Protection control + output wire [SYS_DATA_W-1:0] DMAC_1_HWDATA, // Write data + output wire DMAC_1_HMASTLOCK, // Locked Sequence + input wire [SYS_DATA_W-1:0] DMAC_1_HRDATA, // Read data bus + input wire DMAC_1_HREADY, // HREADY feedback + input wire DMAC_1_HRESP, // Transfer response + + // DMAC 1 APB Configurtation Port + input wire DMAC_1_PSEL, // APB peripheral select + input wire DMAC_1_PEN, // APB transfer enable + input wire DMAC_1_PWRITE, // APB transfer direction + input wire [DMAC_1_CFG_ADDR_W-1:0] DMAC_1_PADDR, // APB address + input wire [SYS_DATA_W-1:0] DMAC_1_PWDATA, // APB write data + output wire [SYS_DATA_W-1:0] DMAC_1_PRDATA, // APB read data + + // DMAC 1 DMA Request and Status Port + input wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_REQ, // DMA transfer request + output wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_DONE, // DMA transfer done + output wire DMAC_1_DMA_ERR // DMA slave response not OK +); + + // ------------------------------- + // DMA Controller 0 Instantiation - Not implemented + // ------------------------------- + // AHB Tie-off signals + assign DMAC_0_HADDR = 32'd0; + assign DMAC_0_HTRANS = 2'd0; + assign DMAC_0_HWRITE = 1'd0; + assign DMAC_0_HSIZE = 3'd0; + assign DMAC_0_HBURST = 3'd0; + assign DMAC_0_HPROT = 4'd0; + assign DMAC_0_HWDATA = 32'd0; + assign DMAC_0_HMASTLOCK = 1'd0; + + // APB Tie-off signals + assign DMAC_0_PRDATA = 32'd0; + + // DMA Status Tie-off signals + assign DMAC_0_DMA_DONE = {DMAC_0_CHANNEL_NUM{1'b0}}; + assign DMAC_0_DMA_ERR = 1'b0; + + // ------------------------------- + // DMA Controller 1 Instantiation - Not implemented + // ------------------------------- + // AHB Tie-off signals + assign DMAC_1_HADDR = 32'd0; + assign DMAC_1_HTRANS = 2'd0; + assign DMAC_1_HWRITE = 1'd0; + assign DMAC_1_HSIZE = 3'd0; + assign DMAC_1_HBURST = 3'd0; + assign DMAC_1_HPROT = 4'd0; + assign DMAC_1_HWDATA = 32'd0; + assign DMAC_1_HMASTLOCK = 1'd0; + + // APB Tie-off signals + assign DMAC_1_PRDATA = 32'd0; + + // DMA Status Tie-off signals + assign DMAC_1_DMA_DONE = {DMAC_1_CHANNEL_NUM{1'b0}}; + assign DMAC_1_DMA_ERR = 1'b0; + +endmodule \ No newline at end of file diff --git a/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v b/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v index a68b5a2..8a59d08 100644 --- a/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v +++ b/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v @@ -17,6 +17,9 @@ module nanosoc_ss_systemctrl #( parameter APB_DATA_W = 32, // APB Peripheral Data Width parameter SYSTABLE_BASE = 32'hf000_0000, // Base Address of System ROM Table + parameter SOCLABS_JEPID = 7'd0, + parameter NANOSOC_PARTNUMBER = 12'd0, + parameter NANOSOC_REVISION = 4'h0, parameter CLKGATE_PRESENT = 0 )( @@ -329,7 +332,10 @@ module nanosoc_ss_systemctrl #( nanosoc_region_systable #( .SYS_ADDR_W(SYS_ADDR_W), .SYS_DATA_W(SYS_DATA_W), - .SYSTABLE_BASE(SYSTABLE_BASE) + .SYSTABLE_BASE(SYSTABLE_BASE), + .SOCLABS_JEPID(SOCLABS_JEPID), + .NANOSOC_PARTNUMBER(NANOSOC_PARTNUMBER), + .NANOSOC_REVISION(NANOSOC_REVISION) ) u_region_systable ( // Clock .HCLK(SYS_HCLK), diff --git a/system/nanosoc_system/verilog/nanosoc_system.v b/system/nanosoc_system/verilog/nanosoc_system.v index 45f2253..734eafa 100644 --- a/system/nanosoc_system/verilog/nanosoc_system.v +++ b/system/nanosoc_system/verilog/nanosoc_system.v @@ -63,7 +63,14 @@ module nanosoc_system #( parameter [7:0] FT1248_CLKDIV = 8'd03, // Clock Division Ratio // Address of System ROM Table - parameter SYSTABLE_BASE = 32'hF000_0000 // Base Address of System ROM Table + parameter SYSTABLE_BASE = 32'hF000_0000, // Base Address of System ROM Table + + // SoCLabs Manufacture ID + parameter SOCLABS_JEPID = 7'd0, + + // NanoSoC Part and Revision Numbers + parameter NANOSOC_PARTNUMBER = 12'h001, + parameter NANOSOC_REVISION = 4'h1 ) ( // Free-running and Crystal Clock Output input wire SYS_CLK, // System Input Clock @@ -804,6 +811,9 @@ module nanosoc_system #( .APB_ADDR_W(APB_ADDR_W), .APB_DATA_W(APB_DATA_W), .SYSTABLE_BASE(SYSTABLE_BASE), + .SOCLABS_JEPID(SOCLABS_JEPID), + .NANOSOC_PARTNUMBER(NANOSOC_PARTNUMBER), + .NANOSOC_REVISION(NANOSOC_REVISION), .CLKGATE_PRESENT(CLKGATE_PRESENT) ) u_systemctrl_ss ( // Free-running and Crystal Clock Output diff --git a/system/slcorem0_tech b/system/slcorem0_tech index ddf6ae0..4fa5316 160000 --- a/system/slcorem0_tech +++ b/system/slcorem0_tech @@ -1 +1 @@ -Subproject commit ddf6ae0e2e3435c8a58ada2fb97ee6c83e16f636 +Subproject commit 4fa531687bc515f1993501de12333dd002badd9e diff --git a/system/sldma230_tech b/system/sldma230_tech index 83e4d91..a1e059d 160000 --- a/system/sldma230_tech +++ b/system/sldma230_tech @@ -1 +1 @@ -Subproject commit 83e4d9117a2e770edecb320113806e7aa0a5a19f +Subproject commit a1e059d7fbccfc61869996f3175b0448364a2293 diff --git a/system/socdebug_tech b/system/socdebug_tech index 9825aa9..855e9e0 160000 --- a/system/socdebug_tech +++ b/system/socdebug_tech @@ -1 +1 @@ -Subproject commit 9825aa9fa7065ec55707daf8d969cf5b947a68a7 +Subproject commit 855e9e01de32cfa63c7b275649547b831d3ba0e0 diff --git a/verif/verilog/nanosoc_clkreset.v b/verif/verilog/nanosoc_clkreset.v index c420e2d..fc1deef 100644 --- a/verif/verilog/nanosoc_clkreset.v +++ b/verif/verilog/nanosoc_clkreset.v @@ -40,11 +40,13 @@ module nanosoc_clkreset( output wire CLK, output wire NRST); - reg clock_q = 1'b0; - reg reset_n_q = 1'b0; + reg clock_q; + reg reset_n_q; initial begin + clock_q <= 1'b0; + reset_n_q <= 1'b0; #40 clock_q <= 1'b1; #100 reset_n_q <= 1'b1; end diff --git a/verif/verilog/nanosoc_tb_qs.v b/verif/verilog/nanosoc_tb_qs.v new file mode 100644 index 0000000..d8fa516 --- /dev/null +++ b/verif/verilog/nanosoc_tb_qs.v @@ -0,0 +1,739 @@ +//----------------------------------------------------------------------------- +// NanoSoC Testbench adpated from example Cortex-M0 controller testbench +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Testbench for the Cortex-M0 example system +//----------------------------------------------------------------------------- +// +`timescale 1ns/1ps + +`define CORTEX_M0 + +module nanosoc_tb_qs; + + wire XTAL1; // crystal pin 1 + wire XTAL2; // crystal pin 2 + wire NRST; // active low reset + + wire [15:0] P0; // Port 0 + wire [15:0] P1; // Port 1 + + wire VDDIO; + wire VSSIO; + wire VDD; + wire VSS; + + //Debug tester signals + wire nTRST; + wire TDI; + wire SWDIOTMS; + wire SWCLKTCK; + wire TDO; + + wire PCLK; // Clock for UART capture device + wire [5:0] debug_command; // used to drive debug tester + wire debug_running; // indicate debug test is running + wire debug_err; // indicate debug test has error + + wire debug_test_en1; + wire debug_test_en2; + wire debug_test_en; // To enable the debug tester connection to MCU GPIO P0 + // This signal is controlled by software, + // Use "UartPutc((char) 0x1B)" to send ESCAPE code to start + // the command, use "UartPutc((char) 0x11)" to send debug test + // enable command, use "UartPutc((char) 0x12)" to send debug test + // disable command. Refer to tb_uart_capture.v file for detail + assign debug_test_en = debug_test_en1 | debug_test_en2; // FT1248 or UART2 control + + //----------------------------------------- + // System options + +`define MEM_INIT 1; +localparam BE=0; +`define ARM_CMSDK_INCLUDE_DEBUG_TESTER 1 + +`ifdef ADP_FILE + localparam ADP_FILENAME=`ADP_FILE; +`else + localparam ADP_FILENAME="adp.cmd"; +`endif + + +SROM_Ax32 + #(.ADDRWIDTH (8), + .filename ("bootrom/hex/bootloader.hex"), + .romgen (1) + ) + u_BOOTROM ( + .CLK(XTAL1), + .ADDR(8'h0), + .SEL(1'b0), + .RDATA( ) + ); + + // -------------------------------------------------------------------------------- + // Cortex-M0/Cortex-M0+ Microcontroller + // -------------------------------------------------------------------------------- + + nanosoc_chip_pads + u_nanosoc_chip_pads ( +`ifdef POWER_PINS + .VDDIO (VDDIO), + .VSSIO (VSSIO), + .VDD (VDD), + .VSS (VSS), +`endif + .XTAL1 (XTAL1), // input + .XTAL2 (XTAL2), // output + .NRST (NRST), // active low reset + .P0 (P0), + .P1 (P1), + .SWDIOTMS (SWDIOTMS), + .SWCLKTCK (SWCLKTCK) + ); + + // -------------------------------------------------------------------------------- + // Source for clock and reset + // -------------------------------------------------------------------------------- + nanosoc_clkreset u_nanosoc_clkreset( + .CLK (XTAL1), + .NRST (NRST) + ); + + // Pullup to suppress X-inputs + pullup(P0[ 0]); + pullup(P0[ 1]); + pullup(P0[ 2]); + pullup(P0[ 3]); + pullup(P0[ 4]); + pullup(P0[ 5]); + pullup(P0[ 6]); + pullup(P0[ 7]); + pullup(P0[ 8]); + pullup(P0[ 9]); + pullup(P0[10]); + pullup(P0[11]); + pullup(P0[12]); + pullup(P0[13]); + pullup(P0[14]); + pullup(P0[15]); + + pullup(P1[ 0]); + pullup(P1[ 1]); + pullup(P1[ 2]); + pullup(P1[ 3]); + pullup(P1[ 4]); + pullup(P1[ 5]); + pullup(P1[ 6]); + pullup(P1[ 7]); + pullup(P1[ 8]); + pullup(P1[ 9]); + pullup(P1[10]); + pullup(P1[11]); + pullup(P1[12]); + pullup(P1[13]); + pullup(P1[14]); + pullup(P1[15]); + + // -------------------------------------------------------------------------------- + // UART output capture + // -------------------------------------------------------------------------------- +`ifdef ARM_CMSDK_SLOWSPEED_PCLK + // If PCLK is running at slower speed, the UART output will also be slower + assign PCLK = u_cmsdk_mcu.u_cmsdk_mcu.PCLK; +`else + assign PCLK = XTAL1; +`endif + + // -------------------------------------------------------------------------------- + // external UART phase lock to (known) baud rate + +// seem unable to use the following (due to generate instance naming?) +// wire baudx16_clk = u_cmsdk_mcu.u_cmsdk_mcu.u_cmsdk_mcu_system.u_apb_subsystem.u_apb_uart_2.BAUDTICK; + +// 2000000/208 = 9615 baud (+0.16%) +// 208 / 16 +`define BAUDPROG 130 + + reg [7:0] bauddiv; + wire baudclken = (bauddiv == 8'b00000000); + + always @(negedge NRST or posedge PCLK) + if (!NRST) + bauddiv <=0; + else + bauddiv <= (baudclken) ? (`BAUDPROG-1) : (bauddiv -1) ; // count down of BAUDPROG + + wire baudx16_clk = bauddiv[7]; //prefer:// !baudclken; + + wire UARTXD = P1[5]; + reg UARTXD_del; + always @(negedge NRST or posedge baudx16_clk) + if (!NRST) + UARTXD_del <= 1'b0; + else + UARTXD_del <= UARTXD; // delay one BAUD_TICK-time + + wire UARTXD_edge = UARTXD_del ^ UARTXD; // edge detect + + reg [3:0] pllq; + always @(negedge NRST or posedge baudx16_clk) + if (!NRST) + pllq[3:0] <= 4'b0000; // phase lock ready for Q[3] to go high + else + if (UARTXD_edge) + pllq[3:0] <= 4'b0110; // sync to mid bit-time + else + pllq[3:0] <= pllq[3:0] - 1; // count down divide-by-16 + + wire baud_clk = pllq[3]; + +reg baud_clk_del; + always @(negedge NRST or posedge PCLK) + if (!NRST) + baud_clk_del <= 1'b1; + else + baud_clk_del <= baud_clk; + + // -------------------------------------------------------------------------------- + // set FASTMODE true if UART simulation mode is programmed + wire FASTMODE = 1'b0; + wire uart_clk = (FASTMODE) ? PCLK : baud_clk; //(baud_clk & !baud_clk_del); + + + nanosoc_uart_capture #(.LOGFILENAME("logs/uart2.log")) + u_nanosoc_uart_capture( + .RESETn (NRST), + .CLK (uart_clk), //PCLK), + .RXD (UARTXD), // UART 2 use for StdOut + .DEBUG_TESTER_ENABLE (debug_test_en2), + .SIMULATIONEND (), // This signal set to 1 at the end of simulation. + .AUXCTRL () + ); + + // -------------------------------------------------------------------------------- + // FTDI IO capture + // -------------------------------------------------------------------------------- + + // UART connection cross over for UART test +// assign P1[0] = P1[3]; // UART 0 RXD = UART 1 TXD +// assign P1[2] = P1[1]; // UART 1 RXD = UART 0 TXD + +assign P1[4] = P1[5]; // loopback UART2 + +wire ft_clk_out = P1[1]; +wire ft_miso_in; +assign P1[0] = ft_miso_in; +wire ft_ssn_out = P1[3]; + +// +// AXI stream io testing +// + +wire txd8_ready; +wire txd8_valid; +wire [7:0] txd8_data ; + +wire rxd8_ready; +wire rxd8_valid; +wire [7:0] rxd8_data ; + +nanosoc_axi_stream_io_8_txd_from_file + #(.TXDFILENAME(ADP_FILENAME)) + u_nanosoc_axi_stream_io_8_txd_from_file + ( + .aclk (XTAL1), + .aresetn (NRST), + .txd8_ready (txd8_ready), + .txd8_valid (txd8_valid), + .txd8_data (txd8_data) + ); + +/* +axi_stream_io_8_buffer + u_axi_stream_io_8_buffer + ( + .aclk (XTAL1), + .aresetn (NRST), + .rxd8_ready (txd8_ready), + .rxd8_valid (txd8_valid), + .rxd8_data (txd8_data), + .txd8_ready (rxd8_ready), + .txd8_valid (rxd8_valid), + .txd8_data (rxd8_data) + ); +*/ + +wire ft_miosio_o; +wire ft_miosio_z; +wire ft_miosio_i = P1[2]; // & ft_miosio_z; +assign P1[2] = (ft_miosio_z) ? 1'bz : ft_miosio_o; + +nanosoc_ft1248x1_to_axi_streamio_v1_0 + u_nanosoc_ft1248x1_to_axi_streamio_v1_0 + ( + .ft_clk_i (ft_clk_out), + .ft_ssn_i (ft_ssn_out), + .ft_miso_o (ft_miso_in), + .ft_miosio_i (ft_miosio_i), + .ft_miosio_o (ft_miosio_o), + .ft_miosio_z (ft_miosio_z), + .aclk (XTAL1), + .aresetn (NRST), + .rxd_tready_o (txd8_ready), + .rxd_tvalid_i (txd8_valid), + .rxd_tdata8_i (txd8_data), + .txd_tready_i (rxd8_ready), + .txd_tvalid_o (rxd8_valid), + .txd_tdata8_o (rxd8_data) + ); + +nanosoc_axi_stream_io_8_rxd_to_file + #(.RXDFILENAME("logs/ft1248_out.log")) + u_nanosoc_axi_stream_io_8_rxd_to_file + ( + .aclk (XTAL1), + .aresetn (NRST), + .rxd8_ready (rxd8_ready), + .rxd8_valid (rxd8_valid), + .rxd8_data (rxd8_data) + ); + +nanosoc_track_tb_iostream + u_nanosoc_track_tb_iostream + ( + .aclk (XTAL1), + .aresetn (NRST), + .rxd8_ready (rxd8_ready), + .rxd8_valid (rxd8_valid), + .rxd8_data (rxd8_data), + .DEBUG_TESTER_ENABLE (debug_test_en1), + .AUXCTRL ( ), + .SIMULATIONEND( ) + ); + +wire ft_clk2uart; +wire ft_rxd2uart; +wire ft_txd2uart; + +nanosoc_ft1248x1_track + u_nanosoc_ft1248x1_track + ( + .ft_clk_i (ft_clk_out), + .ft_ssn_i (ft_ssn_out), + .ft_miso_i (ft_miso_in), + .ft_miosio_i (ft_miosio_i), + .aclk (XTAL1), + .aresetn (NRST), + .FTDI_CLK2UART_o (ft_clk2uart), // Clock (baud rate) + .FTDI_OP2UART_o (ft_rxd2uart), // Received data to UART capture + .FTDI_IP2UART_o (ft_txd2uart) // Transmitted data to UART capture + ); + + nanosoc_uart_capture #(.LOGFILENAME("logs/ft1248_op.log")) + u_nanosoc_uart_capture1( + .RESETn (NRST), + .CLK (ft_clk2uart), + .RXD (ft_rxd2uart), + .DEBUG_TESTER_ENABLE (debug_test_en1), + .SIMULATIONEND (), // This signal set to 1 at the end of simulation. + .AUXCTRL () + ); + + nanosoc_uart_capture #(.LOGFILENAME("logs/ft1248_ip.log")) + u_nanosoc_uart_capture2( + .RESETn (NRST), + .CLK (ft_clk2uart), + .RXD (ft_txd2uart), + .DEBUG_TESTER_ENABLE ( ), + .SIMULATIONEND (), // This signal set to 1 at the end of simulation. + .AUXCTRL () + ); + + + // -------------------------------------------------------------------------------- + // Tracking CPU with Tarmac trace support + // -------------------------------------------------------------------------------- + + +`ifdef CORTEX_M0 +`ifdef USE_TARMAC + +`define ARM_CM0IK_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_system.u_cpu_ss.u_cpu_0.u_slcorem0_integration.u_cortexm0 + + CORTEXM0 + #(.ACG(1), .AHBSLV(0), .BE(0), .BKPT(4), + .DBG(1), .NUMIRQ(32), .RAR(1), .SMUL(0), + .SYST(1), .WIC(1), .WICLINES(34), .WPT(2)) + u_cortexm0_track + ( + // Outputs + .HADDR ( ), + .HBURST ( ), + .HMASTLOCK ( ), + .HPROT ( ), + .HSIZE ( ), + .HTRANS ( ), + .HWDATA ( ), + .HWRITE ( ), + .HMASTER ( ), + .SLVRDATA ( ), + .SLVREADY ( ), + .SLVRESP ( ), + .DBGRESTARTED ( ), + .HALTED ( ), + .TXEV ( ), + .LOCKUP ( ), + .SYSRESETREQ ( ), + .CODENSEQ ( ), + .CODEHINTDE ( ), + .SPECHTRANS ( ), + .SLEEPING ( ), + .SLEEPDEEP ( ), + .SLEEPHOLDACKn ( ), + .WICDSACKn ( ), + .WICMASKISR ( ), + .WICMASKNMI ( ), + .WICMASKRXEV ( ), + .WICLOAD ( ), + .WICCLEAR ( ), + // Inputs + .SCLK (`ARM_CM0IK_PATH.SCLK), + .HCLK (`ARM_CM0IK_PATH.HCLK), + .DCLK (`ARM_CM0IK_PATH.DCLK), + .DBGRESETn (`ARM_CM0IK_PATH.DBGRESETn), + .HRESETn (`ARM_CM0IK_PATH.HRESETn), + .HRDATA (`ARM_CM0IK_PATH.HRDATA[31:0]), + .HREADY (`ARM_CM0IK_PATH.HREADY), + .HRESP (`ARM_CM0IK_PATH.HRESP), + .SLVADDR (`ARM_CM0IK_PATH.SLVADDR[31:0]), + .SLVSIZE (`ARM_CM0IK_PATH.SLVSIZE[1:0]), + .SLVTRANS (`ARM_CM0IK_PATH.SLVTRANS[1:0]), + .SLVWDATA (`ARM_CM0IK_PATH.SLVWDATA[31:0]), + .SLVWRITE (`ARM_CM0IK_PATH.SLVWRITE), + .DBGRESTART (`ARM_CM0IK_PATH.DBGRESTART), + .EDBGRQ (`ARM_CM0IK_PATH.EDBGRQ), + .NMI (`ARM_CM0IK_PATH.NMI), + .IRQ (`ARM_CM0IK_PATH.IRQ[31:0]), + .RXEV (`ARM_CM0IK_PATH.RXEV), + .STCALIB (`ARM_CM0IK_PATH.STCALIB[25:0]), + .STCLKEN (`ARM_CM0IK_PATH.STCLKEN), + .IRQLATENCY (`ARM_CM0IK_PATH.IRQLATENCY[7:0]), + .ECOREVNUM (`ARM_CM0IK_PATH.ECOREVNUM[19:0]), + .SLEEPHOLDREQn (`ARM_CM0IK_PATH.SLEEPHOLDREQn), + .WICDSREQn (`ARM_CM0IK_PATH.WICDSREQn), + .SE (`ARM_CM0IK_PATH.SE)); + +`define ARM_CM0IK_TRACK u_cortexm0_track + cm0_tarmac #(.LOGFILENAME("logs/tarmac0.log")) + u_tarmac_track + (.enable_i (1'b1), + + .hclk_i (`ARM_CM0IK_TRACK.HCLK), + .hready_i (`ARM_CM0IK_TRACK.HREADY), + .haddr_i (`ARM_CM0IK_TRACK.HADDR[31:0]), + .hprot_i (`ARM_CM0IK_TRACK.HPROT[3:0]), + .hsize_i (`ARM_CM0IK_TRACK.HSIZE[2:0]), + .hwrite_i (`ARM_CM0IK_TRACK.HWRITE), + .htrans_i (`ARM_CM0IK_TRACK.HTRANS[1:0]), + .hresetn_i (`ARM_CM0IK_TRACK.HRESETn), + .hresp_i (`ARM_CM0IK_TRACK.HRESP), + .hrdata_i (`ARM_CM0IK_TRACK.HRDATA[31:0]), + .hwdata_i (`ARM_CM0IK_TRACK.HWDATA[31:0]), + .lockup_i (`ARM_CM0IK_TRACK.LOCKUP), + .halted_i (`ARM_CM0IK_TRACK.HALTED), + .codehintde_i (`ARM_CM0IK_TRACK.CODEHINTDE[2:0]), + .codenseq_i (`ARM_CM0IK_TRACK.CODENSEQ), + + .hdf_req_i (`ARM_CM0IK_TRACK.u_top.u_sys.ctl_hdf_request), + .int_taken_i (`ARM_CM0IK_TRACK.u_top.u_sys.dec_int_taken_o), + .int_return_i (`ARM_CM0IK_TRACK.u_top.u_sys.dec_int_return_o), + .int_pend_i (`ARM_CM0IK_TRACK.u_top.u_sys.nvm_int_pend), + .pend_num_i (`ARM_CM0IK_TRACK.u_top.u_sys.nvm_int_pend_num[5:0]), + .ipsr_i (`ARM_CM0IK_TRACK.u_top.u_sys.psr_ipsr[5:0]), + + .ex_last_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.ctl_ex_last), + .iaex_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.ctl_iaex_en), + .reg_waddr_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.ctl_wr_addr[3:0]), + .reg_write_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.ctl_wr_en), + .xpsr_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.ctl_xpsr_en), + .fe_addr_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.pfu_fe_addr[30:0]), + .int_delay_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.pfu_int_delay), + .special_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.pfu_op_special), + .opcode_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.pfu_opcode[15:0]), + .reg_wdata_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.psr_gpr_wdata[31:0]), + + .atomic_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_ctl.atomic), + .atomic_nxt_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_ctl.atomic_nxt), + .dabort_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_ctl.data_abort), + .ex_last_nxt_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_ctl.ex_last_nxt), + .int_preempt_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_ctl.int_preempt), + + .psp_sel_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_gpr.psp_sel), + .xpsr_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_gpr.xpsr[31:0]), + + .iaex_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_pfu.iaex[30:0]), + .iaex_nxt_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_pfu.iaex_nxt[30:0]), + .opcode_nxt_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_pfu.ibuf_de_nxt[15:0]), + .delay_count_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_pfu.ibuf_lo[13:6]), + .tbit_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_pfu.tbit_en), + + .cflag_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_psr.cflag_ena), + .ipsr_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_psr.ipsr_ena), + .nzflag_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_psr.nzflag_ena), + .vflag_en_i (`ARM_CM0IK_TRACK.u_top.u_sys.u_core.u_psr.vflag_ena) + ); + +`endif // USE_TARMAC +`endif // CORTEX_M0 + + // -------------------------------------------------------------------------------- + // Tracking DMA logging support + // - Track inputs to on-chip PL230 DMAC and replicate state and outputs in testbench + // - log the RTL Inuts/outputs/internal-state of this traccking DMAC + // -------------------------------------------------------------------------------- + +// `define DMAC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_system.u_dma_ss.u_dmac_0.u_pl230_udma + +// pl230_udma u_track_pl230_udma ( +// // Clock and Reset +// .hclk (`DMAC_PATH.hclk), +// .hresetn (`DMAC_PATH.hresetn), +// // DMA Control +// .dma_req (`DMAC_PATH.dma_req), +// .dma_sreq (`DMAC_PATH.dma_sreq), +// .dma_waitonreq (`DMAC_PATH.dma_waitonreq), +// .dma_stall (`DMAC_PATH.dma_stall), +// .dma_active ( ), +// .dma_done ( ), +// .dma_err ( ), +// // AHB-Lite Master Interface +// .hready (`DMAC_PATH.hready), +// .hresp (`DMAC_PATH.hresp), +// .hrdata (`DMAC_PATH.hrdata), +// .htrans ( ), +// .hwrite ( ), +// .haddr ( ), +// .hsize ( ), +// .hburst ( ), +// .hmastlock ( ), +// .hprot ( ), +// .hwdata ( ), +// // APB Slave Interface +// .pclken (`DMAC_PATH.pclken), +// .psel (`DMAC_PATH.psel), +// .pen (`DMAC_PATH.pen), +// .pwrite (`DMAC_PATH.pwrite), +// .paddr (`DMAC_PATH.paddr), +// .pwdata (`DMAC_PATH.pwdata), +// .prdata ( ) +// ); + +// `define DMAC_TRACK_PATH u_track_pl230_udma + +// nanosoc_dma_log_to_file #(.FILENAME("logs/dma230.log"),.NUM_CHNLS(2),.NUM_CHNL_BITS(1),.TIMESTAMP(1)) +// u_nanosoc_dma_log_to_file ( +// .hclk (`DMAC_TRACK_PATH.hclk), +// .hresetn (`DMAC_TRACK_PATH.hresetn), +// // AHB-Lite Master Interface +// .hready (`DMAC_TRACK_PATH.hready), +// .hresp (`DMAC_TRACK_PATH.hresp), +// .hrdata (`DMAC_TRACK_PATH.hrdata), +// .htrans (`DMAC_TRACK_PATH.htrans), +// .hwrite (`DMAC_TRACK_PATH.hwrite), +// .haddr (`DMAC_TRACK_PATH.haddr), +// .hsize (`DMAC_TRACK_PATH.hsize), +// .hburst (`DMAC_TRACK_PATH.hburst), +// .hprot (`DMAC_TRACK_PATH.hprot), +// .hwdata (`DMAC_TRACK_PATH.hwdata), +// // APB control interface +// .pclken (`DMAC_TRACK_PATH.pclken), +// .psel (`DMAC_TRACK_PATH.psel), +// .pen (`DMAC_TRACK_PATH.pen), +// .pwrite (`DMAC_TRACK_PATH.pwrite), +// .paddr (`DMAC_TRACK_PATH.paddr), +// .pwdata (`DMAC_TRACK_PATH.pwdata), +// .prdata (`DMAC_TRACK_PATH.prdata), +// // DMA Control +// .dma_req (`DMAC_TRACK_PATH.dma_req), +// .dma_active (`DMAC_TRACK_PATH.dma_active), +// .dma_done (`DMAC_TRACK_PATH.dma_done), +// // DMA state from tracking RTL model +// .dma_chnl (`DMAC_TRACK_PATH.u_pl230_ahb_ctrl.current_chnl), +// .dma_ctrl_state(`DMAC_TRACK_PATH.u_pl230_ahb_ctrl.ctrl_state) +// ); + + // -------------------------------------------------------------------------------- + // Tracking Accelerator logging support + // -------------------------------------------------------------------------------- + +// `define ACC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_nanosoc_exp_wrapper + +// nanosoc_acc_log_to_file #(.FILENAME("logs/acc_exp.log"),.TIMESTAMP(1)) +// u_nanosoc_acc_log_to_file ( +// .HCLK (`ACC_PATH.HCLK ), +// .HRESETn (`ACC_PATH.HRESETn ), +// .HSEL_i (`ACC_PATH.HSEL_i ), +// .HADDR_i (`ACC_PATH.HADDR_i ), +// .HTRANS_i (`ACC_PATH.HTRANS_i ), +// .HWRITE_i (`ACC_PATH.HWRITE_i ), +// .HSIZE_i (`ACC_PATH.HSIZE_i ), +// .HPROT_i (`ACC_PATH.HPROT_i ), +// .HWDATA_i (`ACC_PATH.HWDATA_i ), +// .HREADY_i (`ACC_PATH.HREADY_i ), +// .HRDATA_o (`ACC_PATH.HRDATA_o ), +// .HREADYOUT_o (`ACC_PATH.HREADYOUT_o ), +// .HRESP_o (`ACC_PATH.HRESP_o ), +// .exp_drq_ip_o (`ACC_PATH.exp_drq_ip_o ), +// .exp_dlast_ip_i (`ACC_PATH.exp_dlast_ip_i), +// .exp_drq_op_o (`ACC_PATH.exp_drq_op_o ), +// .exp_dlast_op_i (`ACC_PATH.exp_dlast_op_i), +// .exp_irq_o (`ACC_PATH.exp_irq_o ) +// ); + + + // -------------------------------------------------------------------------------- + // Debug tester connection - + // -------------------------------------------------------------------------------- + `ifdef ARM_CMSDK_INCLUDE_DEBUG_TESTER + + // Add pullups and pulldowns on Debug Interface + + pullup (nTRST); + pullup (TDI); + pullup (TDO); + pullup (SWDIOTMS); + pulldown (SWCLKTCK); + + + //connect to P0 for debug command and status pin + //add pulldown to debug command and debug status signals + // to give default value 0; + pulldown(debug_command[5]); + pulldown(debug_command[4]); + pulldown(debug_command[3]); + pulldown(debug_command[2]); + pulldown(debug_command[1]); + pulldown(debug_command[0]); + + pulldown(debug_running); + pulldown(debug_err); + + //Tristate logic for GPIO connection + bufif1 (debug_command[5], P0[29-16], debug_test_en); + bufif1 (debug_command[4], P0[28-16], debug_test_en); + bufif1 (debug_command[3], P0[27-16], debug_test_en); + bufif1 (debug_command[2], P0[26-16], debug_test_en); + bufif1 (debug_command[1], P0[25-16], debug_test_en); + bufif1 (debug_command[0], P0[24-16], debug_test_en); + + bufif1 (P0[31-16], debug_running, debug_test_en); + bufif1 (P0[30-16], debug_err, debug_test_en); + + + cmsdk_debug_tester #(.ROM_MEMFILE((BE==1) ? "debugtester_be.hex" : "debugtester_le.hex")) + u_cmsdk_debug_tester + ( + // Clock and Reset + .CLK (XTAL1), + .PORESETn (NRST), + + // Command Interface + .DBGCMD (debug_command[5:0]), + .DBGRUNNING (debug_running), + .DBGERROR (debug_err), + + // Trace Interface + .TRACECLK (1'b0), + .TRACEDATA (4'h0), + .SWV (1'b0), + + // Debug Interface + .TDO (TDO), + .nTRST (nTRST), + .SWCLKTCK (SWCLKTCK), + .TDI (TDI), + .SWDIOTMS (SWDIOTMS) + ); + + `endif + + // -------------------------------------------------------------------------------- + // Misc + // -------------------------------------------------------------------------------- + + // Format for time reporting + initial $timeformat(-9, 0, " ns", 0); + + // Configuration checks + initial begin +`ifdef CORTEX_M0DESIGNSTART +`ifdef CORTEX_M0 + $display("ERROR (nanosoc_tb.v) in CPU preprocessing directive : Both CORTEX_M0DESIGNSTART and CORTEX_M0 are set. Please use only one."); + $stop; +`endif +`endif +`ifdef CORTEX_M0DESIGNSTART +`ifdef CORTEX_M0PLUS + $display("ERROR (nanosoc_tb.v) in CPU preprocessing directive : Both CORTEX_M0DESIGNSTART and CORTEX_M0PLUS are set. Please use only one."); + $stop; +`endif +`endif +`ifdef CORTEX_M0 +`ifdef CORTEX_M0PLUS + $display("ERROR (nanosoc_tb.v) in CPU preprocessing directive : Both CORTEX_M0 and CORTEX_M0PLUS are set. Please use only one."); + $stop; +`endif +`endif +`ifdef CORTEX_M0DESIGNSTART +`ifdef CORTEX_M0 +`ifdef CORTEX_M0PLUS + $display("ERROR (nanosoc_tb.v) in CPU preprocessing directive : All of CORTEX_M0DESIGNSTART, CORTEX_M0 and CORTEX_M0PLUS are set. Please use only one."); + $stop; +`endif +`endif +`endif +`ifdef CORTEX_M0 +`else +`ifdef CORTEX_M0PLUS +`else +`ifdef CORTEX_M0DESIGNSTART +`else + $display("ERROR (nanosoc_tb.v) in CPU preprocessing directive : None of CORTEX_M0DESIGNSTART, CORTEX_M0 and CORTEX_M0PLUS are set. Please select one."); + $stop; +`endif +`endif +`endif + + end +endmodule -- GitLab