Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • soclabs/nanosoc_tech
1 result
Show changes
Commits on Source (2)
Showing with 4554 additions and 26 deletions
......@@ -10,3 +10,6 @@
[submodule "nanosoc/sldma350_tech"]
path = nanosoc/sldma350_tech
url = https://git.soton.ac.uk/soclabs/sldma350_tech.git
[submodule "nanosoc/sl_ams_tech"]
path = nanosoc/sl_ams_tech
url = https://git.soton.ac.uk/soclabs/sl_ams_tech.git
......@@ -52,6 +52,7 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/expram_l/verilog/nanosoc_reg
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_apb_ss.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_adc_ss.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v
// NanoSoC Regions - SysTable Region
......@@ -63,4 +64,3 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_control/verilog/nanosoc_clkctrl.v
$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_control/verilog/nanosoc_pin_mux.v
......@@ -62,16 +62,16 @@ RTL_SOCKET_DIR := $(SOCLABS_SOCDEBUG_TECH_DIR)/socket/vivado_packages
flist_dc_nanosoc: gen_defs
@mkdir -p $(TCL_ASIC_FLIST_DIR)
@(cd $(TCL_ASIC_FLIST_DIR); \
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -s -a -f $(DESIGN_VC) -o $(DC_OUTPUT_FILELIST) -r $(IMP_NANOSOC_ASIC_DIR)/src;)
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -s -a -f $(DESIGN_VC) -o $(DC_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_NANOSOC_ASIC_DIR)/src;)
flist_genus_nanosoc: gen_defs
@mkdir -p $(TCL_ASIC_FLIST_DIR)
@(cd $(TCL_ASIC_FLIST_DIR); \
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -g -f $(DESIGN_VC) -o $(GENUS_OUTPUT_FILELIST) -r $(IMP_NANOSOC_DIR)/synthesis/src -d $(NANOSOC_DEFINES);)
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -g -f $(DESIGN_VC) -o $(GENUS_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_NANOSOC_DIR)/synthesis/src -d $(NANOSOC_DEFINES);)
flist_formality_nanosoc: gen_defs
@(cd $(TCL_ASIC_FLIST_DIR); \
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -F -a -f $(DESIGN_VC) -o $(FORMALITY_OUTPUT_FILELIST) -r $(IMP_NANOSOC_DIR)/synthesis/src;)
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -F -a -f $(DESIGN_VC) -o $(FORMALITY_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_NANOSOC_DIR)/synthesis/src;)
gen_memories: bootrom
@mkdir -p $(MEMORIES_DIR)
......
......@@ -68,7 +68,7 @@ code:
flist_tcl_nanosoc: gen_defs
@mkdir -p $(TCL_FLIST_DIR)
@(cd $(TCL_FLIST_DIR); \
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -r $(IMP_NANOSOC_DIR)/src -d $(NANOSOC_DEFINES);)
$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_NANOSOC_DIR)/src -d $(NANOSOC_DEFINES);)
# Package NanoSoC Socket Components
package_socket:
......
......@@ -22,10 +22,14 @@ MTI_VC_OPTIONS += -f $(TBENCH_VC) $(ADP_OPTIONS)
MTI_RUN_OPTIONS = -voptargs=+acc
# VCS options
VCS_OPTIONS = +vcs+lic+wait +v2k -sverilog -override_timescale=1ns/1ps +lint=all,noTMR,noVCDE -debug
VCS_OPTIONS = +vcs+lic+wait +v2k -sverilog -override_timescale=1ns/1ps +lint=all,noTMR,noVCDE -debug -debug_access+all
VCS_SIM_OPTION = +vcs+lic+wait +vcs+flush+log -assert nopostproc
VCS_VC_OPTIONS = -f $(TBENCH_VC) $(ADP_OPTIONS)
ifdef AMS
VCS_OPTIONS += -ad=$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/vcsAD.init -ams_discipline logic -ams
endif
# XM verilog options
XMSIM_OPTIONS = -unbuffered -64bit -status -LICQUEUE -f xmsim.args -cdslib cds.lib -hdlvar hdl.var -NBASYNC
XM_VC_OPTIONS = -f $(TBENCH_VC) $(ADP_OPTIONS)
......@@ -82,7 +86,7 @@ flist_vfiles_nanosoc: gen_defs
@if [ ! -d $(SIM_DIR)/logs ] ; then \
mkdir -p $(SIM_DIR)/logs; \
fi
@cd $(SIM_DIR); python $(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -f $(TBENCH_VC) -a -v -o tbench.vc
@cd $(SIM_DIR); python $(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -f $(TBENCH_VC) -a -i $(FLIST_INCLUDES) -v -o tbench.vc
# ------- VCS -----------
......
......@@ -9,6 +9,7 @@
#
# Copyright (C) 2021-3, SoC Labs (www.soclabs.org)
#-----------------------------------------------------------------------------
include $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc.config
#-------------------------------------
# - Commonly Overloaded Variables
......@@ -25,8 +26,10 @@ ACCELERATOR ?= yes
# Is the Arm QuickStart being used?
QUICKSTART ?= no
# IS this for an ASIC Flow?
ASIC ?= no
# Are simulations to be run in fast mode? (i.e. RAMs preloaded)
FAST_SIM ?= yes
#-------------------------------------
......@@ -67,11 +70,62 @@ ifeq ($(ACCELERATOR),yes)
NANOSOC_DEFINES += ACCELERATOR_SUBSYSTEM
endif
# Set variables for tesbench if fast simulation
ifeq ($(FAST_SIM),yes)
DEFINES_VC += +define+FAST_SIM
NANOSOC_DEFINES += FAST_SIM
endif
ifdef DMA_DMA350_INCLUDE
ifdef DMA350_SMALL
NANOSOC_DEFINES += DMAC_DMA350
FLIST_INCLUDES += $(SOCLABS_SLDMA350_TECH_DIR)/flist/sldma350_ahb_small.flist
endif
ifdef DMA350_DEFAULT
NANOSOC_DEFINES += DMAC_DMA350 DMA350_STREAM_2
FLIST_INCLUDES += $(SOCLABS_SLDMA350_TECH_DIR)/flist/sldma350_ahb.flist
endif
ifdef DMA350_BIG
NANOSOC_DEFINES += DMAC_DMA350 DMA350_STREAM_2 DMA350_STREAM_3
FLIST_INCLUDES += $(SOCLABS_SLDMA350_TECH_DIR)/flist/sldma350_ahb_big.flist
endif
else
ifdef DMA_0_PL230_INCLUDE
NANOSOC_DEFINES += DMAC_0_PL230
FLIST_INCLUDES +=$(SOCLABS_SLDMA230_TECH_DIR)/flist/sldma230_ip.flist
endif
ifdef DMA_1_PL230_INCLUDE
NANOSOC_DEFINES += DMAC_1_PL230
FLIST_INCLUDES +=$(SOCLABS_SLDMA230_TECH_DIR)/flist/sldma230_ip.flist
endif
endif
ifdef ADC_0_INCLUDE
AMS = yes
NANOSOC_DEFINES += AMS_PERIPHERALS ADC_0_INCLUDE
FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/SL_ADC_8bits/flist/sl_adc_8bits_ip.flist
endif
ifdef ADC_1_INCLUDE
AMS = yes
NANOSOC_DEFINES += AMS_PERIPHERALS ADC_1_INCLUDE
FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/SL_ADC_8bits/flist/sl_adc_8bits_ip.flist
endif
ifdef ADC_2_INCLUDE
AMS = yes
NANOSOC_DEFINES += AMS_PERIPHERALS ADC_2_INCLUDE
FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/SL_ADC_8bits/flist/sl_adc_8bits_ip.flist
endif
ifdef ADC_3_INCLUDE
AMS = yes
NANOSOC_DEFINES += AMS_PERIPHERALS ADC_3_INCLUDE
FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/SL_ADC_8bits/flist/sl_adc_8bits_ip.flist
endif
# System Design Filelist
ifeq ($(QUICKSTART),yes)
DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top_qs.flist
......@@ -84,21 +138,19 @@ else
DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top_ASIC.flist
ARM_CORSTONE_101_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical
ARM_CORTEX_M0_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0/logical
NANOSOC_DEFINES += DMAC_0_PL230 DMAC_1_PL230 ASIC_TEST_PORTS POWER_PINS
NANOSOC_DEFINES += ASIC_TEST_PORTS POWER_PINS
else
DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist
TBENCH_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist
ARM_CORSTONE_101_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical
ARM_CORTEX_M0_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0/logical
TB_TOP ?= nanosoc_tb
NANOSOC_DEFINES += DMAC_0_PL230
endif
endif
# Make variables visible to target shells
export ARM_CORTEX_M0_DIR
export ARM_CORSTONE_101_DIR
export FLIST_INCLUDES
export AMS
# Location of Defines File
DEFINES_DIR := $(SOCLABS_PROJECT_DIR)/system/src/defines/
DEFINES_FILE := $(DEFINES_DIR)/gen_defines.v
......@@ -132,6 +184,9 @@ gen_defs:
@mkdir -p $(DEFINES_DIR)
@$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/defines_compile.py -d $(NANOSOC_DEFINES) -o $(DEFINES_FILE)
TEST_AMS:
$(info AMS is $(AMS))
$(info VCS OPTIONS is $(VCS_OPTIONS))
# Remove RTL compile files, log files, software compile files
clean : clean_all_code
@rm -rf $(SIM_TOP_DIR)
#-----------------------------------------------------------------------------
# NanoSoC Configuration file
# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
#
# Copyright (C) 2021-3, SoC Labs (www.soclabs.org)
#-----------------------------------------------------------------------------
#### IP Configuration
# !!EDIT this to point to the relevant logical directories of IP
ARM_CORSTONE_101_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical
ARM_CORTEX_M0_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0/logical
# DMA_xxx_INCLUDE (yes or leave blank)
DMA_0_PL230_INCLUDE := yes
DMA_1_PL230_INCLUDE :=
DMA_DMA350_INCLUDE :=
# DMA 350 options set to yes for one of them
# !! MAKE sure you run the correct configuration in the SLDMA350 directory
# Small configuration of DMA, 2 channels, no stream interface, no extended features
# Default configuration of DMA, 2 channels, stream interface, extended features
# Big configuration of DMA, 3 channels, stream interface, extended features
DMA350_SMALL :=
DMA350_DEFAULT :=
DMA350_BIG :=
# ADC Include (yes or leave blank)
ADC_0_INCLUDE:=
ADC_1_INCLUDE:=
ADC_2_INCLUDE:=
ADC_3_INCLUDE:=
\ No newline at end of file
......@@ -10,6 +10,7 @@
//
// Copyright 2021-3, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
`include "gen_defines.v"
module nanosoc_region_sysio #(
parameter SYS_ADDR_W=32, // System Address Width
......@@ -108,7 +109,8 @@ module nanosoc_region_sysio #(
localparam BASEADDR_APBSS = 32'h4000_0000; // GPIO0 peripheral base address
localparam BASEADDR_GPIO0 = 32'h4001_0000; // GPIO0 peripheral base address
localparam BASEADDR_GPIO1 = 32'h4001_1000; // GPIO1 peripheral base address
localparam BASEADDR_SYSCTRL = 32'h4001_f000; // Sysctrl peripheral basse address
localparam BASEADDR_SYSCTRL = 32'h4001_f000; // Sysctrl peripheral base address
localparam BASEADDR_ADC = 32'h4002_0000; // ADC Peripheral base address
localparam BE = 0;
// ------------------------------------------------------------
......@@ -140,13 +142,20 @@ module nanosoc_region_sysio #(
wire [SYS_DATA_W-1:0] sysctrl_hrdata;
wire sysctrl_hresp;
wire adcsys_hsel; // ADC subsystem AHB interface signals
wire adcsys_hreadyout;
wire [SYS_DATA_W-1:0] adcsys_hrdata;
wire adcsys_hresp;
// AHB address decode
nanosoc_sysio_decode #(
.BASEADDR_APBSS (BASEADDR_APBSS),
.BASEADDR_GPIO0 (BASEADDR_GPIO0),
.BASEADDR_GPIO1 (BASEADDR_GPIO1),
.BASEADDR_SYSCTRL (BASEADDR_SYSCTRL)
.BASEADDR_SYSCTRL (BASEADDR_SYSCTRL),
.BASEADDR_ADC (BASEADDR_ADC)
) u_addr_decode (
// System Address
.hsel (HSEL),
......@@ -155,9 +164,16 @@ module nanosoc_region_sysio #(
.gpio0_hsel (gpio0_hsel),
.gpio1_hsel (gpio1_hsel),
.sysctrl_hsel (sysctrl_hsel),
`ifdef AMS_PERIPHERALS
.adcsys_hsel (adcsys_hsel),
`endif
.defslv_hsel (defslv_hsel)
);
`ifdef AMS_PERIPHERALS
parameter AMS_PERIPHERAL_PORT = 1;
`else
parameter AMS_PERIPHERAL_PORT = 0;
`endif
// AHB slave multiplexer
cmsdk_ahb_slave_mux #(
.PORT0_ENABLE (1), // APB subsystem bridge
......@@ -165,7 +181,7 @@ module nanosoc_region_sysio #(
.PORT2_ENABLE (1), // GPIO Port 1
.PORT3_ENABLE (1), // SYS control
.PORT4_ENABLE (1), // Default
.PORT5_ENABLE (0),
.PORT5_ENABLE (AMS_PERIPHERAL_PORT), // ADC Region
.PORT6_ENABLE (0),
.PORT7_ENABLE (0),
.PORT8_ENABLE (0),
......@@ -195,10 +211,10 @@ module nanosoc_region_sysio #(
.HREADYOUT4 (defslv_hreadyout),
.HRESP4 (defslv_hresp),
.HRDATA4 (defslv_hrdata),
.HSEL5 (1'b0), // Input Port 5
.HREADYOUT5 (defslv_hreadyout),
.HRESP5 (defslv_hresp),
.HRDATA5 (defslv_hrdata),
.HSEL5 (adcsys_hsel), // Input Port 5
.HREADYOUT5 (adcsys_hreadyout),
.HRESP5 (adcsys_hresp),
.HRDATA5 (adcsys_hrdata),
.HSEL6 (1'b0), // Input Port 6
.HREADYOUT6 (defslv_hreadyout),
.HRESP6 (defslv_hresp),
......@@ -429,4 +445,63 @@ module nanosoc_region_sysio #(
.watchdog_reset (WDOGRESETREQ)
);
`ifdef AMS_PERIPHERALS
nanosoc_sysio_adc_ss #(
`ifdef ADC_0_INCLUDE
.ADC_0_ENABLE (1),
`endif
`ifdef ADC_1_INCLUDE
.ADC_1_ENABLE (1),
`endif
`ifdef ADC_2_INCLUDE
.ADC_2_ENABLE (1),
`endif
`ifdef ADC_3_INCLUDE
.ADC_3_ENABLE (1),
`endif
.INCLUDE_IRQ_SYNCHRONIZER(0), // require IRQs to be HCLK synchronous
.INCLUDE_APB_TEST_SLAVE (1), // Include example test slave
.BE (BE)
) u_sysio_adc_ss (
`ifdef ADC_0_ENABLE
.adc_0_in(),
.i_adc_0_irq(),
`endif
`ifdef ADC_1_ENABLE
.adc_1_in(),
.i_adc_1_irq(),
`endif
`ifdef ADC_2_ENABLE
.adc_2_in(),
.i_adc_1_irq(),
`endif
`ifdef ADC_3_ENABLE
.adc_3_in(),
.i_adc_1_irq(),
`endif
.HCLK(HCLK),
.HRESETn(HRESETn),
.HSEL(adcsys_hsel),
.HADDR(HADDR[15:0]),
.HTRANS(HTRANS[1:0]),
.HWRITE(HWRITE),
.HSIZE(HSIZE),
.HPROT(HPROT),
.HREADY(HREADY),
.HWDATA(HWDATA[31:0]),
.HREADYOUT(adcsys_hreadyout),
.HRDATA(adcsys_hrdata),
.HRESP(adcsys_hresp),
.PCLK(PCLK), // Peripheral clock
.PCLKG(PCLKG), // Gate PCLK for bus interface only
.PCLKEN(PCLKEN), // Clock divider for AHB to APB bridge
.PRESETn(PRESETn) // APB reset
);
`endif
endmodule
This diff is collapsed.
......@@ -37,6 +37,7 @@
// Also performs address decode for MTB
//-----------------------------------------------------------------------------
//
`include "gen_defines.v"
module nanosoc_sysio_decode #(
parameter SYS_ADDR_W = 32,
......@@ -47,8 +48,9 @@ module nanosoc_sysio_decode #(
// GPIO1 peripheral base address
parameter BASEADDR_GPIO1 = 32'h4001_1000,
// Sysctrl base address
parameter BASEADDR_SYSCTRL = 32'h4001_f000
)(
parameter BASEADDR_SYSCTRL = 32'h4001_f000,
parameter BASEADDR_ADC = 32'h4002_0000
)(
// System Address
input wire hsel,
input wire [SYS_ADDR_W-1:0] haddr,
......@@ -58,7 +60,9 @@ module nanosoc_sysio_decode #(
output wire gpio0_hsel,
output wire gpio1_hsel,
output wire sysctrl_hsel,
`ifdef AMS_PERIPHERALS
output wire adcsys_hsel,
`endif
// Default slave
output wire defslv_hsel
);
......@@ -81,14 +85,24 @@ module nanosoc_sysio_decode #(
BASEADDR_GPIO1[31:12]); // 0x40011000
assign sysctrl_hsel = hsel & (haddr[31:12]==
BASEADDR_SYSCTRL[31:12]); // 0x4001F000
`ifdef AMS_PERIPHERALS
assign adcsys_hsel = hsel & (haddr[31:12]==
BASEADDR_ADC[31:12]); // 0x40020000
`endif
// ----------------------------------------------------------
// Default slave decode logic
// ----------------------------------------------------------
`ifdef AMS_PERIPHERALS
assign defslv_hsel = ~(apbsys_hsel |
gpio0_hsel | gpio1_hsel |
sysctrl_hsel | adcsys_hsel
);
`else
assign defslv_hsel = ~(apbsys_hsel |
gpio0_hsel | gpio1_hsel |
sysctrl_hsel
);
`endif
endmodule
Subproject commit a4a0fcf677a5b5c0cdcd08062ad2e50f1129d5a0
/*
*-----------------------------------------------------------------------------
* 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
*-----------------------------------------------------------------------------
*/
/*
A simple test to check the operation of APB slave multiplexer
*/
#ifdef CORTEX_M0
#include "CMSDK_CM0.h"
#endif
#ifdef CORTEX_M0PLUS
#include "CMSDK_CM0plus.h"
#endif
#ifdef CORTEX_M3
#include "CMSDK_CM3.h"
#endif
#ifdef CORTEX_M4
#include "CMSDK_CM4.h"
#endif
#include <stdio.h>
#include "uart_stdout.h"
#define HW32_REG(ADDRESS) (*((volatile unsigned long *)(ADDRESS)))
#define HW16_REG(ADDRESS) (*((volatile unsigned short *)(ADDRESS)))
#define HW8_REG(ADDRESS) (*((volatile unsigned char *)(ADDRESS)))
int adc_detect(void);
int adc_check_clk_div(void);
#if defined ( __CC_ARM )
__asm void address_test_write(unsigned int addr, unsigned int wdata);
__asm unsigned int address_test_read(unsigned int addr);
#else
void address_test_write(unsigned int addr, unsigned int wdata);
unsigned int address_test_read(unsigned int addr);
#endif
void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value);
int ID_Check(const unsigned int id_array[], unsigned int offset);
int APB_test_slave_Check(unsigned int offset);
/* Global variables */
volatile int hardfault_occurred;
volatile int hardfault_expected;
volatile int temp_data;
int hardfault_verbose=0; // 0:Not displaying anything in hardfault handler
#define SL_ADC_BASE (0x40020000UL)
#define SL_ADC_0_BASE (SL_ADC_BASE + 0x0000UL)
int main (void)
{
int err_code = 0;
int data[64];
int i;
// UART init
UartStdOutInit();
// Test banner message and revision number
puts("\nCortex Microcontroller System Design Kit");
puts(" - ADC test - revision $Revision: 371321 $\n");
if(adc_detect()!=0) {
return 0; // Quit test if ADC not present
}
err_code += adc_check_clk_div();
address_test_write(SL_ADC_0_BASE + 0x00C, 0x01);
printf("Enable ADC... \n");
printf("Read ADC Data: \n");
for (i =0; i<64; i++){
while(!address_test_read(SL_ADC_0_BASE+0x004)){;}
data[i]=address_test_read(SL_ADC_0_BASE);
}
for (i =0; i<64; i++){
printf("0x%02x \n",data[i]);
}
if (err_code==0) {
printf ("\n** TEST PASSED **\n");
} else {
printf ("\n** TEST FAILED **, Error code = (0x%x)\n", err_code);
}
UartEndSimulation();
return 0;
}
int adc_check_clk_div(void)
{
int clk_div_actual;
puts("Testing Clock Divider read/write access \n");
clk_div_actual = address_test_read(SL_ADC_0_BASE + 0x008);
printf("Clock divider after reset: %d\n", clk_div_actual);
address_test_write(SL_ADC_0_BASE + 0x008, 0x5E);
printf("Clock divider set to: 0x5E\n");
clk_div_actual = address_test_read(SL_ADC_0_BASE + 0x008);
printf("Clock divider set read: 0x%02X\n", clk_div_actual);
if(clk_div_actual!=0x320)
{
return 1;
}
else{
return 0;
}
}
int adc_detect(void)
{
int result;
int volatile rdata;
unsigned const int adc_id[16] = {0x53, 0x4C, 0x00, 0x61, 0x64, 0x63, 0x00, 0x08};
puts("Detect if ADC is present...");
hardfault_occurred = 0;
hardfault_expected = 1;
rdata = address_test_read(SL_ADC_0_BASE+ 0xFE0);
hardfault_expected = 0;
result = hardfault_occurred ? 1 : ID_Check(&adc_id[0], SL_ADC_0_BASE);
hardfault_occurred = 0;
if (result!=0) {
puts("** TEST SKIPPED ** ADC is not present.\n");
UartEndSimulation();
}
return(result);
}
int ID_Check(const unsigned int id_array[], unsigned int offset)
{
int i;
unsigned long expected_val, actual_val;
unsigned long compare_mask;
int mismatch = 0;
unsigned long test_addr;
/* Check the peripheral ID and component ID */
for (i=0;i<8;i++) {
test_addr = offset + 4*i + 0xFC0;
expected_val = id_array[i];
actual_val = HW32_REG(test_addr);
/* create mask to ignore version numbers */
if (i==2) { compare_mask = 0xF0;} // mask out version field
else { compare_mask = 0x00;} // compare whole value
if ((expected_val & (~compare_mask)) != (actual_val & (~compare_mask))) {
printf ("Difference found: %x, expected %x, actual %x\n", test_addr, expected_val, actual_val);
mismatch++;
}
} // end_for
return (mismatch);
}
#if defined ( __CC_ARM )
/* Test function for write - for ARM / Keil */
__asm void address_test_write(unsigned int addr, unsigned int wdata)
{
STR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
BX LR
}
#else
/* Test function for write - for gcc */
void address_test_write(unsigned int addr, unsigned int wdata) __attribute__((naked));
void address_test_write(unsigned int addr, unsigned int wdata)
{
__asm(" str r1,[r0]\n"
" dsb \n"
" bx lr \n"
);
}
#endif
/* Test function for read */
#if defined ( __CC_ARM )
/* Test function for read - for ARM / Keil */
__asm unsigned int address_test_read(unsigned int addr)
{
LDR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
MOVS R0, R1
BX LR
}
#else
/* Test function for read - for gcc */
unsigned int address_test_read(unsigned int addr) __attribute__((naked));
unsigned int address_test_read(unsigned int addr)
{
__asm(" ldr r1,[r0]\n"
" dsb \n"
" movs r0, r1 \n"
" bx lr \n"
);
}
#endif
#if defined ( __CC_ARM )
/* ARM or Keil toolchain */
__asm void HardFault_Handler(void)
{
MOVS r0, #4
MOV r1, LR
TST r0, r1
BEQ stacking_used_MSP
MRS R0, PSP ; // first parameter - stacking was using PSP
B get_LR_and_branch
stacking_used_MSP
MRS R0, MSP ; // first parameter - stacking was using MSP
get_LR_and_branch
MOV R1, LR ; // second parameter is LR current value
LDR R2,=__cpp(HardFault_Handler_c)
BX R2
ALIGN
}
#else
/* gcc toolchain */
void HardFault_Handler(void) __attribute__((naked));
void HardFault_Handler(void)
{
__asm(" movs r0,#4\n"
" mov r1,lr\n"
" tst r0,r1\n"
" beq stacking_used_MSP\n"
" mrs r0,psp\n" /* first parameter - stacking was using PSP */
" ldr r1,=HardFault_Handler_c \n"
" bx r1\n"
"stacking_used_MSP:\n"
" mrs r0,msp\n" /* first parameter - stacking was using PSP */
" ldr r1,=HardFault_Handler_c \n"
" bx r1\n"
".pool\n" );
}
#endif
/* C part of the fault handler - common between ARM / Keil /gcc */
void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value)
{
unsigned int stacked_pc;
unsigned int stacked_r0;
hardfault_occurred++;
if (hardfault_verbose) puts ("[Hard Fault Handler]");
if (hardfault_expected==0) {
puts ("ERROR : Unexpected HardFault interrupt occurred.\n");
UartEndSimulation();
while (1);
}
stacked_r0 = ((unsigned long) hardfault_args[0]);
stacked_pc = ((unsigned long) hardfault_args[6]);
if (hardfault_verbose) printf(" - Stacked R0 : 0x%x\n", stacked_r0);
if (hardfault_verbose) printf(" - Stacked PC : 0x%x\n", stacked_pc);
/* Modify R0 to a valid address */
hardfault_args[0] = (unsigned long) &temp_data;
return;
}
78
04
00
30
6D
06
00
00
75
06
00
00
8F
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
79
06
00
00
00
00
00
00
00
00
00
00
7B
06
00
00
7D
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
7F
06
00
00
00
F0
02
F8
00
F0
4B
F8
0C
A0
30
C8
08
38
24
18
2D
18
A2
46
67
1E
AB
46
54
46
5D
46
AC
42
01
D1
00
F0
3D
F8
7E
46
0F
3E
0F
CC
B6
46
01
26
33
42
00
D0
FB
1A
A2
46
AB
46
33
43
18
47
3C
0B
00
00
5C
0B
00
00
10
3A
02
D3
78
C8
78
C1
FA
D8
52
07
01
D3
30
C8
30
C1
01
D5
04
68
0C
60
70
47
00
00
00
23
00
24
00
25
00
26
10
3A
01
D3
78
C1
FB
D8
52
07
00
D3
30
C1
00
D5
0B
60
70
47
10
B5
64
29
02
D1
00
F0
67
FB
10
BD
78
29
02
D1
00
F0
98
FB
10
BD
00
20
10
BD
1F
B5
1F
BD
10
B5
10
BD
00
F0
09
FD
11
46
FF
F7
F7
FF
00
F0
B8
F8
00
F0
21
FD
03
B4
FF
F7
F2
FF
03
BC
00
F0
A7
FA
01
60
BF
F3
4F
8F
70
47
01
68
BF
F3
4F
8F
08
00
70
47
04
20
71
46
08
42
02
D0
EF
F3
09
80
01
E0
EF
F3
08
80
71
46
01
4A
10
47
00
00
A5
03
00
00
10
B5
91
A0
00
F0
2E
FC
9A
4C
20
46
FF
F7
E4
FF
01
46
99
A0
00
F0
F2
FA
5E
21
20
46
FF
F7
D8
FF
9D
A0
00
F0
EB
FA
20
46
FF
F7
D6
FF
04
46
01
46
A0
A0
00
F0
E3
FA
19
20
40
01
84
42
01
D0
01
20
10
BD
00
20
10
BD
F3
B5
00
25
81
B0
2C
46
02
99
A0
00
42
18
3F
21
89
01
51
18
01
9A
0B
68
12
58
02
2C
10
D0
00
20
16
46
1F
46
86
43
87
43
BE
42
03
D0
98
A0
00
F0
C2
FA
6D
1C
64
1C
08
2C
E6
DB
28
46
03
B0
F0
BD
F0
20
ED
E7
F0
B5
99
B0
00
25
10
95
11
95
12
95
9B
48
13
95
14
95
15
95
16
95
17
95
1E
C8
08
AE
1E
C6
0F
C8
0F
C6
96
A0
00
F0
D9
FB
9C
4C
65
60
01
20
A0
60
9B
48
FF
F7
8C
FF
00
90
A5
60
60
68
00
28
04
D0
01
25
00
21
20
46
41
60
23
E0
08
A8
07
90
94
48
00
25
2C
46
06
90
06
99
A0
00
42
18
3F
21
89
01
51
18
07
9A
0B
68
12
58
02
2C
1A
D0
00
20
16
46
1F
46
86
43
87
43
BE
42
03
D0
73
A0
00
F0
79
FA
6D
1C
64
1C
08
2C
E6
DB
84
48
00
21
41
60
00
2D
04
D0
84
A0
00
F0
A1
FB
00
F0
4A
FA
28
46
19
B0
F0
BD
F0
20
E3
E7
F0
B5
C1
B0
00
F0
F4
F9
87
A0
00
F0
93
FB
91
A0
00
F0
90
FB
FF
F7
A1
FF
00
28
02
D0
00
20
41
B0
F0
BD
3D
A0
00
F0
86
FB
46
4C
20
46
FF
F7
3C
FF
01
46
45
A0
00
F0
4A
FA
5E
21
20
46
FF
F7
30
FF
49
A0
00
F0
43
FA
20
46
FF
F7
2E
FF
04
46
01
46
4C
A0
00
F0
3B
FA
19
20
40
01
84
42
01
D0
01
26
00
E0
00
26
01
21
86
48
FF
F7
1A
FF
85
A0
00
F0
2D
FA
88
A0
00
F0
2A
FA
8B
4F
00
24
6D
46
38
46
FF
F7
12
FF
00
28
FA
D0
5C
48
FF
F7
0D
FF
A1
00
64
1C
68
50
40
2C
F2
DB
00
24
A0
00
29
58
83
A0
00
F0
14
FA
64
1C
40
2C
F7
DB
00
2E
08
D0
31
46
81
A0
00
F0
0B
FA
00
F0
E8
F9
00
20
41
B0
F0
BD
88
A0
00
F0
03
FA
F6
E7
70
B5
4A
4C
05
46
60
68
40
1C
60
60
20
68
00
28
02
D0
87
A0
00
F0
2A
FB
A0
68
00
28
11
D0
20
68
AE
69
29
68
00
28
09
D0
87
A0
00
F0
EB
F9
20
68
00
28
03
D0
31
46
8A
A0
00
F0
E4
F9
8E
48
28
60
70
BD
8E
A0
00
F0
12
FB
00
F0
BB
F9
FE
E7
00
00
54
65
73
74
69
6E
67
20
43
6C
6F
63
6B
20
44
69
76
69
64
65
72
20
72
65
61
64
2F
77
72
69
74
65
20
61
63
63
65
73
73
20
0A
00
00
00
08
00
02
40
43
6C
6F
63
6B
20
64
69
76
69
64
65
72
20
61
66
74
65
72
20
72
65
73
65
74
3A
20
25
64
0A
00
00
43
6C
6F
63
6B
20
64
69
76
69
64
65
72
20
73
65
74
20
74
6F
3A
20
30
78
35
45
0A
00
43
6C
6F
63
6B
20
64
69
76
69
64
65
72
20
73
65
74
20
72
65
61
64
3A
20
30
78
25
30
32
58
0A
00
44
69
66
66
65
72
65
6E
63
65
20
66
6F
75
6E
64
3A
20
25
78
2C
20
65
78
70
65
63
74
65
64
20
25
78
2C
20
61
63
74
75
61
6C
20
25
78
0A
00
00
00
DC
0B
00
00
44
65
74
65
63
74
20
69
66
20
41
44
43
20
69
73
20
70
72
65
73
65
6E
74
2E
2E
2E
00
00
00
00
30
E0
0F
02
40
00
00
02
40
2A
2A
20
54
45
53
54
20
53
4B
49
50
50
45
44
20
2A
2A
20
41
44
43
20
69
73
20
6E
6F
74
20
70
72
65
73
65
6E
74
2E
0A
00
0A
43
6F
72
74
65
78
20
4D
69
63
72
6F
63
6F
6E
74
72
6F
6C
6C
65
72
20
53
79
73
74
65
6D
20
44
65
73
69
67
6E
20
4B
69
74
00
00
00
20
2D
20
41
44
43
20
74
65
73
74
20
2D
20
72
65
76
69
73
69
6F
6E
20
24
52
65
76
69
73
69
6F
6E
3A
20
33
37
31
33
32
31
20
24
0A
00
0C
00
02
40
45
6E
61
62
6C
65
20
41
44
43
2E
2E
2E
20
0A
00
52
65
61
64
20
41
44
43
20
44
61
74
61
3A
20
0A
00
00
00
00
04
00
02
40
30
78
25
30
32
78
20
0A
00
00
00
00
0A
2A
2A
20
54
45
53
54
20
46
41
49
4C
45
44
20
2A
2A
2C
20
45
72
72
6F
72
20
63
6F
64
65
20
3D
20
28
30
78
25
78
29
0A
00
00
00
00
0A
2A
2A
20
54
45
53
54
20
50
41
53
53
45
44
20
2A
2A
0A
00
5B
48
61
72
64
20
46
61
75
6C
74
20
48
61
6E
64
6C
65
72
5D
00
00
00
00
20
2D
20
53
74
61
63
6B
65
64
20
52
30
20
3A
20
30
78
25
78
0A
00
00
00
20
2D
20
53
74
61
63
6B
65
64
20
50
43
20
3A
20
30
78
25
78
0A
00
00
00
0C
00
00
30
45
52
52
4F
52
20
3A
20
55
6E
65
78
70
65
63
74
65
64
20
48
61
72
64
46
61
75
6C
74
20
69
6E
74
65
72
72
75
70
74
20
6F
63
63
75
72
72
65
64
2E
0A
00
00
00
04
49
03
48
08
60
70
47
02
49
01
48
08
60
70
47
00
1C
4E
0E
10
00
00
30
07
48
80
47
07
48
00
47
FE
E7
FE
E7
FE
E7
FE
E7
FE
E7
FE
E7
04
48
05
49
05
4A
06
4B
70
47
00
00
5D
06
00
00
C1
00
00
00
78
00
00
30
78
04
00
30
78
02
00
30
78
02
00
30
10
B5
C0
B2
00
F0
36
F8
10
BD
10
B5
00
F0
42
F8
00
F0
30
F8
10
BD
00
20
C0
43
70
47
10
B5
C0
B2
00
F0
28
F8
10
BD
FE
E7
2E
48
00
21
81
60
2E
49
01
61
01
21
81
60
2D
48
03
21
01
61
81
60
2C
49
20
20
88
61
70
47
2C
48
2A
49
01
60
2B
49
81
61
01
21
C1
60
C3
21
81
60
01
69
C9
07
FC
D0
24
49
20
20
88
61
21
48
00
21
81
60
30
21
01
61
03
21
81
60
70
47
1D
49
8A
68
D2
07
04
D0
4A
68
D2
07
FC
D1
08
60
70
47
17
4A
53
68
DB
07
FC
D1
10
60
08
60
70
47
13
4B
15
48
59
68
42
68
89
07
C9
17
92
07
D2
17
49
1C
52
1C
11
42
F5
D1
59
68
89
07
01
D5
18
68
03
E0
41
68
89
07
01
D5
00
68
C0
B2
70
47
0A
48
04
21
82
68
D2
07
04
D0
42
68
D2
07
FC
D1
01
60
FE
E7
03
4A
53
68
DB
07
FC
D1
11
60
01
60
F7
E7
00
60
00
40
6A
18
00
00
00
E0
00
40
00
10
01
40
8E
0C
01
00
00
20
00
40
24
F4
00
00
70
47
00
00
0F
B4
05
49
10
B5
03
AA
02
98
00
F0
9F
F9
10
BC
08
BC
04
B0
18
47
00
00
14
00
00
30
70
B5
04
46
85
69
00
68
C1
06
01
D5
30
26
00
E0
20
26
C0
07
07
D0
70
BD
62
68
30
46
A1
68
90
47
20
6A
40
1C
20
62
6D
1E
F6
D5
70
BD
70
B5
04
46
85
69
00
78
C0
07
07
D1
70
BD
62
68
A1
68
20
20
90
47
20
6A
40
1C
20
62
6D
1E
F6
D5
70
BD
00
00
F7
B5
00
25
75
29
10
68
00
99
14
A6
11
D0
C0
46
C0
46
00
28
02
DA
40
42
11
A6
08
E0
00
99
09
68
8A
07
01
D5
0F
A6
02
E0
49
07
04
D5
0E
A6
01
25
01
E0
C0
46
C0
46
00
9F
00
24
24
37
04
E0
00
F0
63
F9
30
31
39
55
64
1C
00
28
F8
D1
2B
46
32
46
21
46
00
98
00
F0
EB
F8
FE
BD
00
00
00
00
00
00
2D
00
00
00
2B
00
00
00
20
00
00
00
70
B5
04
46
0D
46
21
46
10
68
C0
46
C0
46
21
88
09
05
02
D5
0F
4A
7A
44
02
E0
0E
4A
7A
44
0E
32
23
46
00
21
24
33
05
E0
06
07
00
09
36
0F
96
5D
5E
54
49
1C
00
28
F7
D1
20
78
00
23
00
07
05
D5
70
2D
03
D0
00
29
01
D0
02
23
11
32
20
46
00
F0
B8
F8
70
BD
62
03
00
00
F3
B5
04
46
00
20
81
B0
20
62
20
46
E1
68
88
47
00
28
7D
D0
25
28
02
D0
62
68
A1
68
83
E0
45
4F
00
25
7F
44
20
46
E1
68
88
47
20
28
06
46
08
DB
31
2E
06
D2
B8
19
20
38
00
78
00
28
01
D0
05
43
F0
E7
A8
07
01
D5
04
20
85
43
00
20
E0
61
07
46
A0
61
2A
2E
0A
D0
30
46
00
F0
4C
F9
00
28
27
D0
B8
00
00
19
30
3E
00
90
86
61
19
E0
02
98
BA
00
12
19
02
C8
91
61
02
90
20
46
E1
68
88
47
01
2F
06
46
17
D1
E0
69
00
28
1F
DA
20
20
85
43
1C
E0
00
98
0A
21
80
69
48
43
00
99
80
19
30
38
88
61
20
46
E1
68
88
47
06
46
00
F0
24
F9
00
28
EF
D1
01
2F
0A
D0
2E
2E
08
D1
20
46
E1
68
88
47
06
46
20
20
05
43
7F
1C
02
2F
C3
DB
A0
69
00
28
03
DA
40
42
A0
61
01
20
05
43
E8
07
01
D0
10
20
85
43
00
2E
24
D0
30
46
41
38
19
28
03
D8
01
20
C0
02
05
43
20
36
20
46
25
60
31
46
02
9A
15
46
FF
F7
B1
FB
00
28
0C
D0
01
28
07
D0
ED
1D
E8
08
00
E0
0D
E0
C0
00
08
30
02
90
77
E7
2D
1D
02
95
74
E7
62
68
30
46
A1
68
90
47
20
6A
40
1C
6C
E7
20
6A
FE
BD
00
00
26
03
00
00
10
B5
04
46
03
E0
FF
F7
45
FE
40
1C
08
D0
20
78
05
49
64
1C
00
28
F6
D1
0A
20
FF
F7
3B
FE
10
BD
00
20
C0
43
10
BD
00
00
14
00
00
30
70
47
70
47
70
47
FF
B5
04
46
0D
46
81
B0
24
30
00
90
21
68
88
06
04
D5
10
22
E0
69
91
43
21
60
00
E0
01
20
A8
42
01
DD
47
1B
00
E0
00
27
04
98
A1
69
7A
19
10
18
08
1A
A0
61
20
78
C0
06
02
D4
20
46
FF
F7
A1
FE
00
26
08
E0
03
98
62
68
A1
68
80
5D
90
47
20
6A
40
1C
76
1C
20
62
04
98
86
42
F3
DB
20
78
C0
06
0A
D5
20
46
FF
F7
8D
FE
06
E0
62
68
A1
68
30
20
90
47
20
6A
40
1C
20
62
38
46
7F
1E
00
28
F4
DC
07
E0
00
98
62
68
A1
68
40
5D
90
47
20
6A
40
1C
20
62
28
46
6D
1E
00
28
F3
DC
20
46
FF
F7
87
FE
20
78
00
06
02
D5
02
20
05
B0
F0
BD
01
20
FB
E7
00
00
08
4B
70
B5
0D
46
7B
44
00
F0
27
F8
04
46
28
46
FF
F7
D9
FD
00
28
02
D0
00
20
C0
43
70
BD
20
46
70
BD
00
00
A7
FB
FF
FF
01
46
80
08
08
1A
02
09
10
18
02
0A
10
18
02
0C
10
18
C0
08
82
00
12
18
52
00
89
1A
01
E0
40
1C
0A
39
0A
29
FB
D2
70
47
01
69
4A
1C
02
61
08
78
70
47
00
B5
8F
B0
02
91
00
21
05
91
05
49
01
93
79
44
03
91
11
46
04
90
68
46
FF
F7
B7
FE
0F
B0
00
BD
00
00
E5
FF
FF
FF
75
46
00
F0
25
F8
AE
46
05
00
69
46
53
46
C0
08
C0
00
85
46
18
B0
20
B5
FF
F7
78
FD
60
BC
00
27
49
08
B6
46
00
26
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
40
3D
49
00
8D
46
70
47
10
B5
04
46
C0
46
C0
46
20
46
FF
F7
D8
FA
10
BD
00
00
00
48
70
47
18
00
00
30
30
38
0A
28
01
D2
01
20
70
47
00
20
70
47
00
00
53
00
00
00
4C
00
00
00
00
00
00
00
61
00
00
00
64
00
00
00
63
00
00
00
00
00
00
00
08
00
00
00
30
31
32
33
34
35
36
37
38
39
41
42
43
44
45
46
40
30
58
00
30
31
32
33
34
35
36
37
38
39
61
62
63
64
65
66
40
30
78
00
04
00
00
08
00
00
00
00
00
00
00
02
00
01
00
00
10
00
00
00
58
0C
00
00
00
00
00
30
18
00
00
00
04
01
00
00
70
0C
00
00
18
00
00
30
60
04
00
00
20
01
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
1C
4E
0E
00
00
00
00
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
#
# Cortex-M System Design Kit software compilation make file
#
#-----------------------------------------------------------------------------
#
# Configurations
#
# Choose the core instantiated, can be
# - CORTEX_M0
# - CORTEX_M0PLUS
CPU_PRODUCT = CORTEX_M0PLUS
TARGET = arm-none-eabi
# Shared software directory
SOFTWARE_DIR = $(SOCLABS_NANOSOC_TECH_DIR)/software
CMSIS_DIR = $(SOFTWARE_DIR)/cmsis
CORE_DIR = $(CMSIS_DIR)/CMSIS/Include
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0plus
else
DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0
endif
# Program file
TESTNAME = adc_tests
# Endian Option
COMPILE_BIGEND = 0
# Configuration
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
USER_DEFINE = -DCORTEX_M0PLUS
else
USER_DEFINE = -DCORTEX_M0
endif
DEPS_LIST = makefile
# Tool chain : ds5 / gcc / keil
TOOL_CHAIN = ds5
ifeq ($(TOOL_CHAIN),ds5)
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
CPU_TYPE = --cpu Cortex-M0plus
else
CPU_TYPE = --cpu Cortex-M0
endif
endif
ifeq ($(TOOL_CHAIN),ds6)
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
CPU_TYPE = -mcpu=Cortex-M0plus
else
CPU_TYPE = -mcpu=Cortex-M0
endif
endif
ifeq ($(TOOL_CHAIN),gcc)
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
CPU_TYPE = -mcpu=cortex-m0plus
else
CPU_TYPE = -mcpu=cortex-m0
endif
endif
# Startup code directory for DS-5
ifeq ($(TOOL_CHAIN),ds5)
STARTUP_DIR = $(DEVICE_DIR)/Source/ARM
endif
ifeq ($(TOOL_CHAIN),ds6)
STARTUP_DIR = $(DEVICE_DIR)/Source/ARM
endif
# Startup code directory for gcc
ifeq ($(TOOL_CHAIN),gcc)
STARTUP_DIR = $(DEVICE_DIR)/Source/GCC
endif
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
STARTUP_FILE = startup_CMSDK_CM0plus
SYSTEM_FILE = system_CMSDK_CM0plus
else
STARTUP_FILE = startup_CMSDK_CM0
SYSTEM_FILE = system_CMSDK_CM0
endif
# ---------------------------------------------------------------------------------------
# D5-5 options
# MicroLIB option
COMPILE_MICROLIB = 0
# Small Multiply (Cortex-M0/M0+ has small multiplier option)
COMPILE_SMALLMUL = 0
ifeq ($(TOOL_CHAIN),ds6)
ARM_TARGET = --target=arm-$(TARGET)
CC_TOOL = armclang -O1
ASM_TOOL = armclang -masm=armasm $(ARM_TARGET) -c
else
CC_TOOL = armcc -O3
ASM_TOOL = armasm
ARM_TARGET = -Otime
endif
ARM_CC_OPTIONS = $(ARM_TARGET) -c -g -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \
-I $(SOFTWARE_DIR)/common/retarget $(USER_DEFINE)
ARM_ASM_OPTIONS = -g
ARM_LINK_OPTIONS = "--keep=$(STARTUP_FILE).o(RESET)" "--first=$(STARTUP_FILE).o(RESET)" \
--rw_base 0x30000000 --ro_base 0x00000000 --map
ifeq ($(COMPILE_BIGEND),1)
# Big Endian
ARM_CC_OPTIONS += --bigend
ARM_ASM_OPTIONS += --bigend
ARM_LINK_OPTIONS += --be8
endif
ifeq ($(COMPILE_MICROLIB),1)
# MicroLIB
ARM_CC_OPTIONS += --library_type=microlib
ARM_ASM_OPTIONS += --library_type=microlib --pd "__MICROLIB SETA 1"
ARM_LINK_OPTIONS += --library_type=microlib
endif
ifeq ($(COMPILE_SMALLMUL),1)
# In Cortex-M0, small multiply takes 32 cycles
ARM_CC_OPTIONS += --multiply_latency=32
endif
# ---------------------------------------------------------------------------------------
# gcc options
GNG_CC = $(TARGET)-gcc
GNU_OBJDUMP = $(TARGET)-objdump
GNU_OBJCOPY = $(TARGET)-objcopy
LINKER_SCRIPT_PATH = $(SOFTWARE_DIR)/common/scripts
LINKER_SCRIPT = $(LINKER_SCRIPT_PATH)/cmsdk_cm0.ld
GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE)
ifeq ($(COMPILE_BIGEND),1)
# Big Endian
GNU_CC_FLAGS += -mbig-endian
endif
# ---------------------------------------------------------------------------------------
all: all_$(TOOL_CHAIN)
# ---------------------------------------------------------------------------------------
# DS-5
all_ds5 : $(TESTNAME).hex $(TESTNAME).lst
all_ds6 : $(TESTNAME).hex $(TESTNAME).lst
$(TESTNAME).o : $(SOFTWARE_DIR)/common/validation/$(TESTNAME).c $(DEPS_LIST)
$(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
$(SYSTEM_FILE).o : $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c $(DEPS_LIST)
$(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
retarget.o : $(SOFTWARE_DIR)/common/retarget/retarget.c $(DEPS_LIST)
$(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
uart_stdout.o : $(SOFTWARE_DIR)/common/retarget/uart_stdout.c $(DEPS_LIST)
$(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
$(STARTUP_FILE).o : $(STARTUP_DIR)/$(STARTUP_FILE).s $(DEPS_LIST)
$(ASM_TOOL) $(ARM_ASM_OPTIONS) $(CPU_TYPE) $< -o $@
$(TESTNAME).ELF : $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o
armlink $(ARM_LINK_OPTIONS) -o $@ $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o
$(TESTNAME).hex : $(TESTNAME).ELF
fromelf --vhx --8x1 $< --output $@
$(TESTNAME).lst : $(TESTNAME).ELF makefile
fromelf -c -d -e -s $< --output $@
# ---------------------------------------------------------------------------------------
# gcc
all_gcc:
$(GNG_CC) $(GNU_CC_FLAGS) $(STARTUP_DIR)/$(STARTUP_FILE).s \
$(SOFTWARE_DIR)/common/validation/$(TESTNAME).c \
$(SOFTWARE_DIR)/common/retarget/retarget.c \
$(SOFTWARE_DIR)/common/retarget/uart_stdout.c \
$(DEVICE_DIR)/Source/$(SYSTEM_FILE).c \
-I $(DEVICE_DIR)/Include -I $(CORE_DIR) \
-I $(SOFTWARE_DIR)/common/retarget \
-L $(LINKER_SCRIPT_PATH) \
-D__STACK_SIZE=0x200 \
-D__HEAP_SIZE=0x1000 \
$(USER_DEFINE) -T $(LINKER_SCRIPT) -o $(TESTNAME).o
# Generate disassembly code
$(GNU_OBJDUMP) -S $(TESTNAME).o > $(TESTNAME).lst
# Generate binary file
$(GNU_OBJCOPY) -S $(TESTNAME).o -O binary $(TESTNAME).bin
# Generate hex file
$(GNU_OBJCOPY) -S $(TESTNAME).o -O verilog $(TESTNAME).hex
# Note:
# If the version of object copy you are using does not support verilog hex file output,
# you can generate the hex file from binary file using the following command
# od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex
# ---------------------------------------------------------------------------------------
# Keil MDK
all_keil:
@echo "Please compile your project code and press ENTER when ready"
@read dummy
# ---------------------------------------------------------------------------------------
# Binary
all_bin: $(TESTNAME).bin
# Generate hex file from binary
od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex
# ---------------------------------------------------------------------------------------
# Clean
clean :
@rm -rf *.o
@if [ -e $(TESTNAME).hex ] ; then \
rm -rf $(TESTNAME).hex ; \
fi
@if [ -e $(TESTNAME).lst ] ; then \
rm -rf $(TESTNAME).lst ; \
fi
@if [ -e $(TESTNAME).ELF ] ; then \
rm -rf $(TESTNAME).ELF ; \
fi
@if [ -e $(TESTNAME).bin ] ; then \
rm -rf $(TESTNAME).bin ; \
fi
@rm -rf *.crf
@rm -rf *.plg
@rm -rf *.tra
@rm -rf *.htm
@rm -rf *.map
@rm -rf *.dep
@rm -rf *.d
@rm -rf *.lnp
@rm -rf *.bak
@rm -rf *.lst
@rm -rf *.axf
@rm -rf *.sct
@rm -rf *.__i
@rm -rf *._ia
......@@ -289,9 +289,16 @@ reg baud_clk_del;
wire rxd8_tvalid;
wire [7:0] rxd8_tdata ;
`ifdef FAST_SIM
parameter FAST_LOAD = 1;
`else
parameter FAST_LOAD = 0;
`endif
`ifndef COCOTB_SIM
nanosoc_axi_stream_io_8_txd_from_file #(
.TXDFILENAME(ADP_FILENAME)
.TXDFILENAME(ADP_FILENAME),
.FAST_LOAD(FAST_LOAD)
) u_nanosoc_axi_stream_io_8_txd_from_file (
.aclk (CLK),
.aresetn (NRST),
......