initial commit to integrating litex tb with caravel_user_project mprj and wb tests still wp
diff --git a/Makefile b/Makefile index 6de652c..fa42afe 100644 --- a/Makefile +++ b/Makefile
@@ -16,6 +16,7 @@ CARAVEL_ROOT?=$(PWD)/caravel PRECHECK_ROOT?=${HOME}/mpw_precheck +MCW_ROOT?=$(PWD)/mgmt_core_wrapper SIM ?= RTL # Install lite version of caravel, (1): caravel-lite, (0): caravel @@ -58,6 +59,7 @@ -v ${CARAVEL_ROOT}:${CARAVEL_ROOT} \ -e TARGET_PATH=${TARGET_PATH} -e PDK_ROOT=${PDK_ROOT} \ -e CARAVEL_ROOT=${CARAVEL_ROOT} \ + -e MCW_ROOT=$(MCW_ROOT) \ -u $(id -u $$USER):$(id -g $$USER) efabless/dv_setup:latest \ sh -c $(VERIFY_COMMAND)
diff --git a/verilog/dv/Makefile b/verilog/dv/Makefile index d87238f..e14258d 100644 --- a/verilog/dv/Makefile +++ b/verilog/dv/Makefile
@@ -19,12 +19,19 @@ .SUFFIXES: .SILENT: clean all +export DESIGNS = $(CARAVEL_ROOT) +export TOOLS = /opt/riscv32i/ + +echo $TOOLS + PATTERNS = io_ports la_test1 la_test2 wb_port mprj_stimulus all: ${PATTERNS} - for i in ${PATTERNS}; do \ - ( cd $$i && make -f Makefile $${i}.vcd &> verify.log && grep Monitor verify.log) ; \ - done + + echo "bla" + # for i in ${PATTERNS}; do \ + # ( cd $$i && make -f Makefile $${i}.vcd &> verify.log && grep Monitor verify.log) ; \ + # done DV_PATTERNS = $(foreach dv, $(PATTERNS), verify-$(dv)) $(DV_PATTERNS): verify-% :
diff --git a/verilog/dv/io_ports/Makefile b/verilog/dv/io_ports/Makefile index 5237a05..ea1b0e0 100644 --- a/verilog/dv/io_ports/Makefile +++ b/verilog/dv/io_ports/Makefile
@@ -14,83 +14,24 @@ # # SPDX-License-Identifier: Apache-2.0 -## PDK -PDK_PATH = $(PDK_ROOT)/sky130A -## Caravel Pointers -CARAVEL_ROOT ?= ../../../caravel -CARAVEL_PATH ?= $(CARAVEL_ROOT) -CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel -CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog -CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl -CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel + +PWDD := $(shell pwd) +BLOCKS := $(shell basename $(PWDD)) -## User Project Pointers -UPRJ_VERILOG_PATH ?= ../../../verilog -UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl -UPRJ_BEHAVIOURAL_MODELS = ../ +# ---- Include Partitioned Makefiles ---- -## RISCV GCC -GCC_PATH?=/ef/apps/bin -GCC_PREFIX?=riscv32-unknown-elf +$(info $(TARGET_PATH)) -## Simulation mode: RTL/GL -SIM_DEFINES = -DFUNCTIONAL -DSIM -SIM?=RTL +export DESIGNS = $(TARGET_PATH) +export TOOLS = /opt/riscv32i/ -.SUFFIXES: +CONFIG = caravel_user_project -PATTERN = io_ports -all: ${PATTERN:=.vcd} +include $(MCW_ROOT)/verilog/dv/make/env.makefile +include $(MCW_ROOT)/verilog/dv/make/var.makefile +include $(MCW_ROOT)/verilog/dv/make/cpu.makefile +include $(MCW_ROOT)/verilog/dv/make/sim.makefile -hex: ${PATTERN:=.hex} -%.vvp: %_tb.v %.hex -ifeq ($(SIM),RTL) - iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ - $< -o $@ -else - iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \ - $< -o $@ -endif - -%.vcd: %.vvp - vvp $< - -%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env - ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $< - -%.hex: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ - # to fix flash base address - sed -i 's/@10000000/@00000000/g' $@ - -%.bin: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ - -check-env: -ifndef PDK_ROOT - $(error PDK_ROOT is undefined, please export it before running make) -endif -ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) - $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) -endif -ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc )) - $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make) -endif -# check for efabless style installation -ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) -SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE -endif - -# ---- Clean ---- - -clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log - -.PHONY: clean hex all
diff --git a/verilog/dv/io_ports/RTL-io_ports.vcd b/verilog/dv/io_ports/RTL-io_ports.vcd new file mode 100644 index 0000000..a85a5ed --- /dev/null +++ b/verilog/dv/io_ports/RTL-io_ports.vcd Binary files differ
diff --git a/verilog/dv/io_ports/io_ports.c b/verilog/dv/io_ports/io_ports.c index 0b23571..aa111ef 100644 --- a/verilog/dv/io_ports/io_ports.c +++ b/verilog/dv/io_ports/io_ports.c
@@ -16,8 +16,8 @@ */ // This include is relative to $CARAVEL_PATH (see Makefile) -#include "verilog/dv/caravel/defs.h" -#include "verilog/dv/caravel/stub.c" +#include <defs.h> +#include <stub.c> /* IO Test: @@ -46,7 +46,11 @@ /* Set up the housekeeping SPI to be connected internally so */ /* that external pin changes don't affect it. */ - reg_spimaster_config = 0xa002; // Enable, prescaler = 2, + // reg_spi_enable = 1; + // reg_spimaster_cs = 0x10001; + // reg_spimaster_control = 0x0801; + + // reg_spimaster_control = 0xa002; // Enable, prescaler = 2, // connect to housekeeping SPI // Connect the housekeeping SPI to the SPI master
diff --git a/verilog/dv/io_ports/io_ports.hex b/verilog/dv/io_ports/io_ports.hex new file mode 100755 index 0000000..2515ebb --- /dev/null +++ b/verilog/dv/io_ports/io_ports.hex
@@ -0,0 +1,59 @@ +@00000000 +6F 00 00 0B 13 00 00 00 13 00 00 00 13 00 00 00 +13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00 +23 2E 11 FE 23 2C 51 FE 23 2A 61 FE 23 28 71 FE +23 26 A1 FE 23 24 B1 FE 23 22 C1 FE 23 20 D1 FE +23 2E E1 FC 23 2C F1 FC 23 2A 01 FD 23 28 11 FD +23 26 C1 FD 23 24 D1 FD 23 22 E1 FD 23 20 F1 FD +13 01 01 FC EF 00 40 11 83 20 C1 03 83 22 81 03 +03 23 41 03 83 23 01 03 03 25 C1 02 83 25 81 02 +03 26 41 02 83 26 01 02 03 27 C1 01 83 27 81 01 +03 28 41 01 83 28 01 01 03 2E C1 00 83 2E 81 00 +03 2F 41 00 83 2F 01 00 13 01 01 04 73 00 20 30 +17 01 00 F1 13 01 01 75 17 05 00 00 13 05 85 F6 +73 10 55 30 13 05 00 00 93 05 00 00 17 06 00 00 +13 06 C6 2C 63 0C B5 00 83 26 06 00 23 20 D5 00 +13 05 45 00 13 06 46 00 6F F0 DF FE 13 05 00 00 +93 05 80 00 63 08 B5 00 23 20 05 00 13 05 45 00 +6F F0 5F FF 37 15 00 00 13 05 05 88 73 10 45 30 +EF 00 C0 1A 6F 00 00 00 13 01 01 FF 23 26 81 00 +13 04 01 01 13 00 00 00 03 24 C1 00 13 01 01 01 +67 80 00 00 13 01 01 FF 23 26 81 00 13 04 01 01 +13 00 00 00 03 24 C1 00 13 01 01 01 67 80 00 00 +13 01 01 FE 23 2E 81 00 13 04 01 02 23 26 A4 FE +83 27 C4 FE 73 90 07 BC 13 00 00 00 03 24 C1 01 +13 01 01 02 67 80 00 00 13 01 01 FF 23 26 11 00 +23 24 81 00 13 04 01 01 13 05 00 00 EF F0 5F FC +B7 37 00 F0 93 87 87 03 13 07 A0 00 23 A0 E7 00 +B7 37 00 F0 93 87 C7 03 37 07 02 00 23 A0 E7 00 +13 07 10 00 23 10 E0 00 13 00 00 00 83 20 C1 00 +03 24 81 00 13 01 01 01 67 80 00 00 13 01 01 FF +23 26 81 00 13 04 01 01 13 00 00 00 03 24 C1 00 +13 01 01 01 67 80 00 00 13 01 01 FF 23 26 81 00 +13 04 01 01 13 00 00 00 03 24 C1 00 13 01 01 01 +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +13 04 01 02 93 07 05 00 A3 07 F4 FE 03 47 F4 FE +93 07 A0 00 63 16 F7 00 13 05 D0 00 EF F0 9F FD +13 00 00 00 B7 67 00 F0 93 87 47 80 03 A7 07 00 +93 07 10 00 E3 08 F7 FE B7 67 00 F0 93 87 07 80 +03 47 F4 FE 23 A0 E7 00 13 00 00 00 83 20 C1 01 +03 24 81 01 13 01 01 02 67 80 00 00 13 01 01 FE +23 2E 11 00 23 2C 81 00 13 04 01 02 23 26 A4 FE +6F 00 C0 01 83 27 C4 FE 13 87 17 00 23 26 E4 FE +83 C7 07 00 13 85 07 00 EF F0 DF F6 83 27 C4 FE +83 C7 07 00 E3 90 07 FE 13 00 00 00 83 20 C1 01 +03 24 81 01 13 01 01 02 67 80 00 00 13 01 01 FF +23 26 81 00 13 04 01 01 B7 07 00 26 93 87 47 02 +37 27 00 00 13 07 87 80 23 A0 E7 00 B7 07 00 26 +93 87 87 02 37 27 00 00 13 07 87 80 23 A0 E7 00 +B7 07 00 26 93 87 C7 02 37 27 00 00 13 07 87 80 +23 A0 E7 00 B7 07 00 26 93 87 07 03 37 27 00 00 +13 07 87 80 23 A0 E7 00 B7 07 00 26 93 87 47 03 +37 27 00 00 13 07 87 80 23 A0 E7 00 B7 07 00 26 +93 87 87 03 37 27 00 00 13 07 87 80 23 A0 E7 00 +B7 07 00 26 93 87 C7 03 37 27 00 00 13 07 87 80 +23 A0 E7 00 B7 07 00 26 93 87 07 04 37 27 00 00 +13 07 87 80 23 A0 E7 00 B7 07 00 26 13 07 10 00 +23 A0 E7 00 13 00 00 00 B7 07 00 26 03 A7 07 00 +93 07 10 00 E3 0A F7 FE 13 00 00 00 03 24 C1 00 +13 01 01 01 67 80 00 00
diff --git a/verilog/dv/io_ports/io_ports.hexe b/verilog/dv/io_ports/io_ports.hexe new file mode 100755 index 0000000..66f6660 --- /dev/null +++ b/verilog/dv/io_ports/io_ports.hexe
@@ -0,0 +1,59 @@ +@10000000 +6F 00 00 0B 13 00 00 00 13 00 00 00 13 00 00 00 +13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00 +23 2E 11 FE 23 2C 51 FE 23 2A 61 FE 23 28 71 FE +23 26 A1 FE 23 24 B1 FE 23 22 C1 FE 23 20 D1 FE +23 2E E1 FC 23 2C F1 FC 23 2A 01 FD 23 28 11 FD +23 26 C1 FD 23 24 D1 FD 23 22 E1 FD 23 20 F1 FD +13 01 01 FC EF 00 40 11 83 20 C1 03 83 22 81 03 +03 23 41 03 83 23 01 03 03 25 C1 02 83 25 81 02 +03 26 41 02 83 26 01 02 03 27 C1 01 83 27 81 01 +03 28 41 01 83 28 01 01 03 2E C1 00 83 2E 81 00 +03 2F 41 00 83 2F 01 00 13 01 01 04 73 00 20 30 +17 01 00 F1 13 01 01 75 17 05 00 00 13 05 85 F6 +73 10 55 30 13 05 00 00 93 05 00 00 17 06 00 00 +13 06 C6 2C 63 0C B5 00 83 26 06 00 23 20 D5 00 +13 05 45 00 13 06 46 00 6F F0 DF FE 13 05 00 00 +93 05 80 00 63 08 B5 00 23 20 05 00 13 05 45 00 +6F F0 5F FF 37 15 00 00 13 05 05 88 73 10 45 30 +EF 00 C0 1A 6F 00 00 00 13 01 01 FF 23 26 81 00 +13 04 01 01 13 00 00 00 03 24 C1 00 13 01 01 01 +67 80 00 00 13 01 01 FF 23 26 81 00 13 04 01 01 +13 00 00 00 03 24 C1 00 13 01 01 01 67 80 00 00 +13 01 01 FE 23 2E 81 00 13 04 01 02 23 26 A4 FE +83 27 C4 FE 73 90 07 BC 13 00 00 00 03 24 C1 01 +13 01 01 02 67 80 00 00 13 01 01 FF 23 26 11 00 +23 24 81 00 13 04 01 01 13 05 00 00 EF F0 5F FC +B7 37 00 F0 93 87 87 03 13 07 A0 00 23 A0 E7 00 +B7 37 00 F0 93 87 C7 03 37 07 02 00 23 A0 E7 00 +13 07 10 00 23 10 E0 00 13 00 00 00 83 20 C1 00 +03 24 81 00 13 01 01 01 67 80 00 00 13 01 01 FF +23 26 81 00 13 04 01 01 13 00 00 00 03 24 C1 00 +13 01 01 01 67 80 00 00 13 01 01 FF 23 26 81 00 +13 04 01 01 13 00 00 00 03 24 C1 00 13 01 01 01 +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +13 04 01 02 93 07 05 00 A3 07 F4 FE 03 47 F4 FE +93 07 A0 00 63 16 F7 00 13 05 D0 00 EF F0 9F FD +13 00 00 00 B7 67 00 F0 93 87 47 80 03 A7 07 00 +93 07 10 00 E3 08 F7 FE B7 67 00 F0 93 87 07 80 +03 47 F4 FE 23 A0 E7 00 13 00 00 00 83 20 C1 01 +03 24 81 01 13 01 01 02 67 80 00 00 13 01 01 FE +23 2E 11 00 23 2C 81 00 13 04 01 02 23 26 A4 FE +6F 00 C0 01 83 27 C4 FE 13 87 17 00 23 26 E4 FE +83 C7 07 00 13 85 07 00 EF F0 DF F6 83 27 C4 FE +83 C7 07 00 E3 90 07 FE 13 00 00 00 83 20 C1 01 +03 24 81 01 13 01 01 02 67 80 00 00 13 01 01 FF +23 26 81 00 13 04 01 01 B7 07 00 26 93 87 47 02 +37 27 00 00 13 07 87 80 23 A0 E7 00 B7 07 00 26 +93 87 87 02 37 27 00 00 13 07 87 80 23 A0 E7 00 +B7 07 00 26 93 87 C7 02 37 27 00 00 13 07 87 80 +23 A0 E7 00 B7 07 00 26 93 87 07 03 37 27 00 00 +13 07 87 80 23 A0 E7 00 B7 07 00 26 93 87 47 03 +37 27 00 00 13 07 87 80 23 A0 E7 00 B7 07 00 26 +93 87 87 03 37 27 00 00 13 07 87 80 23 A0 E7 00 +B7 07 00 26 93 87 C7 03 37 27 00 00 13 07 87 80 +23 A0 E7 00 B7 07 00 26 93 87 07 04 37 27 00 00 +13 07 87 80 23 A0 E7 00 B7 07 00 26 13 07 10 00 +23 A0 E7 00 13 00 00 00 B7 07 00 26 03 A7 07 00 +93 07 10 00 E3 0A F7 FE 13 00 00 00 03 24 C1 00 +13 01 01 01 67 80 00 00
diff --git a/verilog/dv/io_ports/io_ports.lst b/verilog/dv/io_ports/io_ports.lst new file mode 100644 index 0000000..a7bd073 --- /dev/null +++ b/verilog/dv/io_ports/io_ports.lst
@@ -0,0 +1,271 @@ + +io_ports.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +10000000 <_ftext>: +10000000: 0b00006f j 100000b0 <crt_init> +10000004: 00000013 nop +10000008: 00000013 nop +1000000c: 00000013 nop +10000010: 00000013 nop +10000014: 00000013 nop +10000018: 00000013 nop +1000001c: 00000013 nop + +10000020 <trap_entry>: +10000020: fe112e23 sw ra,-4(sp) +10000024: fe512c23 sw t0,-8(sp) +10000028: fe612a23 sw t1,-12(sp) +1000002c: fe712823 sw t2,-16(sp) +10000030: fea12623 sw a0,-20(sp) +10000034: feb12423 sw a1,-24(sp) +10000038: fec12223 sw a2,-28(sp) +1000003c: fed12023 sw a3,-32(sp) +10000040: fce12e23 sw a4,-36(sp) +10000044: fcf12c23 sw a5,-40(sp) +10000048: fd012a23 sw a6,-44(sp) +1000004c: fd112823 sw a7,-48(sp) +10000050: fdc12623 sw t3,-52(sp) +10000054: fdd12423 sw t4,-56(sp) +10000058: fde12223 sw t5,-60(sp) +1000005c: fdf12023 sw t6,-64(sp) +10000060: fc010113 addi sp,sp,-64 +10000064: 114000ef jal ra,10000178 <isr> +10000068: 03c12083 lw ra,60(sp) +1000006c: 03812283 lw t0,56(sp) +10000070: 03412303 lw t1,52(sp) +10000074: 03012383 lw t2,48(sp) +10000078: 02c12503 lw a0,44(sp) +1000007c: 02812583 lw a1,40(sp) +10000080: 02412603 lw a2,36(sp) +10000084: 02012683 lw a3,32(sp) +10000088: 01c12703 lw a4,28(sp) +1000008c: 01812783 lw a5,24(sp) +10000090: 01412803 lw a6,20(sp) +10000094: 01012883 lw a7,16(sp) +10000098: 00c12e03 lw t3,12(sp) +1000009c: 00812e83 lw t4,8(sp) +100000a0: 00412f03 lw t5,4(sp) +100000a4: 00012f83 lw t6,0(sp) +100000a8: 04010113 addi sp,sp,64 +100000ac: 30200073 mret + +100000b0 <crt_init>: +100000b0: f1000117 auipc sp,0xf1000 +100000b4: 75010113 addi sp,sp,1872 # 1000800 <_fstack> +100000b8: 00000517 auipc a0,0x0 +100000bc: f6850513 addi a0,a0,-152 # 10000020 <trap_entry> +100000c0: 30551073 csrw mtvec,a0 + +100000c4 <data_init>: +100000c4: 00000513 li a0,0 +100000c8: 00000593 li a1,0 +100000cc: 00000617 auipc a2,0x0 +100000d0: 2cc60613 addi a2,a2,716 # 10000398 <_etext> + +100000d4 <data_loop>: +100000d4: 00b50c63 beq a0,a1,100000ec <bss_init> +100000d8: 00062683 lw a3,0(a2) +100000dc: 00d52023 sw a3,0(a0) +100000e0: 00450513 addi a0,a0,4 +100000e4: 00460613 addi a2,a2,4 +100000e8: fedff06f j 100000d4 <data_loop> + +100000ec <bss_init>: +100000ec: 00000513 li a0,0 +100000f0: 00800593 li a1,8 + +100000f4 <bss_loop>: +100000f4: 00b50863 beq a0,a1,10000104 <bss_done> +100000f8: 00052023 sw zero,0(a0) +100000fc: 00450513 addi a0,a0,4 +10000100: ff5ff06f j 100000f4 <bss_loop> + +10000104 <bss_done>: +10000104: 00001537 lui a0,0x1 +10000108: 88050513 addi a0,a0,-1920 # 880 <_ebss+0x878> +1000010c: 30451073 csrw mie,a0 +10000110: 1ac000ef jal ra,100002bc <main> + +10000114 <infinit_loop>: +10000114: 0000006f j 10000114 <infinit_loop> + +10000118 <flush_cpu_icache>: +10000118: ff010113 addi sp,sp,-16 +1000011c: 00812623 sw s0,12(sp) +10000120: 01010413 addi s0,sp,16 +10000124: 00000013 nop +10000128: 00c12403 lw s0,12(sp) +1000012c: 01010113 addi sp,sp,16 +10000130: 00008067 ret + +10000134 <flush_cpu_dcache>: +10000134: ff010113 addi sp,sp,-16 +10000138: 00812623 sw s0,12(sp) +1000013c: 01010413 addi s0,sp,16 +10000140: 00000013 nop +10000144: 00c12403 lw s0,12(sp) +10000148: 01010113 addi sp,sp,16 +1000014c: 00008067 ret + +10000150 <irq_setmask>: +10000150: fe010113 addi sp,sp,-32 +10000154: 00812e23 sw s0,28(sp) +10000158: 02010413 addi s0,sp,32 +1000015c: fea42623 sw a0,-20(s0) +10000160: fec42783 lw a5,-20(s0) +10000164: bc079073 csrw 0xbc0,a5 +10000168: 00000013 nop +1000016c: 01c12403 lw s0,28(sp) +10000170: 02010113 addi sp,sp,32 +10000174: 00008067 ret + +10000178 <isr>: +10000178: ff010113 addi sp,sp,-16 +1000017c: 00112623 sw ra,12(sp) +10000180: 00812423 sw s0,8(sp) +10000184: 01010413 addi s0,sp,16 +10000188: 00000513 li a0,0 +1000018c: fc5ff0ef jal ra,10000150 <irq_setmask> +10000190: f00037b7 lui a5,0xf0003 +10000194: 03878793 addi a5,a5,56 # f0003038 <_etext+0xe0002ca0> +10000198: 00a00713 li a4,10 +1000019c: 00e7a023 sw a4,0(a5) +100001a0: f00037b7 lui a5,0xf0003 +100001a4: 03c78793 addi a5,a5,60 # f000303c <_etext+0xe0002ca4> +100001a8: 00020737 lui a4,0x20 +100001ac: 00e7a023 sw a4,0(a5) +100001b0: 00100713 li a4,1 +100001b4: 00e01023 sh a4,0(zero) # 0 <__DYNAMIC> +100001b8: 00000013 nop +100001bc: 00c12083 lw ra,12(sp) +100001c0: 00812403 lw s0,8(sp) +100001c4: 01010113 addi sp,sp,16 +100001c8: 00008067 ret + +100001cc <flush_cpu_icache>: +100001cc: ff010113 addi sp,sp,-16 +100001d0: 00812623 sw s0,12(sp) +100001d4: 01010413 addi s0,sp,16 +100001d8: 00000013 nop +100001dc: 00c12403 lw s0,12(sp) +100001e0: 01010113 addi sp,sp,16 +100001e4: 00008067 ret + +100001e8 <flush_cpu_dcache>: +100001e8: ff010113 addi sp,sp,-16 +100001ec: 00812623 sw s0,12(sp) +100001f0: 01010413 addi s0,sp,16 +100001f4: 00000013 nop +100001f8: 00c12403 lw s0,12(sp) +100001fc: 01010113 addi sp,sp,16 +10000200: 00008067 ret + +10000204 <putchar>: +10000204: fe010113 addi sp,sp,-32 +10000208: 00112e23 sw ra,28(sp) +1000020c: 00812c23 sw s0,24(sp) +10000210: 02010413 addi s0,sp,32 +10000214: 00050793 mv a5,a0 +10000218: fef407a3 sb a5,-17(s0) +1000021c: fef44703 lbu a4,-17(s0) +10000220: 00a00793 li a5,10 +10000224: 00f71663 bne a4,a5,10000230 <putchar+0x2c> +10000228: 00d00513 li a0,13 +1000022c: fd9ff0ef jal ra,10000204 <putchar> +10000230: 00000013 nop +10000234: f00067b7 lui a5,0xf0006 +10000238: 80478793 addi a5,a5,-2044 # f0005804 <_etext+0xe000546c> +1000023c: 0007a703 lw a4,0(a5) +10000240: 00100793 li a5,1 +10000244: fef708e3 beq a4,a5,10000234 <putchar+0x30> +10000248: f00067b7 lui a5,0xf0006 +1000024c: 80078793 addi a5,a5,-2048 # f0005800 <_etext+0xe0005468> +10000250: fef44703 lbu a4,-17(s0) +10000254: 00e7a023 sw a4,0(a5) +10000258: 00000013 nop +1000025c: 01c12083 lw ra,28(sp) +10000260: 01812403 lw s0,24(sp) +10000264: 02010113 addi sp,sp,32 +10000268: 00008067 ret + +1000026c <print>: +1000026c: fe010113 addi sp,sp,-32 +10000270: 00112e23 sw ra,28(sp) +10000274: 00812c23 sw s0,24(sp) +10000278: 02010413 addi s0,sp,32 +1000027c: fea42623 sw a0,-20(s0) +10000280: 01c0006f j 1000029c <print+0x30> +10000284: fec42783 lw a5,-20(s0) +10000288: 00178713 addi a4,a5,1 +1000028c: fee42623 sw a4,-20(s0) +10000290: 0007c783 lbu a5,0(a5) +10000294: 00078513 mv a0,a5 +10000298: f6dff0ef jal ra,10000204 <putchar> +1000029c: fec42783 lw a5,-20(s0) +100002a0: 0007c783 lbu a5,0(a5) +100002a4: fe0790e3 bnez a5,10000284 <print+0x18> +100002a8: 00000013 nop +100002ac: 01c12083 lw ra,28(sp) +100002b0: 01812403 lw s0,24(sp) +100002b4: 02010113 addi sp,sp,32 +100002b8: 00008067 ret + +100002bc <main>: +100002bc: ff010113 addi sp,sp,-16 +100002c0: 00812623 sw s0,12(sp) +100002c4: 01010413 addi s0,sp,16 +100002c8: 260007b7 lui a5,0x26000 +100002cc: 02478793 addi a5,a5,36 # 26000024 <_etext+0x15fffc8c> +100002d0: 00002737 lui a4,0x2 +100002d4: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +100002d8: 00e7a023 sw a4,0(a5) +100002dc: 260007b7 lui a5,0x26000 +100002e0: 02878793 addi a5,a5,40 # 26000028 <_etext+0x15fffc90> +100002e4: 00002737 lui a4,0x2 +100002e8: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +100002ec: 00e7a023 sw a4,0(a5) +100002f0: 260007b7 lui a5,0x26000 +100002f4: 02c78793 addi a5,a5,44 # 2600002c <_etext+0x15fffc94> +100002f8: 00002737 lui a4,0x2 +100002fc: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +10000300: 00e7a023 sw a4,0(a5) +10000304: 260007b7 lui a5,0x26000 +10000308: 03078793 addi a5,a5,48 # 26000030 <_etext+0x15fffc98> +1000030c: 00002737 lui a4,0x2 +10000310: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +10000314: 00e7a023 sw a4,0(a5) +10000318: 260007b7 lui a5,0x26000 +1000031c: 03478793 addi a5,a5,52 # 26000034 <_etext+0x15fffc9c> +10000320: 00002737 lui a4,0x2 +10000324: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +10000328: 00e7a023 sw a4,0(a5) +1000032c: 260007b7 lui a5,0x26000 +10000330: 03878793 addi a5,a5,56 # 26000038 <_etext+0x15fffca0> +10000334: 00002737 lui a4,0x2 +10000338: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +1000033c: 00e7a023 sw a4,0(a5) +10000340: 260007b7 lui a5,0x26000 +10000344: 03c78793 addi a5,a5,60 # 2600003c <_etext+0x15fffca4> +10000348: 00002737 lui a4,0x2 +1000034c: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +10000350: 00e7a023 sw a4,0(a5) +10000354: 260007b7 lui a5,0x26000 +10000358: 04078793 addi a5,a5,64 # 26000040 <_etext+0x15fffca8> +1000035c: 00002737 lui a4,0x2 +10000360: 80870713 addi a4,a4,-2040 # 1808 <_ebss+0x1800> +10000364: 00e7a023 sw a4,0(a5) +10000368: 260007b7 lui a5,0x26000 +1000036c: 00100713 li a4,1 +10000370: 00e7a023 sw a4,0(a5) # 26000000 <_etext+0x15fffc68> +10000374: 00000013 nop +10000378: 260007b7 lui a5,0x26000 +1000037c: 0007a703 lw a4,0(a5) # 26000000 <_etext+0x15fffc68> +10000380: 00100793 li a5,1 +10000384: fef70ae3 beq a4,a5,10000378 <main+0xbc> +10000388: 00000013 nop +1000038c: 00c12403 lw s0,12(sp) +10000390: 01010113 addi sp,sp,16 +10000394: 00008067 ret
diff --git a/verilog/dv/io_ports/io_ports_tb.v b/verilog/dv/io_ports/io_ports_tb.v index f7628bc..8da4873 100644 --- a/verilog/dv/io_ports/io_ports_tb.v +++ b/verilog/dv/io_ports/io_ports_tb.v
@@ -17,32 +17,31 @@ `timescale 1 ns / 1 ps -`include "uprj_netlists.v" -`include "caravel_netlists.v" -`include "spiflash.v" +// `include "uprj_netlists.v" +// `include "caravel_netlists.v" +// `include "spiflash.v" module io_ports_tb; reg clock; reg RSTB; reg CSB; reg power1, power2; - reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; // assign mprj_io_0 = {mprj_io[8:4],mprj_io[2:0]}; - assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz; + // assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz; // assign mprj_io[3] = 1'b1; // External clock is used by default. Make this artificially fast for the // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #12.5 clock <= (clock === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin clock = 0; @@ -55,7 +54,7 @@ // Repeat cycles of 1000 clock edges as needed to complete testbench repeat (25) begin repeat (1000) @(posedge clock); - // $display("+1000 cycles"); + $display("+1000 cycles"); end $display("%c[1;31m",27); `ifdef GL @@ -69,18 +68,22 @@ initial begin // Observe Output pins [7:0] - wait(mprj_io_0 == 8'h01); - wait(mprj_io_0 == 8'h02); - wait(mprj_io_0 == 8'h03); - wait(mprj_io_0 == 8'h04); - wait(mprj_io_0 == 8'h05); - wait(mprj_io_0 == 8'h06); - wait(mprj_io_0 == 8'h07); - wait(mprj_io_0 == 8'h08); - wait(mprj_io_0 == 8'h09); - wait(mprj_io_0 == 8'h0A); - wait(mprj_io_0 == 8'hFF); - wait(mprj_io_0 == 8'h00); + wait(mprj_io_0 == 8'h01); + wait(mprj_io_0 == 8'h02); + wait(mprj_io_0 == 8'h03); + wait(mprj_io_0 == 8'h04); + wait(mprj_io_0 == 8'h05); + wait(mprj_io_0 == 8'h06); + wait(mprj_io_0 == 8'h07); + wait(mprj_io_0 == 8'h08); + wait(mprj_io_0 == 8'h09); + wait(mprj_io_0 == 8'h0A); + wait(mprj_io_0 == 8'h0A); + wait(mprj_io_0 == 8'h0A); + wait(mprj_io_0 == 8'h0A); + wait(mprj_io_0 == 8'h0A); + wait(mprj_io_0 == 8'hFF); + wait(mprj_io_0 == 8'h00); `ifdef GL $display("Monitor: Test 1 Mega-Project IO (GL) Passed"); @@ -92,26 +95,18 @@ initial begin RSTB <= 1'b0; - CSB <= 1'b1; // Force CSB high + #1000; + RSTB <= 1'b1; // Release reset #2000; - RSTB <= 1'b1; // Release reset - #170000; - CSB = 1'b0; // CSB can be released end initial begin // Power-up sequence power1 <= 1'b0; power2 <= 1'b0; - power3 <= 1'b0; - power4 <= 1'b0; - #100; + #200; power1 <= 1'b1; - #100; + #200; power2 <= 1'b1; - #100; - power3 <= 1'b1; - #100; - power4 <= 1'b1; end always @(mprj_io) begin @@ -123,30 +118,36 @@ wire flash_io0; wire flash_io1; - wire VDD3V3 = power1; - wire VDD1V8 = power2; - wire USER_VDD3V3 = power3; - wire USER_VDD1V8 = power4; - wire VSS = 1'b0; + wire VDD3V3; + wire VDD1V8; + wire VSS; + + assign VDD3V3 = power1; + assign VDD1V8 = power2; + assign VSS = 1'b0; caravel uut ( .vddio (VDD3V3), + .vddio_2 (VDD3V3), .vssio (VSS), + .vssio_2 (VSS), .vdda (VDD3V3), .vssa (VSS), .vccd (VDD1V8), .vssd (VSS), - .vdda1 (USER_VDD3V3), - .vdda2 (USER_VDD3V3), + .vdda1 (VDD3V3), + .vdda1_2 (VDD3V3), + .vdda2 (VDD3V3), .vssa1 (VSS), + .vssa1_2 (VSS), .vssa2 (VSS), - .vccd1 (USER_VDD1V8), - .vccd2 (USER_VDD1V8), + .vccd1 (VDD1V8), + .vccd2 (VDD1V8), .vssd1 (VSS), .vssd2 (VSS), - .clock (clock), + .clock (clock), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0),
diff --git a/verilog/dv/la_test1/Makefile b/verilog/dv/la_test1/Makefile index ba979f7..508ac7b 100644 --- a/verilog/dv/la_test1/Makefile +++ b/verilog/dv/la_test1/Makefile
@@ -14,83 +14,18 @@ # # SPDX-License-Identifier: Apache-2.0 -## PDK -PDK_PATH = $(PDK_ROOT)/sky130A -## Caravel Pointers -CARAVEL_ROOT ?= ../../../caravel -CARAVEL_PATH ?= $(CARAVEL_ROOT) -CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel -CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog -CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl -CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel + +PWDD := $(shell pwd) +BLOCKS := $(shell basename $(PWDD)) -## User Project Pointers -UPRJ_VERILOG_PATH ?= ../../../verilog -UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl -UPRJ_BEHAVIOURAL_MODELS = ../ +# ---- Include Partitioned Makefiles ---- -## RISCV GCC -GCC_PATH?=/ef/apps/bin -GCC_PREFIX?=riscv32-unknown-elf +CONFIG = caravel_user_porject -## Simulation mode: RTL/GL -SIM_DEFINES = -DFUNCTIONAL -DSIM -SIM?=RTL +include $(MCW_ROOT)/verilog/dv/make/env.makefile +include $(MCW_ROOT)/verilog/dv/make/var.makefile +include $(MCW_ROOT)/verilog/dv/make/cpu.makefile +include $(MCW_ROOT)/verilog/dv/make/sim.makefile -.SUFFIXES: -PATTERN = la_test1 - -all: ${PATTERN:=.vcd} - -hex: ${PATTERN:=.hex} - -%.vvp: %_tb.v %.hex -ifeq ($(SIM),RTL) - iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ - $< -o $@ -else - iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \ - $< -o $@ -endif - -%.vcd: %.vvp - vvp $< - -%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env - ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $< - -%.hex: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ - # to fix flash base address - sed -i 's/@10000000/@00000000/g' $@ - -%.bin: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ - -check-env: -ifndef PDK_ROOT - $(error PDK_ROOT is undefined, please export it before running make) -endif -ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) - $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) -endif -ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc )) - $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make) -endif -# check for efabless style installation -ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) -SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE -endif - -# ---- Clean ---- - -clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log - -.PHONY: clean hex all
diff --git a/verilog/dv/la_test1/la_test1.c b/verilog/dv/la_test1/la_test1.c index 220bdfe..96b56bd 100644 --- a/verilog/dv/la_test1/la_test1.c +++ b/verilog/dv/la_test1/la_test1.c
@@ -16,8 +16,8 @@ */ // This include is relative to $CARAVEL_PATH (see Makefile) -#include "verilog/dv/caravel/defs.h" -#include "verilog/dv/caravel/stub.c" +#include <defs.h> +#include <stub.c> // -------------------------------------------------------- @@ -31,11 +31,17 @@ void main() { + int j; /* Set up the housekeeping SPI to be connected internally so */ /* that external pin changes don't affect it. */ - reg_spimaster_config = 0xa002; // Enable, prescaler = 2, + // reg_spi_enable = 1; + // reg_spimaster_cs = 0x00000; + + // reg_spimaster_control = 0x0801; + + // reg_spimaster_control = 0xa002; // Enable, prescaler = 2, // connect to housekeeping SPI // Connect the housekeeping SPI to the SPI master @@ -88,19 +94,19 @@ reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT; // Set UART clock to 64 kbaud (enable before I/O configuration) - reg_uart_clkdiv = 625; + // reg_uart_clkdiv = 625; reg_uart_enable = 1; - /* Apply configuration */ - reg_mprj_xfer = 1; - while (reg_mprj_xfer == 1); + // Now, apply the configuration + reg_mprj_xfer = 1; + while (reg_mprj_xfer == 1); - // Configure LA probes [31:0], [127:64] as inputs to the cpu + // Configure LA probes [31:0], [127:64] as inputs to the cpu // Configure LA probes [63:32] as outputs from the cpu - reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0] - reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32] - reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64] - reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96] + reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0] + reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32] + reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64] + reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96] // Flag start of the test reg_mprj_datal = 0xAB400000; @@ -109,10 +115,10 @@ reg_la1_data = 0x00000000; // Configure LA probes from [63:32] as inputs to disable counter write - reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; + reg_la1_oenb = reg_la1_iena = 0x00000000; while (1) { - if (reg_la0_data > 0x1F4) { + if (reg_la0_data_in > 0x1F4) { reg_mprj_datal = 0xAB410000; break; }
diff --git a/verilog/dv/la_test1/la_test1_tb.v b/verilog/dv/la_test1/la_test1_tb.v index 626e390..93fafeb 100644 --- a/verilog/dv/la_test1/la_test1_tb.v +++ b/verilog/dv/la_test1/la_test1_tb.v
@@ -17,10 +17,10 @@ `timescale 1 ns / 1 ps -`include "uprj_netlists.v" -`include "caravel_netlists.v" -`include "spiflash.v" -`include "tbuart.v" +// `include "uprj_netlists.v" +// `include "caravel_netlists.v" +// `include "spiflash.v" +// `include "tbuart.v" module la_test1_tb; reg clock; @@ -29,9 +29,9 @@ reg power1, power2; - wire gpio; + wire gpio; wire uart_tx; - wire [37:0] mprj_io; + wire [37:0] mprj_io; wire [15:0] checkbits; assign checkbits = mprj_io[31:16]; @@ -43,18 +43,31 @@ clock = 0; end - assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz; + // assign mprj_io[3] = 1'b1; initial begin - // $dumpfile("la_test1.vcd"); - // $dumpvars(0, la_test1_tb); + $dumpfile("la_test1.vcd"); + $dumpvars(0, la_test1_tb); // Repeat cycles of 1000 clock edges as needed to complete testbench - repeat (200) begin + // repeat (200) begin + // repeat (1000) @(posedge clock); + // $display("+1000 cycles"); + // end + // $display("%c[1;31m",27); + // `ifdef GL + // $display ("Monitor: Timeout, Test LA (GL) Failed"); + // `else + // $display ("Monitor: Timeout, Test LA (RTL) Failed"); + // `endif + // $display("%c[0m",27); + // $finish; + // $display("Wait for UART o/p"); + repeat (450) begin repeat (1000) @(posedge clock); - // $display("+1000 cycles"); + // Diagnostic. . . interrupts output pattern. end - $display("%c[1;31m",27); + $display("%c[1;31m",27); `ifdef GL $display ("Monitor: Timeout, Test LA (GL) Failed"); `else @@ -64,22 +77,29 @@ $finish; end - initial begin - wait(checkbits == 16'hAB40); - $display("LA Test 1 started"); - wait(checkbits == 16'hAB41); - wait(checkbits == 16'hAB51); - #10000; - $finish; - end + // initial begin + // wait(checkbits == 16'hAB40); + // $display("LA Test 1 started"); + // wait(checkbits == 16'hAB41); + // wait(checkbits == 16'hAB51); + // #10000; + // $finish; + // end + + // initial begin + // RSTB <= 1'b0; + // CSB <= 1'b1; // Force CSB high + // #2000; + // RSTB <= 1'b1; // Release reset + // #170000; + // CSB = 1'b0; // CSB can be released + // end initial begin RSTB <= 1'b0; - CSB <= 1'b1; // Force CSB high + #1000; + RSTB <= 1'b1; // Release reset #2000; - RSTB <= 1'b1; // Release reset - #170000; - CSB = 1'b0; // CSB can be released end initial begin // Power-up sequence @@ -91,37 +111,61 @@ power2 <= 1'b1; end - wire flash_csb; + always @(checkbits) begin + if(checkbits == 16'hAB40) begin + $display("LA Test 1 started"); + end + else if(checkbits == 16'hAB41) begin + $display("First check passed"); + end + else if(checkbits == 16'hAB51) begin + `ifdef GL + $display("UART Test (GL) passed"); + `else + $display("UART Test (RTL) passed"); + `endif + $finish; + end + end + + wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; wire VDD1V8; - wire VDD3V3; + wire VDD3V3; wire VSS; assign VDD3V3 = power1; assign VDD1V8 = power2; assign VSS = 1'b0; + assign mprj_io[3] = 1; // Force CSB high. + assign mprj_io[0] = 0; // Disable debug mode + caravel uut ( .vddio (VDD3V3), + .vddio_2 (VDD3V3), .vssio (VSS), + .vssio_2 (VSS), .vdda (VDD3V3), .vssa (VSS), .vccd (VDD1V8), .vssd (VSS), .vdda1 (VDD3V3), + .vdda1_2 (VDD3V3), .vdda2 (VDD3V3), .vssa1 (VSS), + .vssa1_2 (VSS), .vssa2 (VSS), .vccd1 (VDD1V8), .vccd2 (VDD1V8), .vssd1 (VSS), .vssd2 (VSS), - .clock (clock), + .clock (clock), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0),
diff --git a/verilog/dv/la_test2/Makefile b/verilog/dv/la_test2/Makefile index 0435500..508ac7b 100644 --- a/verilog/dv/la_test2/Makefile +++ b/verilog/dv/la_test2/Makefile
@@ -14,83 +14,18 @@ # # SPDX-License-Identifier: Apache-2.0 -## PDK -PDK_PATH = $(PDK_ROOT)/sky130A -## Caravel Pointers -CARAVEL_ROOT ?= ../../../caravel -CARAVEL_PATH ?= $(CARAVEL_ROOT) -CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel -CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog -CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl -CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel + +PWDD := $(shell pwd) +BLOCKS := $(shell basename $(PWDD)) -## User Project Pointers -UPRJ_VERILOG_PATH ?= ../../../verilog -UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl -UPRJ_BEHAVIOURAL_MODELS = ../ +# ---- Include Partitioned Makefiles ---- -## RISCV GCC -GCC_PATH?=/ef/apps/bin -GCC_PREFIX?=riscv32-unknown-elf +CONFIG = caravel_user_porject -## Simulation mode: RTL/GL -SIM_DEFINES = -DFUNCTIONAL -DSIM -SIM?=RTL +include $(MCW_ROOT)/verilog/dv/make/env.makefile +include $(MCW_ROOT)/verilog/dv/make/var.makefile +include $(MCW_ROOT)/verilog/dv/make/cpu.makefile +include $(MCW_ROOT)/verilog/dv/make/sim.makefile -.SUFFIXES: -PATTERN = la_test2 - -all: ${PATTERN:=.vcd} - -hex: ${PATTERN:=.hex} - -%.vvp: %_tb.v %.hex -ifeq ($(SIM),RTL) - iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ - $< -o $@ -else - iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \ - $< -o $@ -endif - -%.vcd: %.vvp - vvp $< - -%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env - ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $< - -%.hex: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ - # to fix flash base address - sed -i 's/@10000000/@00000000/g' $@ - -%.bin: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ - -check-env: -ifndef PDK_ROOT - $(error PDK_ROOT is undefined, please export it before running make) -endif -ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) - $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) -endif -ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc )) - $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make) -endif -# check for efabless style installation -ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) -SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE -endif - -# ---- Clean ---- - -clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log - -.PHONY: clean hex all
diff --git a/verilog/dv/la_test2/la_test2.c b/verilog/dv/la_test2/la_test2.c index 5875432..25fad48 100644 --- a/verilog/dv/la_test2/la_test2.c +++ b/verilog/dv/la_test2/la_test2.c
@@ -16,8 +16,8 @@ */ // This include is relative to $CARAVEL_PATH (see Makefile) -#include "verilog/dv/caravel/defs.h" -#include "verilog/dv/caravel/stub.c" +#include <defs.h> +#include <stub.c> /* MPRJ LA Test: @@ -34,7 +34,8 @@ /* Set up the housekeeping SPI to be connected internally so */ /* that external pin changes don't affect it. */ - reg_spimaster_config = 0xa002; // Enable, prescaler = 2, + // reg_spimaster_config = 0xa002; // Enable, prescaler = 2, + reg_spi_enable = 1; // connect to housekeeping SPI // Connect the housekeeping SPI to the SPI master @@ -83,16 +84,16 @@ while (reg_mprj_xfer == 1); // Configure All LA probes as inputs to the cpu - reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0] - reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32] - reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64] - reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96] + reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0] + reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32] + reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64] + reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96] // Flag start of the test reg_mprj_datal = 0xAB600000; // Configure LA[64] LA[65] as outputs from the cpu - reg_la2_oenb = reg_la2_iena = 0xFFFFFFFC; + reg_la2_oenb = reg_la2_iena = 0x00000003; // Set clk & reset to one reg_la2_data = 0x00000003; @@ -106,9 +107,14 @@ reg_la2_data = 0x00000000 | clk; } - if (reg_la0_data >= 0x05) { - reg_mprj_datal = 0xAB610000; - } + // reg_mprj_datal = 0xAB610000; + + while (1){ + if (reg_la0_data_in >= 0x05) { + reg_mprj_datal = 0xAB610000; + break; + } + + } } -
diff --git a/verilog/dv/la_test2/la_test2_tb.v b/verilog/dv/la_test2/la_test2_tb.v index e09905e..2acf43d 100644 --- a/verilog/dv/la_test2/la_test2_tb.v +++ b/verilog/dv/la_test2/la_test2_tb.v
@@ -17,9 +17,9 @@ `timescale 1 ns / 1 ps -`include "uprj_netlists.v" -`include "caravel_netlists.v" -`include "spiflash.v" +// `include "uprj_netlists.v" +// `include "caravel_netlists.v" +// `include "spiflash.v" module la_test2_tb; reg clock; @@ -28,12 +28,11 @@ reg power1, power2; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [15:0] checkbits; assign checkbits = mprj_io[31:16]; - assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz; always #12.5 clock <= (clock === 1'b0); @@ -46,9 +45,9 @@ $dumpvars(0, la_test2_tb); // Repeat cycles of 1000 clock edges as needed to complete testbench - repeat (30) begin + repeat (75) begin repeat (1000) @(posedge clock); - // $display("+1000 cycles"); + $display("+1000 cycles"); end $display("%c[1;31m",27); `ifdef GL @@ -61,20 +60,18 @@ end initial begin - wait(checkbits == 16'h AB60); + wait(checkbits == 16'hAB60); $display("Monitor: Test 2 MPRJ-Logic Analyzer Started"); - wait(checkbits == 16'h AB61); + wait(checkbits == 16'hAB61); $display("Monitor: Test 2 MPRJ-Logic Analyzer Passed"); $finish; end initial begin RSTB <= 1'b0; - CSB <= 1'b1; // Force CSB high + #1000; + RSTB <= 1'b1; // Release reset #2000; - RSTB <= 1'b1; // Release reset - #170000; - CSB = 1'b0; // CSB can be released end initial begin // Power-up sequence @@ -99,24 +96,31 @@ assign VDD1V8 = power2; assign VSS = 1'b0; + assign mprj_io[3] = 1; // Force CSB high. + assign mprj_io[0] = 0; // Disable debug mode + caravel uut ( .vddio (VDD3V3), + .vddio_2 (VDD3V3), .vssio (VSS), + .vssio_2 (VSS), .vdda (VDD3V3), .vssa (VSS), .vccd (VDD1V8), .vssd (VSS), .vdda1 (VDD3V3), + .vdda1_2 (VDD3V3), .vdda2 (VDD3V3), .vssa1 (VSS), + .vssa1_2 (VSS), .vssa2 (VSS), .vccd1 (VDD1V8), .vccd2 (VDD1V8), .vssd1 (VSS), .vssd2 (VSS), - .clock (clock), + .clock (clock), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0),
diff --git a/verilog/dv/mprj_stimulus/Makefile b/verilog/dv/mprj_stimulus/Makefile index b0e4051..508ac7b 100644 --- a/verilog/dv/mprj_stimulus/Makefile +++ b/verilog/dv/mprj_stimulus/Makefile
@@ -14,88 +14,18 @@ # # SPDX-License-Identifier: Apache-2.0 -## PDK -PDK_PATH = $(PDK_ROOT)/sky130A -## Caravel Pointers -CARAVEL_ROOT ?= ../../../caravel -CARAVEL_PATH ?= $(CARAVEL_ROOT) -CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel -CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog -CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl -CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel + +PWDD := $(shell pwd) +BLOCKS := $(shell basename $(PWDD)) -## Management SoC Pointers -MGMT_SOC_PATH ?= ../../../../caravel_pico -MGMT_SOC_VERILOG_PATH = $(MGMT_SOC_PATH)/verilog -MGMT_SOC_RTL_PATH = $(MGMT_SOC_PATH)/verilog/rtl +# ---- Include Partitioned Makefiles ---- -## User Project Pointers -UPRJ_VERILOG_PATH ?= ../../../verilog -UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl -UPRJ_BEHAVIOURAL_MODELS = ../ +CONFIG = caravel_user_porject -## RISCV GCC -GCC_PATH?=/ef/apps/bin -GCC_PREFIX?=riscv32-unknown-elf +include $(MCW_ROOT)/verilog/dv/make/env.makefile +include $(MCW_ROOT)/verilog/dv/make/var.makefile +include $(MCW_ROOT)/verilog/dv/make/cpu.makefile +include $(MCW_ROOT)/verilog/dv/make/sim.makefile -## Simulation mode: RTL/GL -SIM_DEFINES = -DFUNCTIONAL -DSIM -SIM?=RTL -.SUFFIXES: - -PATTERN = mprj_stimulus - -all: ${PATTERN:=.vcd} - -hex: ${PATTERN:=.hex} - -%.vvp: %_tb.v %.hex -ifeq ($(SIM),RTL) - iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(MGMT_SOC_RTL_PATH) \ - $< -o $@ -else - iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) -I $(MGMT_SOC_VERILOG_PATH) \ - $< -o $@ -endif - -%.vcd: %.vvp - vvp $< - -%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env - ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $< - -%.hex: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ - # to fix flash base address - sed -i 's/@10000000/@00000000/g' $@ - -%.bin: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ - -check-env: -ifndef PDK_ROOT - $(error PDK_ROOT is undefined, please export it before running make) -endif -ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) - $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) -endif -ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc )) - $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make) -endif -# check for efabless style installation -ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) -SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE -endif - -# ---- Clean ---- - -clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log - -.PHONY: clean hex all
diff --git a/verilog/dv/mprj_stimulus/mprj_stimulus.c b/verilog/dv/mprj_stimulus/mprj_stimulus.c index 7d2c29a..65633bc 100644 --- a/verilog/dv/mprj_stimulus/mprj_stimulus.c +++ b/verilog/dv/mprj_stimulus/mprj_stimulus.c
@@ -16,7 +16,7 @@ */ // This include is relative to $CARAVEL_PATH (see Makefile) -#include "verilog/dv/caravel/defs.h" +#include <defs.h> // -------------------------------------------------------- @@ -34,7 +34,9 @@ uint32_t testval; - reg_hkspi_disable = 1; // Shut off the housekeeping SPI, + reg_spi_enable = 0; + + // reg_spimaster_cs = 0x00000000; // Shut off the housekeeping SPI, // so we can use the pins. reg_mprj_datal = 0x00000000; @@ -94,10 +96,10 @@ // Configure LA probes [31:0], [127:64] as inputs to the cpu // Configure LA probes [63:32] as outputs from the cpu - reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0] - reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32] - reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64] - reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96] + reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0] + reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32] + reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64] + reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96] // Flag start of the test reg_mprj_datal = 0xAB400000; @@ -106,7 +108,7 @@ reg_la1_data = 0x00000000; // Configure LA probes from [63:32] as inputs to disable counter write - reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; + reg_la1_oenb = reg_la1_iena = 0x00000000; reg_mprj_datal = 0xAB410000; reg_mprj_datah = 0x00000000;
diff --git a/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v b/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v index 0ac0b42..15d7849 100644 --- a/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v +++ b/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v
@@ -17,10 +17,10 @@ `timescale 1 ns / 1 ps -`include "uprj_netlists.v" -`include "caravel_netlists.v" -`include "spiflash.v" -`include "tbuart.v" +// `include "uprj_netlists.v" +// `include "caravel_netlists.v" +// `include "spiflash.v" +// `include "tbuart.v" module mprj_stimulus_tb; // Signals declaration @@ -33,10 +33,15 @@ wire [37:0] mprj_io; wire [15:0] checkbits; wire [3:0] status; + wire [1:0] lol; + wire [15:0] lol2; // Signals Assignment assign checkbits = mprj_io[31:16]; assign status = mprj_io[35:32]; + assign lol = mprj_io[37:36]; + assign lol2 = mprj_io[15:0]; + // Force CSB high until simulation is underway // Note: The CSB GPIO pin default needs to be set to a pull-up. . . @@ -53,7 +58,7 @@ $dumpvars(0, mprj_stimulus_tb); // Repeat cycles of 1000 clock edges as needed to complete testbench - repeat (150) begin + repeat (70) begin repeat (1000) @(posedge clock); end $display("%c[1;31m",27); @@ -68,14 +73,22 @@ wait(status == 4'ha); wait(status == 4'h5); + $display("Monitor: mprj_stimulus test 1 Passed"); + // Values reflect copying user-controlled outputs to memory and back // to management-controlled outputs. Note that there is a slight // discrepancy in timing when using gate level simulation; either // of the specified values is okay. wait(checkbits == 16'h0840 || checkbits == 16'h0841); + + $display("Monitor: mprj_stimulus test 2 Passed"); + + wait(checkbits == 16'h0a00 || checkbits == 16'h0a01); + $display("Monitor: mprj_stimulus test 3 Passed"); + wait(checkbits == 16'hAB51); $display("Monitor: mprj_stimulus test Passed"); #10000; @@ -84,12 +97,11 @@ // Reset Operation initial begin - RSTB <= 1'b0; - CSB <= 1'b1; - #2000; - RSTB <= 1'b1; // Release reset - #200000; - CSB <= 1'bz; // Stop driving CSB + RSTB <= 1'b0; + CSB <= 1'b1; + #1000; + RSTB <= 1'b1; // Release reset + #2000; end initial begin // Power-up sequence @@ -111,28 +123,32 @@ wire VSS = 1'b0; caravel uut ( - .vddio (VDD3V3), - .vssio (VSS), - .vdda (VDD3V3), - .vssa (VSS), - .vccd (VDD1V8), - .vssd (VSS), - .vdda1 (VDD3V3), - .vdda2 (VDD3V3), - .vssa1 (VSS), - .vssa2 (VSS), - .vccd1 (VDD1V8), - .vccd2 (VDD1V8), - .vssd1 (VSS), - .vssd2 (VSS), - .clock (clock), - .gpio (gpio), - .mprj_io (mprj_io), - .flash_csb(flash_csb), - .flash_clk(flash_clk), - .flash_io0(flash_io0), - .flash_io1(flash_io1), - .resetb (RSTB) + .vddio (VDD3V3), + .vddio_2 (VDD3V3), + .vssio (VSS), + .vssio_2 (VSS), + .vdda (VDD3V3), + .vssa (VSS), + .vccd (VDD1V8), + .vssd (VSS), + .vdda1 (VDD3V3), + .vdda1_2 (VDD3V3), + .vdda2 (VDD3V3), + .vssa1 (VSS), + .vssa1_2 (VSS), + .vssa2 (VSS), + .vccd1 (VDD1V8), + .vccd2 (VDD1V8), + .vssd1 (VSS), + .vssd2 (VSS), + .clock (clock), + .gpio (gpio), + .mprj_io (mprj_io), + .flash_csb(flash_csb), + .flash_clk(flash_clk), + .flash_io0(flash_io0), + .flash_io1(flash_io1), + .resetb (RSTB) );
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile index 1c784c6..508ac7b 100644 --- a/verilog/dv/wb_port/Makefile +++ b/verilog/dv/wb_port/Makefile
@@ -14,83 +14,18 @@ # # SPDX-License-Identifier: Apache-2.0 -## PDK -PDK_PATH = $(PDK_ROOT)/sky130A -## Caravel Pointers -CARAVEL_ROOT ?= ../../../caravel -CARAVEL_PATH ?= $(CARAVEL_ROOT) -CARAVEL_FIRMWARE_PATH = $(CARAVEL_PATH)/verilog/dv/caravel -CARAVEL_VERILOG_PATH = $(CARAVEL_PATH)/verilog -CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl -CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel + +PWDD := $(shell pwd) +BLOCKS := $(shell basename $(PWDD)) -## User Project Pointers -UPRJ_VERILOG_PATH ?= ../../../verilog -UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl -UPRJ_BEHAVIOURAL_MODELS = ../ +# ---- Include Partitioned Makefiles ---- -## RISCV GCC -GCC_PATH?=/ef/apps/bin -GCC_PREFIX?=riscv32-unknown-elf +CONFIG = caravel_user_porject -## Simulation mode: RTL/GL -SIM_DEFINES = -DFUNCTIONAL -DSIM -SIM?=RTL +include $(MCW_ROOT)/verilog/dv/make/env.makefile +include $(MCW_ROOT)/verilog/dv/make/var.makefile +include $(MCW_ROOT)/verilog/dv/make/cpu.makefile +include $(MCW_ROOT)/verilog/dv/make/sim.makefile -.SUFFIXES: -PATTERN = wb_port - -all: ${PATTERN:=.vcd} - -hex: ${PATTERN:=.hex} - -%.vvp: %_tb.v %.hex -ifeq ($(SIM),RTL) - iverilog $(SIM_DEFINES) -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \ - $< -o $@ -else - iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \ - -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \ - -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \ - $< -o $@ -endif - -%.vcd: %.vvp - vvp $< - -%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env - ${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $< - -%.hex: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ - # to fix flash base address - sed -i 's/@10000000/@00000000/g' $@ - -%.bin: %.elf - ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@ - -check-env: -ifndef PDK_ROOT - $(error PDK_ROOT is undefined, please export it before running make) -endif -ifeq (,$(wildcard $(PDK_ROOT)/sky130A)) - $(error $(PDK_ROOT)/sky130A not found, please install pdk before running make) -endif -ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc )) - $(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make) -endif -# check for efabless style installation -ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog)) -SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE -endif - -# ---- Clean ---- - -clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log - -.PHONY: clean hex all