1717#define __XDMA_H__
1818
1919#include " common.h"
20- #include " diffstate.h"
2120#include " mpool.h"
2221#include < atomic>
2322#include < queue>
24- #include < signal.h>
2523#include < stdbool.h>
2624#include < stdio.h>
2725#include < stdlib.h>
2826#include < sys/shm.h>
2927#include < thread>
30- #include < unistd.h>
3128#include < vector>
3229#ifdef FPGA_SIM
3330#include " xdma_sim.h"
3431#endif // FPGA_SIM
3532
36- #define HOST_IO_RESET 0x0
37- #define HOST_IO_DIFFTEST_ENABLE 0x4
38-
3933#define DMA_PACKGE_NUM 8
34+
4035// DMA_PADDING (packge_idx(1) + difftest_data) send width to be calculated by mod up
4136#define DMA_PACKGE_LEN (CONFIG_DIFFTEST_BATCH_BYTELEN + 1 )
4237#define DMA_PACKGE_ALIGNED ((DMA_PACKGE_LEN + 63 ) / 64 * 64 )
@@ -58,55 +53,36 @@ class FpgaXdma {
5853public:
5954 FpgaXdma ();
6055
61- void start (bool enable_diff ) {
56+ void start () {
6257 running = true ;
63- if (enable_diff == false ) {
64- static volatile sig_atomic_t signal_received = 0 ;
65-
66- auto handler = [](int sig) {
67- signal_received = sig;
68- printf (" \n Received signal %d, terminating...\n " , sig);
69- exit (0 );
70- };
71-
72- signal (SIGINT, handler);
73- signal (SIGTERM, handler);
74-
75- while (signal_received == 0 ) {
76- usleep (10000 );
77- }
78- } else {
7958#ifdef USE_THREAD_MEMPOOL
80- std::unique_lock<std::mutex> lock (thread_mtx);
81- start_transmit_thread ();
82- while (running) {
83- thread_cv.wait (lock); // wait notify from stop
84- }
85- stop_thansmit_thread ();
59+ std::unique_lock<std::mutex> lock (thread_mtx);
60+ start_transmit_thread ();
61+ while (running) {
62+ thread_cv.wait (lock); // wait notify from stop
63+ }
64+ stop_thansmit_thread ();
8665#else
87- read_and_process ();
66+ read_and_process ();
8867#endif // USE_THREAD_MEMPOOL
89- }
9068 }
91-
9269 void stop () {
9370 running = false ;
9471#ifdef USE_THREAD_MEMPOOL
9572 thread_cv.notify_one ();
9673#endif // USE_THREAD_MEMPOOL
9774 }
75+ void ddr_load_workload (const char *workload) {
76+ core_reset ();
77+ device_write (true , workload, 0 , 0 );
78+ core_restart ();
79+ }
9880
99- void fpga_io ( uint64_t address, bool enable) {
81+ void fpga_reset_io ( bool enable) {
10082 if (enable)
101- device_write (false , nullptr , address , 0x1 );
83+ device_write (false , nullptr , 0x0 , 0x1 );
10284 else
103- device_write (false , nullptr , address, 0x0 );
104- }
105-
106- void ddr_load_workload (const char *workload) {
107- fpga_io (HOST_IO_RESET, true );
108- device_write (true , workload, 0 , 0 );
109- fpga_io (HOST_IO_RESET, false );
85+ device_write (false , nullptr , 0x0 , 0x0 );
11086 }
11187
11288private:
@@ -117,6 +93,16 @@ class FpgaXdma {
11793#endif
11894
11995 void device_write (bool is_bypass, const char *workload, uint64_t addr, uint64_t value);
96+ void core_reset () {
97+ device_write (false , nullptr , 0x20000 , 0x1 );
98+ device_write (false , nullptr , 0x100000 , 0x1 );
99+ device_write (false , nullptr , 0x10000 , 0x8 );
100+ }
101+
102+ void core_restart () {
103+ device_write (false , nullptr , 0x20000 , 0 );
104+ device_write (false , nullptr , 0x100000 , 0 );
105+ }
120106
121107#ifdef USE_THREAD_MEMPOOL
122108 std::mutex thread_mtx;
0 commit comments