Compile XSPN input and ref data in flash memory.
Comparison of first 15 samples passed.
This commit is contained in:
		@@ -7,11 +7,17 @@
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <array>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
 | 
			
		||||
using spn =spn_regs<0x90000000>;
 | 
			
		||||
 | 
			
		||||
#define IOF_ENABLE_TERMINAL (0x30000)
 | 
			
		||||
 | 
			
		||||
// huge arrays of XSPN input and referance data
 | 
			
		||||
extern std::array<uint8_t, 50000> input_data;
 | 
			
		||||
extern std::array<double, 10000> ref_data;
 | 
			
		||||
constexpr auto ln2 = std::log(2);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef void (*function_ptr_t) (void);
 | 
			
		||||
//! Instance data for the PLIC.
 | 
			
		||||
@@ -92,18 +98,8 @@ int main() {
 | 
			
		||||
 | 
			
		||||
    // write input samples into the memory
 | 
			
		||||
    int * mem_base = (int *) 0x80001000;
 | 
			
		||||
    std::array<uint8_t, 64> input_data = {
 | 
			
		||||
    		0, 0, 0, 1, 0,
 | 
			
		||||
			0, 1, 5, 2, 0,
 | 
			
		||||
    		0, 0, 8, 0, 0,
 | 
			
		||||
    		0, 0, 5, 4, 0,
 | 
			
		||||
    		0, 0, 0, 1, 0,
 | 
			
		||||
    		0, 0, 0, 1, 0,
 | 
			
		||||
    		0, 0, 0, 1, 0,
 | 
			
		||||
    		0, 0, 0, 1, 0
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for(size_t i = 0, j = 0; j < 16; i += 4, j++) {
 | 
			
		||||
    for(size_t i = 0, j = 0; j < 19; i += 4, j++) {
 | 
			
		||||
    	*(mem_base+j) = input_data.at(i);
 | 
			
		||||
    	*(mem_base+j) |= input_data.at(i+1) << 8;
 | 
			
		||||
    	*(mem_base+j) |= input_data.at(i+2) << 16;
 | 
			
		||||
@@ -118,11 +114,11 @@ int main() {
 | 
			
		||||
 | 
			
		||||
    printf("Start SPN HW accelerator\n");
 | 
			
		||||
    spn::mode_reg() = 0;
 | 
			
		||||
    spn::input_length_reg() = 8;
 | 
			
		||||
    spn::input_length_reg() = 15;
 | 
			
		||||
    spn::input_addr_reg() = 0x80001000;
 | 
			
		||||
    spn::output_addr_reg() = 0x80001000;
 | 
			
		||||
    spn::num_of_in_beats_reg() = 1;
 | 
			
		||||
    spn::num_of_out_beats_reg() = 1;
 | 
			
		||||
    spn::num_of_in_beats_reg() = 2;
 | 
			
		||||
    spn::num_of_out_beats_reg() = 2;
 | 
			
		||||
    spn::start_reg() = 1;
 | 
			
		||||
 | 
			
		||||
    delayUS(50);
 | 
			
		||||
@@ -133,14 +129,13 @@ int main() {
 | 
			
		||||
    // read calculation results from the memory
 | 
			
		||||
    double * res_base = (double*)mem_base;
 | 
			
		||||
 | 
			
		||||
    if (double_equals(res_base[0], -3.5530456851)) {
 | 
			
		||||
        printf("XSPN reference value comparison PASSED\n");
 | 
			
		||||
    } else {
 | 
			
		||||
        printf("XSPN reference value comparison FAILED\n");
 | 
			
		||||
    	return 1;
 | 
			
		||||
    }
 | 
			
		||||
    for (int i = 0; i < 15; i++) {
 | 
			
		||||
        if (double_equals(res_base[i] * ln2, ref_data.at(i))) {
 | 
			
		||||
            printf("XSPN ref %d comparison PASSED\n", i);
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("XSPN ref %d comparison FAILED\n", i);
 | 
			
		||||
        }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    printf("End of execution");
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20005
									
								
								raven_spn/src/xspn_data.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20005
									
								
								raven_spn/src/xspn_data.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user