From 8249a0417e785fc588b2598bf0260dc2ecde3825 Mon Sep 17 00:00:00 2001 From: Stas Date: Wed, 4 Nov 2020 17:41:56 +0100 Subject: [PATCH] First configuration of the XSPNController --- .../bsp/env/freedom-e300-hifive1/flash.lds | 2 +- raven_spn/raven_spn | Bin 119224 -> 118892 bytes raven_spn/src/raven_spn.cpp | 34 ++++++++---------- raven_spn/src/spn_regs.h | 28 +++++++++++---- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds b/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds index 6b37141..feb893b 100644 --- a/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds +++ b/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds @@ -5,7 +5,7 @@ ENTRY( _start ) MEMORY { flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K + ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 512K } PHDRS diff --git a/raven_spn/raven_spn b/raven_spn/raven_spn index cee7a80477de00e59f34caf719de78e9ea2ebb57..b4ba59a3c3e3b4705b1d3421321fa29d64a0c7cf 100755 GIT binary patch delta 23598 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 delta 23784 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 diff --git a/raven_spn/src/raven_spn.cpp b/raven_spn/src/raven_spn.cpp index b0266c1..4117cb6 100644 --- a/raven_spn/src/raven_spn.cpp +++ b/raven_spn/src/raven_spn.cpp @@ -49,17 +49,7 @@ void configure_irq(size_t irq_num, function_ptr_t handler, unsigned char prio=1) static void msi_interrupt_handler(){ int * local_mem_base = (int *) 0x80000100; - int hartid = read_csr(mhartid); - - int val_a = *local_mem_base; - int val_b = *(local_mem_base+1); - int sum = val_a + val_b; - *(local_mem_base+100) = sum; - if (sum == 0xF) - printf("HW thread ID %d: sum of A+B=0x%x\n", hartid, sum); - else { - printf("HW thread ID %d: sum of A+B is not 0x%x. Test FAILED!!!\n", hartid, sum); - } + printf("INterrupt handler call\n"); } /*!\brief initializes platform @@ -94,16 +84,22 @@ void platform_init(){ int main() { platform_init(); - printf("Configure SPN HW accelerator\n"); - spn::mode_reg() = 0; - spn::input_length_reg() = 1; - spn::input_addr_reg() = 0x80000000; - spn::output_addr_reg() = 0x80001000; - spn::num_of_in_beats_reg() = 1; - spn::num_of_out_beats_reg() = 1; + spn::mode_reg() = 1; + spn::start_reg() = 1; + printf("READOUT reuslt:0x%x\n", spn::readout_reg()); + spn::interrupt_reg() = 1; + spn::input_length_reg() = 5; + spn::input_addr_reg() = 0x80000000; + spn::output_addr_reg() = 0x80100000; + spn::num_of_in_beats_reg() = 5; + spn::num_of_out_beats_reg() = 1; + spn::mode_reg() = 0; + + uint32_t result_addr = spn::output_addr_reg(); + + spn::start_reg() = 1; printf("Start SPN HW accelerator\n"); - spn::start_reg()=1; delayUS(100); diff --git a/raven_spn/src/spn_regs.h b/raven_spn/src/spn_regs.h index 59b2e98..a733586 100644 --- a/raven_spn/src/spn_regs.h +++ b/raven_spn/src/spn_regs.h @@ -40,23 +40,25 @@ #include #define SPN_REG_START 0x00 -#define SPN_REG_RET_VAL 0x10 +#define SPN_REG_READOUT 0x10 #define SPN_REG_MODE 0x20 #define SPN_REG_INPUT_LENGTH 0x30 #define SPN_REG_INPUT_ADDR 0x40 #define SPN_REG_OUTPUT_ADDR 0x50 #define SPN_REG_NUM_OF_INPUT_BEATS 0x60 #define SPN_REG_NUM_OF_OUTPUT_BEATS 0x70 +#define SPN_REG_INTERRUPT 0x0C template class spn_regs { public: // storage declarations - BEGIN_BF_DECL(start_t, uint32_t); - BF_FIELD(start, 0, 1); - END_BF_DECL() r_start; +// BEGIN_BF_DECL(start_t, uint32_t); +// BF_FIELD(start, 0, 1); +// END_BF_DECL() r_start; + uint32_t r_start; - uint32_t r_ret_val; + uint32_t r_readout; uint32_t r_mode; @@ -70,8 +72,15 @@ public: uint32_t r_num_of_output_beats; - static inline start_t& start_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_START); +// static inline start_t& start_reg(){ +// return *reinterpret_cast(BASE_ADDR+SPN_REG_START); +// } + static inline uint32_t& start_reg(){ + return *reinterpret_cast(BASE_ADDR+SPN_REG_START); + } + + static inline uint32_t & readout_reg(){ + return *reinterpret_cast(BASE_ADDR+SPN_REG_READOUT); } static inline uint32_t & mode_reg(){ @@ -97,6 +106,11 @@ public: static inline uint32_t & num_of_out_beats_reg(){ return *reinterpret_cast(BASE_ADDR+SPN_REG_NUM_OF_OUTPUT_BEATS); } + + static inline uint32_t & interrupt_reg(){ + return *reinterpret_cast(BASE_ADDR+SPN_REG_INTERRUPT); + } + }; #endif // _SPN_REGS_H_