From eb97c69c53eebb0a7f87e8f73ecc92dfabd0a9a4 Mon Sep 17 00:00:00 2001 From: dam1n19 <dam1n19@soton.ac.uk> Date: Wed, 3 May 2023 15:21:26 +0100 Subject: [PATCH] SOC1-167: Added test list infrastructure and the ability to build testcodes in project repository --- .gitignore | 5 +- software/common/demos/interrupt_demo.c | 14 ++-- .../common/validation/uart_driver_tests.c | 16 ++--- software/common/validation/uart_tests.c | 36 +++++----- system/makefile | 67 +++++++++++++------ system/testcodes/software_list.txt | 20 ++++++ 6 files changed, 105 insertions(+), 53 deletions(-) create mode 100644 system/testcodes/software_list.txt diff --git a/.gitignore b/.gitignore index 74191db..8953030 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,7 @@ system/testcodes/*/*.lst system/testcodes/*/*.o # Bootrom removal -/system/src/bootrom/ \ No newline at end of file +system/src/bootrom/ + +# Simulation Removal (If running at Tech Level) +sim \ No newline at end of file diff --git a/software/common/demos/interrupt_demo.c b/software/common/demos/interrupt_demo.c index d0598c0..699d836 100644 --- a/software/common/demos/interrupt_demo.c +++ b/software/common/demos/interrupt_demo.c @@ -162,13 +162,13 @@ void UartExample(void) // Ensure Interrupt is not pending - NVIC_ClearPendingIRQ(UARTTX0_IRQn); - NVIC_ClearPendingIRQ(UARTRX1_IRQn); + NVIC_ClearPendingIRQ(EXP1_IRQn); // NVIC_ClearPendingIRQ(UARTTX0_IRQn); + NVIC_ClearPendingIRQ(EXP2_IRQn); // NVIC_ClearPendingIRQ(UARTRX1_IRQn); // Enable Interrupts - NVIC_EnableIRQ(UARTTX0_IRQn); - NVIC_EnableIRQ(UARTRX1_IRQn); + NVIC_EnableIRQ(EXP1_IRQn); // NVIC_EnableIRQ(UARTTX0_IRQn); + NVIC_EnableIRQ(EXP2_IRQn); // NVIC_EnableIRQ(UARTRX1_IRQn); /* Initialize UART in cross over configuration uint32_t CMSDK_uart_init(CMSDK_UART_TypeDef *CMSDK_UART, @@ -206,10 +206,10 @@ void UartExample(void) printf ("Received message : %s\n", str_rx); - NVIC_DisableIRQ(UARTTX0_IRQn); //disable both UART0 TX and UART1 RX IRQs - NVIC_DisableIRQ(UARTRX1_IRQn); + NVIC_DisableIRQ(EXP1_IRQn); // NVIC_DisableIRQ(UARTTX0_IRQn); -disable both UART0 TX and UART1 RX IRQs + NVIC_DisableIRQ(EXP2_IRQn); // NVIC_DisableIRQ(UARTRX1_IRQn); - return; + -return; } // ---------------------------------------------------------- diff --git a/software/common/validation/uart_driver_tests.c b/software/common/validation/uart_driver_tests.c index 544f45c..4f073b1 100644 --- a/software/common/validation/uart_driver_tests.c +++ b/software/common/validation/uart_driver_tests.c @@ -305,8 +305,8 @@ int Uart_IRQ(void){ puts("\nStage 4 IRQ\n"); puts("- Stage 4a Overrun IRQ\n"); - NVIC_EnableIRQ(UARTOVF0_IRQn); //enable both UART0 and UART1 overflow IRQs - NVIC_EnableIRQ(UARTOVF1_IRQn); + NVIC_EnableIRQ(EXPC_IRQn); //enable both UART0 and UART1 overflow IRQs + NVIC_EnableIRQ(EXPD_IRQn); while(uart_txorirq_counter <= 3) //repeat until 3 TX OR IRQs have occurred { @@ -338,8 +338,8 @@ int Uart_IRQ(void){ - when received flag has been set send the next character from transmit variable - repeat until all characters have been received*/ - NVIC_EnableIRQ(UARTTX0_IRQn); //enable both UART0 TX and UART1 RX IRQs - NVIC_EnableIRQ(UARTRX1_IRQn); + NVIC_EnableIRQ(EXP1_IRQn); //enable both UART0 TX and UART1 RX IRQs + NVIC_EnableIRQ(EXP2_IRQn); while(j < 11) /*while j, the received character counter, is less than 11, the number of characters to be sent*/ { /* uart_data_received and uart_data_sent are updated by TX and RX handlers */ @@ -365,10 +365,10 @@ int Uart_IRQ(void){ puts("** TEST FAILED ** Strings Do Not Match!"); } - NVIC_DisableIRQ(UARTOVF0_IRQn); - NVIC_DisableIRQ(UARTOVF1_IRQn); //disable all the enabled IRQs - NVIC_DisableIRQ(UARTTX0_IRQn); - NVIC_DisableIRQ(UARTRX1_IRQn); + NVIC_DisableIRQ(EXPC_IRQn); + NVIC_DisableIRQ(EXPD_IRQn); //disable all the enabled IRQs + NVIC_DisableIRQ(EXP1_IRQn); + NVIC_DisableIRQ(EXP2_IRQn); if(!err_code) return 0; else return 8; diff --git a/software/common/validation/uart_tests.c b/software/common/validation/uart_tests.c index cf3b331..551276d 100644 --- a/software/common/validation/uart_tests.c +++ b/software/common/validation/uart_tests.c @@ -596,14 +596,14 @@ int uart_tx_rx_irq_test(CMSDK_UART_TypeDef *CMSDK_UART) uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTTX0_IRQn); + NVIC_EnableIRQ(EXP1_IRQn); } if (CMSDK_UART==CMSDK_UART1){ uart0_irq_expected=0; uart1_irq_expected=1; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTTX1_IRQn); + NVIC_EnableIRQ(EXP3_IRQn); } TX_UART->CTRL = UART_CTRL_TXEN | UART_CTRL_TXIRQEN; @@ -640,14 +640,14 @@ int uart_tx_rx_irq_test(CMSDK_UART_TypeDef *CMSDK_UART) uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTTX0_IRQn); + NVIC_EnableIRQ(EXP1_IRQn); } if (CMSDK_UART==CMSDK_UART1){ uart0_irq_expected=0; uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTTX1_IRQn); + NVIC_EnableIRQ(EXP3_IRQn); } TX_UART->CTRL = UART_CTRL_TXEN; /* No interrupt generation */ @@ -679,14 +679,14 @@ int uart_tx_rx_irq_test(CMSDK_UART_TypeDef *CMSDK_UART) uart1_irq_expected=1; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTRX1_IRQn); + NVIC_EnableIRQ(EXP3_IRQn); } if (CMSDK_UART==CMSDK_UART1){ uart0_irq_expected=1; uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTRX0_IRQn); + NVIC_EnableIRQ(EXP0_IRQn); } TX_UART->CTRL = UART_CTRL_TXEN ; /* No interrupt generation */ @@ -748,10 +748,10 @@ int uart_tx_rx_irq_test(CMSDK_UART_TypeDef *CMSDK_UART) while ((RX_UART->STATE & UART_STATE_RXFULL)!=0) { ctmp=RX_UART->DATA; } - NVIC_DisableIRQ(UARTRX0_IRQn); - NVIC_DisableIRQ(UARTRX1_IRQn); - NVIC_DisableIRQ(UARTTX0_IRQn); - NVIC_DisableIRQ(UARTTX1_IRQn); + NVIC_DisableIRQ(EXP0_IRQn); + NVIC_DisableIRQ(EXP3_IRQn); + NVIC_DisableIRQ(EXP1_IRQn); + NVIC_DisableIRQ(EXP3_IRQn); if (err_code != 0) { printf ("ERROR : uart interrupt enable failed (0x%x)\n", err_code); @@ -848,14 +848,14 @@ int uart_tx_rx_overflow_test(CMSDK_UART_TypeDef *CMSDK_UART) uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTOVF0_IRQn); + NVIC_EnableIRQ(EXPC_IRQn); } if (CMSDK_UART==CMSDK_UART1){ uart0_irq_expected=0; uart1_irq_expected=1; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTOVF1_IRQn); + NVIC_EnableIRQ(EXPD_IRQn); } __DSB(); @@ -871,8 +871,8 @@ int uart_tx_rx_overflow_test(CMSDK_UART_TypeDef *CMSDK_UART) TX_UART->CTRL = UART_CTRL_TXEN ; /* No interrupt generation */ RX_UART->CTRL = UART_CTRL_RXEN ; /* No interrupt generation */ - NVIC_DisableIRQ(UARTOVF0_IRQn); - NVIC_DisableIRQ(UARTOVF1_IRQn); + NVIC_DisableIRQ(EXPC_IRQn); + NVIC_DisableIRQ(EXPD_IRQn); uart0_irq_expected = 0; uart1_irq_expected = 0; @@ -900,14 +900,14 @@ int uart_tx_rx_overflow_test(CMSDK_UART_TypeDef *CMSDK_UART) uart1_irq_expected=1; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTOVF1_IRQn); + NVIC_EnableIRQ(EXPD_IRQn); } if (CMSDK_UART==CMSDK_UART1){ uart0_irq_expected=1; uart1_irq_expected=0; uart0_irq_occurred=0; uart1_irq_occurred=0; - NVIC_EnableIRQ(UARTOVF0_IRQn); + NVIC_EnableIRQ(EXPC_IRQn); } __DSB(); @@ -933,8 +933,8 @@ int uart_tx_rx_overflow_test(CMSDK_UART_TypeDef *CMSDK_UART) ctmp=RX_UART->DATA; } - NVIC_DisableIRQ(UARTOVF0_IRQn); - NVIC_DisableIRQ(UARTOVF1_IRQn); + NVIC_DisableIRQ(EXPC_IRQn); + NVIC_DisableIRQ(EXPD_IRQn); if (err_code != 0) { printf ("ERROR : uart overflow test failed (0x%x)\n", err_code); diff --git a/system/makefile b/system/makefile index 28313d8..636a0e6 100644 --- a/system/makefile +++ b/system/makefile @@ -47,17 +47,17 @@ TESTCODES_DIR := $(NANOSOC_SYSTEM_DIR)/testcodes # Project System Directory PROJ_SYS_DIR := $(PROJECT_DIR)/system +PROJ_SW_DIR ?= $(PROJ_SYS_DIR)/cpu_software # Name of test directory (e.g. hello, dhry) # TESTNAME must be specified on the make command line TESTNAME = # List of all tests (this is used when running 'make all/clean') -TEST_LIST = hello dhry sleep_demo interrupt_demo dualtimer_demo \ - self_reset_demo watchdog_demo rtx_demo gpio_tests timer_tests \ - uart_tests debug_tests default_slaves_tests dma_tests \ - gpio_driver_tests uart_driver_tests timer_driver_tests apb_mux_tests \ - memory_tests romtable_tests +TEST_LIST_FILE ?= $(TESTCODES_DIR)/software_list.txt +TEST_LIST_FILE += $(PROJ_SW_DIR)/software_list.txt + +TEST_LIST = $(shell cat $(TEST_LIST_FILE) | while read line || [ -n "$$line" ]; do echo $$line; done) # Default to DS-5 tool-chain TOOL_CHAIN = ds5 @@ -78,7 +78,7 @@ ADP_OPTIONS := -define ADP_FILE=\"$(ADP_PATH)\" BOOTLOADER ?= bootloader BOOTROM_ADDRW ?= 8 BOOTROM_HEX ?= $(NANOSOC_TECH_DIR)/system/testcodes/bootloader/$(BOOTLOADER).hex -BOOTROM_BUILD_DIR ?= $(PROJ_SYS_DIR)/bootrom +BOOTROM_BUILD_DIR ?= $(NANOSOC_TECH_DIR)/system/src/bootrom NANSOC_EXPANSION_REGION ?= yes @@ -98,13 +98,9 @@ TBENCH_VC ?= -f $(PROJECT_DIR)/flist/project/system.flist SIMULATOR = xm # Directory to put simulation files -SIM_DIR ?= - +SIM_TOP_DIR ?= $(PROJECT_DIR)/simulate/sim -ifeq ($(SIM_DIR),) -# Defaultly put simulation files in simulation directory with c code testname -SIM_DIR = $(PROJECT_DIR)/simulate/sim/$(TESTNAME) -endif +SIM_DIR = $(SIM_TOP_DIR)/$(TESTNAME) # MTI option #DF#MTI_OPTIONS = -novopt @@ -297,9 +293,8 @@ bootrom: mkdir -p $(BOOTROM_BUILD_DIR)/verilog/ ;\ mkdir -p $(BOOTROM_BUILD_DIR)/bintxt/ ;\ python3 bootrom_gen.py -a $(BOOTROM_ADDRW) -i $(BOOTLOADER).hex -v $(BOOTROM_BUILD_DIR)/verilog/bootrom.v -b $(BOOTROM_BUILD_DIR)/bintxt/bootrom.bintxt ) -ifneq ($(PROJECT_DIR),) - cp $(BOOTROM_HEX) $(SIM_DIR)/$(BOOTLOADER).hex -endif + mkdir -p $(SIM_DIR)/bootloader + cp $(BOOTROM_HEX) $(SIM_DIR)/bootloader/$(BOOTLOADER).hex # Compile test code # Note : The use of ls after compile allows the computing server to sync up @@ -314,6 +309,31 @@ endif ls > /dev/null ;\ echo Copy $(TESTNAME).hex ;\ if [ -e $(TESTNAME).hex ] ; then \ + mkdir -p $(SIM_DIR) ; \ + cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \ + else \ + while [ ! -e $(TESTNAME).hex ] ; do \ + echo Wait for $(TESTNAME).hex file ...; \ + ls > /dev/null ; \ + sleep 5 ; \ + done; \ + if [ -e $(TESTNAME).hex ] ; then \ + mkdir -p $(SIM_DIR) ; \ + cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \ + else \ + echo Problem reading hex file ;\ + exit 1; \ + fi ;\ + fi ;\ + cd $(SIM_DIR) ;\ + elif [ -d "$(PROJ_SW_DIR)/$(TESTNAME)" ] ; then \ + cd $(PROJ_SW_DIR)/$(TESTNAME) ;\ + make all $(SW_MAKE_OPTIONS) ; \ + echo Compile done ;\ + ls > /dev/null ;\ + echo Copy $(TESTNAME).hex ;\ + if [ -e $(TESTNAME).hex ] ; then \ + mkdir -p $(SIM_DIR) ; \ cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \ else \ while [ ! -e $(TESTNAME).hex ] ; do \ @@ -322,6 +342,7 @@ endif sleep 5 ; \ done; \ if [ -e $(TESTNAME).hex ] ; then \ + mkdir -p $(SIM_DIR) ; \ cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \ else \ echo Problem reading hex file ;\ @@ -353,11 +374,13 @@ debugtester: sleep 5 ; \ done; \ if [ -e $(DEBUGTESTER)_le.hex ] ; then \ + mkdir -p $(SIM_DIR) ;\ cp $(DEBUGTESTER)_le.hex $(SIM_DIR)/$(DEBUGTESTER)_le.hex ;\ fi ;\ fi ;\ echo Copy $(DEBUGTESTER)_be.hex ;\ if [ -e $(DEBUGTESTER)_be.hex ] ; then \ + mkdir -p $(SIM_DIR) ;\ cp $(DEBUGTESTER)_be.hex $(SIM_DIR)/$(DEBUGTESTER)_be.hex ;\ else \ while [ ! -e $(DEBUGTESTER)_be.hex ] ; do \ @@ -382,7 +405,7 @@ compile_all_code: bootrom debugtester echo Removing old image.hex ;\ rm -f image.hex ;\ make testcode TESTNAME=$$thistest;\ - if [ -e image.hex ] ; then \ + if [ -e $(SIM_DIR)/$$thistest/image.hex ] ; then \ echo OK - image.hex created for test $$thistest ;\ else \ echo ERROR - image.hex NOT created for test $$thistest ;\ @@ -414,10 +437,15 @@ v2html: clean_all_code: @(cd $(NANOSOC_SW_DIR)/debug_tester ; make clean; ) @(cd $(TESTCODES_DIR)/$(BOOTLOADER) ; make clean; ) - for thistest in $(TEST_LIST) ; do \ + @for thistest in $(TEST_LIST) ; do \ echo Cleaning $$thistest ... ; \ - cd $(TESTCODES_DIR)/$$thistest ; \ - make clean; \ + if [ -e $(TESTCODES_DIR)/$$thistest ]; then \ + cd $(TESTCODES_DIR)/$$thistest ; \ + make clean; \ + elif [ -e $(PROJ_SW_DIR)/$$thistest ]; then \ + cd $(PROJ_SW_DIR)/$$thistest ; \ + make clean; \ + fi \ done @rm -rf $(BOOTROM_BUILD_DIR) @@ -434,6 +462,7 @@ verify: # Remove RTL compile files, log files, software compile files clean : clean_all_code + @rm -rf $(SIM_DIR) @if [ -d work ] ; then \ rm -rf work ; \ fi diff --git a/system/testcodes/software_list.txt b/system/testcodes/software_list.txt new file mode 100644 index 0000000..412e3c5 --- /dev/null +++ b/system/testcodes/software_list.txt @@ -0,0 +1,20 @@ +hello +dhry +sleep_demo +dualtimer_demo +self_reset_demo +watchdog_demo +rtx_demo +gpio_tests +timer_tests +debug_tests +default_slaves_tests +dma_tests +gpio_driver_tests +timer_driver_tests +apb_mux_tests +memory_tests +romtable_tests +interrupt_demo +uart_tests +uart_driver_tests -- GitLab