signal_processing_vorlage/tests/software/HardwareTaskSimulation.cc
Johannes Kutning 0d1b73e3e0 Initial commit
2023-10-31 07:47:27 +01:00

46 lines
1.3 KiB
C++

#include "HardwareTaskSimulation.h"
#include "../../software/signal_processing/system/hardware_task.h"
#include <chrono>
#define REG_START_OFFSET 0
#define REG_STATE_OFFSET 1
#define REG_CYCLE_COUNT_OFFSET 2
#define REG_CONFIG_0_OFFSET 3
#define FREQ 200e6
HardwareTaskSimulation::HardwareTaskSimulation( task_function function )
: state( 0 ),
cycleCount( 0 ),
function( function ) {
}
uint32_t HardwareTaskSimulation::read( uint32_t offset ) const {
switch ( offset ) {
case REG_STATE_OFFSET: return state;
case REG_CYCLE_COUNT_OFFSET: return cycleCount;
case REG_CONFIG_0_OFFSET: return config[ 0 ];
}
return static_cast< uint32_t >( -1 );
}
void HardwareTaskSimulation::write( uint32_t offset, uint32_t value ) {
switch ( offset ) {
case REG_START_OFFSET: start(); break;
case REG_CONFIG_0_OFFSET: config[ 0 ] = value; break;
}
}
void HardwareTaskSimulation::start() {
using namespace std::chrono;
auto start = high_resolution_clock::now();
state = HARDWARE_TASK_RUNNING;
function( config );
state = HARDWARE_TASK_DONE;
auto stop = high_resolution_clock::now();
auto time = duration_cast< duration< double > >( stop - start );
cycleCount = static_cast< uint32_t >( time.count() * FREQ );
}