Skip to content

Commit

Permalink
ADD: fix APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
iansseijelly committed Jan 24, 2025
1 parent a2375c8 commit 23bf187
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 19 deletions.
2 changes: 1 addition & 1 deletion driver/rocket-chip/l_trace_encoder/l_trace_encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ void l_trace_sink_dma_configure_addr(LTraceSinkDmaType *sink_dma, uint64_t dma_a
void l_trace_sink_dma_read(LTraceSinkDmaType *sink_dma, uint8_t *buffer) {
sink_dma->TR_SK_DMA_FLUSH = 1;
while (sink_dma->TR_SK_DMA_FLUSH_DONE == 0) {
;
// printf("waiting for flush done\n");
}
// printf("[l_trace_sink_dma_read] flush done\n");
uint64_t count = sink_dma->TR_SK_DMA_COUNT;
Expand Down
18 changes: 10 additions & 8 deletions driver/rocket-chip/l_trace_encoder/l_trace_encoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
#include "rocketcore.h"

typedef struct {
uint32_t TR_TE_CTRL;
uint32_t TR_TE_TARGET;
uint32_t TR_TE_HPM_COUNTER;
uint32_t TR_TE_HPM_TIME;
__IO uint32_t TR_TE_CTRL; //0x00
__I uint32_t TR_TE_INFO; //0x04
__IO uint32_t TR_TE_BUBBLE[6]; //0x08-0x1C
__IO uint32_t TR_TE_TARGET; //0x20
__IO uint32_t TR_TE_HPM_COUNTER; //0x24
__IO uint32_t TR_TE_HPM_TIME; //0x28
} LTraceEncoderType;

typedef struct {
uint32_t TR_SK_DMA_FLUSH;
uint32_t TR_SK_DMA_FLUSH_DONE;
uint64_t TR_SK_DMA_ADDR;
uint64_t TR_SK_DMA_COUNT;
__IO uint32_t TR_SK_DMA_FLUSH;
__I uint32_t TR_SK_DMA_FLUSH_DONE;
__IO uint64_t TR_SK_DMA_ADDR;
__I uint64_t TR_SK_DMA_COUNT;
} LTraceSinkDmaType;

#define TARGET_PRINT 0x0
Expand Down
49 changes: 40 additions & 9 deletions examples/pmu-tests/src/ltrace-dma-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,34 @@
#include "riscv.h"
#include "riscv_encoding.h"
#include "l_trace_encoder.h"
#include "math.h"
#define USE_L_TRACE_DMA
__attribute__((aligned(64), section(".noinit"))) static volatile uint8_t dma_buffer[512 * 1024];

#define NUM_ITERS 100
#define NUM_ITERS 60 // 0 to 2pi, 60 steps

#define USE_L_TRACE_DMA
void FOC_invParkTransform(float *v_alpha, float *v_beta, float v_q, float v_d, float sin_theta, float cos_theta) {
*v_alpha = -(sin_theta * v_q) + (cos_theta * v_d);
*v_beta = (cos_theta * v_q) + (sin_theta * v_d);
}

__attribute__((aligned(64), section(".noinit"))) static volatile uint8_t dma_buffer[512 * 1024];
void FOC_invClarkSVPWM(float *v_a, float *v_b, float *v_c, float v_alpha, float v_beta) {
float v_a_phase = v_alpha;
float v_b_phase = (-.5f * v_alpha) + ((sqrtf(3.f)/2.f) * v_beta);
float v_c_phase = (-.5f * v_alpha) - ((sqrtf(3.f)/2.f) * v_beta);

float v_neutral = .5f * (fmaxf(fmaxf(v_a_phase, v_b_phase), v_c_phase) + fminf(fminf(v_a_phase, v_b_phase), v_c_phase));

*v_a = v_a_phase - v_neutral;
*v_b = v_b_phase - v_neutral;
*v_c = v_c_phase - v_neutral;
}

void FOC_update(float *v_a, float *v_b, float *v_c, float vq, float vd) {
float v_alpha, v_beta;
FOC_invParkTransform(&v_alpha, &v_beta, vq, vd, sin(vq), cos(vq));
FOC_invClarkSVPWM(v_a, v_b, v_c, v_alpha, v_beta);
}

int main(int argc, char **argv) {
// 64 aligned
Expand All @@ -20,15 +42,24 @@ int main(int argc, char **argv) {
l_trace_encoder_configure_target(encoder, TARGET_PRINT);
#endif
l_trace_encoder_start(encoder);
volatile int c;
// do some dummy loops
for (int i = 0; i < NUM_ITERS; i++) {
c += i;
for (int i = 0; i < 10; i++) {
__asm__("nop");
}
// do some different loops

// warmup
// float v_a = 0, v_b = 0, v_c = 0;
// FOC_update(&v_a, &v_b, &v_c, 0, 0);
printf("Starting trace encoder\n");

for (int i = 0; i < NUM_ITERS; i++) {
c -= i;
float vq = 2 * M_PI * i / NUM_ITERS;
float vd = 0;
volatile float v_a, v_b, v_c;
for (int j = 0; j < 2; j++) {
FOC_update(&v_a, &v_b, &v_c, vq, vd);
}
}

l_trace_encoder_stop(encoder);
#ifdef USE_L_TRACE_DMA
l_trace_sink_dma_read(sink_dma, dma_buffer);
Expand Down
2 changes: 1 addition & 1 deletion examples/pmu-tests/src/vpp-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ int main(int argc, char **argv) {
for (int i = 0; i < NUM_ITERS; i++) {
float vq = 2 * M_PI * i / NUM_ITERS;
float vd = 0;
float v_alpha, v_beta, v_a, v_b, v_c;
volatile float v_a, v_b, v_c;
for (int j = 0; j < 2; j++) {
FOC_update(&v_a, &v_b, &v_c, vq, vd);
}
Expand Down

0 comments on commit 23bf187

Please sign in to comment.